nextcloud报错"Internal Server Error"的解决方法

在使用nextcloud过程中,突然出现"Internal Server Error"错误,提示如下:

Internal Server Error

The server encountered an internal error and was unable to complete your request.
Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.
More details can be found in the server log.

通过查找原因,最后有两种解决方法:

1.安装APCu扩展

2.清空数据表oc_filecache数据

通过方法2解决了我的问题.

 

 

 

javascript立即执行函数( function(){…} )()和( function (){…} () )

( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法,要理解立即执行函数,需要先理解一些函数的基本概念。

函数声明:

function fnName () {…};使用function关键字声明一个函数,再指定一个函数名,叫函数声明。

函数表达式:

var fnName = function () {…};使用function关键字声明一个函数,但未给函数命名,最后将匿名函数赋予一个变量,叫函数表达式,这是最常见的函数表达式语法形式。

匿名函数:

function () {}; 使用function关键字声明一个函数,但未给函数命名,所以叫匿名函数,匿名函数属于函数表达式,匿名函数有很多作用,赋予一个变量则创建函数,赋予一个事件则成为事件处理程序或创建闭包等等。

函数声明和函数表达式不同之处在于:

一、Javascript引擎在解析javascript代码时会‘函数声明提升'(Function declaration Hoisting)当前执行环境(作用域)上的函数声明。

而函数表达式必须等到Javascirtp引擎执行到它所在行时,才会从上而下一行一行地解析函数表达式。

二、函数表达式后面可以加括号立即调用该函数,函数声明不可以,只能以fnName()形式调用。

在function前面加!、+、 -甚至是逗号等到都可以起到函数定义后立即执行的效果,而()、!、+、-、=等运算符,都将函数声明转换成函数表达式。

消除了javascript引擎识别函数表达式和函数声明的歧义,告诉javascript引擎这是一个函数表达式,不是函数声明,可以在后面加括号,并立即执行函数的代码。

扩展资料

作用:

javascript中没用私有作用域的概念,如果在多人开发的项目上,你在全局或局部作用域中声明了一些变量,可能会被其他人不小心用同名的变量给覆盖掉。

根据javascript函数作用域链的特性,可以使用这种技术可以模仿一个私有作用域,用匿名函数作为一个“容器”。

“容器”内部可以访问外部的变量,而外部环境不能访问“容器”内部的变量,所以( function(){…} )()内部定义的变量不会和外部的变量发生冲突,俗称“匿名包裹器”或“命名空间”。

JQuery使用的就是这种方法,将JQuery代码包裹在( function (window,undefined){…jquery代码…} (window)中,在全局作用域中调用JQuery代码时,可以达到保护JQuery内部变量的作用。

 

来源:https://zhidao.baidu.com/question/1830337028432640660.html

Web内容无障碍指南(WCAG)

Web内容无障碍指南(WCAG)2.1涵盖了使Web内容更易于访问的各种建议。遵循这些准则将使更多残疾人更容易获取网站内容,其中包括失明和弱视、耳聋和听力丧失、运动受限、言语障碍、光敏性和多种残疾组合的残疾人,以及有学习障碍和认知局限的残疾人; 但不会满足这些残疾用户的所有需求。这些准则旨在解决台式机,笔记本电脑,平板电脑和移动设备上的Web内容的无障碍问题。遵循这些准则通常也会使网站内容对用户更有用。

WCAG 2.1成功标准是作为非特定技术的可测试语句编写的。有关满足特定技术成功标准的准则以及有关解释成功标准的一般信息,请参见单独的文件。有关介绍和WCAG技术和教育资料的链接,请参阅Web内容无障碍指南(WCAG)概述。

WCAG 2.1扩展了Web内容无障碍指南2.0[WCAG20], 该指南于2008年12月作为W3C建议书发布。符合WCAG 2.1的内容也符合WCAG 2.0。工作组希望,对于要求符合WCAG 2.0的政策,WCAG 2.1可以提供一种一致的替代方法。WCAG 2.1的发布并未弃用或取代WCAG 2.0。虽然WCAG 2.0仍然是W3C 推荐标准,但W3C建议使用WCAG 2.1来最大限度地提高无障碍工作的未来适用性。W3C还鼓励在开发或更新Web无障碍策略时使用最新版本的WCAG。

中文版 https://www.w3.org/Translations/WCAG21-zh/

英文版 https://www.w3.org/TR/WCAG21/

微信公众号开发中https问题

有个客户突然说微信登录和支付都有问题.

通过排查,发现在网页链接时经常中断,出现无法连接等情况.

最后发现是没正确配置https,造成与微信通信时无法连接,无法正确返回数据.

 

php foreach、while性能比较

来源:https://www.jb51.net/article/20415.htm

foreach是对数组副本进行操作(通过拷贝数组),而while则通过移动数组内部指标进行操作,一般逻辑下认为,while应该比foreach快(因为foreach在开始执行的时候首先把数组复制进去,而while直接移动内部指标。),但结果刚刚相反。
在循环里进行的是数组“读”操作,则foreach比while快:

foreach ($array as $value) {
echo $value;
}
while (list($key) = each($array)) {
echo $array[$key];
}

 

在循环里进行的是数组“写”操作,则while比foreach快:

foreach ($array as $key => $value) {
echo $array[$key] = $value . '...';
}
while (list($key) = each($array)) {
$array[$key] = $array[$key] . '...';
}

 

总结:通常认为,foreach涉及到值复制,一定会比while慢,但实际上,如果仅仅是在循环里进行数组的读操作,那么foreach是很
快的,这是因为PHP采用的复制机制是“引用计数,写时复制”,也就是说,即便在PHP里复制一个变量,最初的形式从根本上说其实
仍然是引用的形式,只有当变量的内容发生变化时,才会出现真正的复制,之所以这么做是出于节省内存消耗得目的,同时也提升了
复制的效率。这样看来,foreach的高效读操作就不难理解了。另外,既然foreach不适合处理数组写操作,那么我们可以得出一个结
论,多数情况下,类似foreach ($array as $key => $value)形式的做数组写操作得代码都应该被替换成while (list($key) =
each($array))。这些技巧产生的速度差异在小项目里可能并不明显,但是在类似框架这样的大项目中,一次请求动辄便会涉及到几
百几千几万次数组循环操作,差异就会明显放大。

mysql中删除某字段中最后一个指定字符

删除某字段中最后一个指定字符

UPDATE `chengyu` SET `source`=LEFT(`source`,CHAR_LENGTH(`source`)-1) WHERE RIGHT(`source`,1) = "”"

删除某字段中最后一个指定字符扩展

UPDATE `chengyu` SET `source`=LEFT(`source`,CHAR_LENGTH(`source`)-1) WHERE RIGHT(`source`,1)="’" and  RIGHT(`source`,2)="。’"

替换字段中指定字符

UPDATE `xiaohua` SET `content` = REPLACE(`content`,'_x000D_','') WHERE `content` LIKE '%_x000D_%'

查询结果只显示重复字段最新的数据,去重后显示最新的字段

select max(topic) as topic,max(time) from search group by topic order by max(time) desc limit 0,10

删除指定字符及其后面的所有字符

update `dream` set `content`=SUBSTR(`content`,1,LOCATE('【',`content`)-1) where `content` like '%【%'

 

 

移动端网页开发中viewport的用法

通过js进行处理,可以更好的实现多终端下的viewport设置.

<script> 
    var deviceWidth = parseInt(window.screen.width);  //获取当前设备的屏幕宽度 
    var deviceScale = deviceWidth / 640;  //得到当前设备屏幕与640之间的比例,之后我们就可以将网页宽度固定为640px 
    var ua = navigator.userAgent; 
    //获取当前设备类型(安卓或苹果) 
    if (/Android (\d+.\d+)/.test(ua)) { 
        var version = parseFloat(RegExp.$1); 
        if (version > 2.3) { 
            document.write('<meta name="viewport" content="width=640,initial-scale=' + deviceScale + ', minimum-scale = ' + deviceScale + ', maximum-scale = ' + deviceScale + ', target-densitydpi=device-dpi">'); 
        } else { 
            document.write('<meta name="viewport" content="width=640,initial-scale=0.75,maximum-scale=0.75,minimum-scale=0.75,target-densitydpi=device-dpi" />'); 
        } 
    } else { 
        document.write('<meta name="viewport" content="width=640, user-scalable=no">'); 
    } 
</script> 

 

来源:https://blog.csdn.net/wxl1555/article/details/80198559

 

 

 

宝塔面板Sqlite错误修复

对宝塔面板的插件进行升级后,突然不能打开面板.

使用ssh连接服务器后,对宝塔面板进行重启,发现Sqlite错误,无法重启成功.

然后通过命令行修复宝塔面板也是无效.

后通过卸载面板,再进行安装时,发现yum,rpm等命令均不可用.

经过排查,最终发现是Sqlite问题.只需进行修复即可.

下载两个文件

wget -c http://archives.fedoraproject.org/pub/archive/fedora/linux/updates/23/x86_64/s/sqlite-3.11.0-3.fc23.x86_64.rpm

wget -c http://archives.fedoraproject.org/pub/archive/fedora/linux/updates/23/x86_64/s/sqlite-libs-3.11.0-3.fc23.x86_64.rpm

执行命令

rpm2cpio sqlite-3.11.0-3.fc23.x86_64.rpm | cpio -idmv

rpm2cpio sqlite-libs-3.11.0-3.fc23.x86_64.rpm | cpio -idmv

再输入

cp -R usr/ /

遇到询问,直接输入 y

最后执行安装

yum reinstall sqlite

[转载]【ES6】var、let、const三者的区别

首先,一个常见的问题是,ECMAScript 和 JavaScript 到底是什么关系?

ECMAScript是一个国际通过的标准化脚本语言。JavaScript由ECMAScript和DOM、BOM三者组成。可以简单理解为:ECMAScript是JavaScript的语言规范,JavaScript是ECMAScript的实现和扩展。

2011 年,ECMAScript 5.1 版发布。之前我们大部分人用的也就是ES5

2015 年 6 月,ECMAScript 6 正式通过,成为国际标准。

1. 块级作用域 {}
ES5 中作用域有:全局作用域、函数作用域。没有块作用域的概念。

ES6 中新增了块级作用域。块作用域由 { } 包括,if语句和 for语句里面的{ }也属于块作用域。

<script type="text/javascript">
	
    {
        var a = 1;
        console.log(a); // 1
    }
    console.log(a); // 1
    // 通过var定义的变量可以跨块作用域访问到。
 
    (function A() {
        var b = 2;
        console.log(b); // 2
    })();
    // console.log(b); // 报错,
    // 可见,通过var定义的变量不能跨函数作用域访问到
 
    if(true) {
        var c = 3;
    }
    console.log(c); // 3
    for(var i = 0; i < 4; i ++) {
        var d = 5;
    };
    console.log(i); // 4   (循环结束i已经是4,所以此处i为4)
    console.log(d); // 5
    // if语句和for语句中用var定义的变量可以在外面访问到,
    // 可见,if语句和for语句属于块作用域,不属于函数作用域。
 
</script>

2. var、let、const的区别

var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问。
let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。
const用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改。

<script type="text/javascript">
    // 块作用域
    {
        var a = 1;
        let b = 2;
        const c = 3;
        // c = 4; // 报错
        var aa;
        let bb;
        // const cc; // 报错
        console.log(a); // 1
        console.log(b); // 2
        console.log(c); // 3
        console.log(aa); // undefined
        console.log(bb); // undefined
    }
    console.log(a); // 1
    // console.log(b); // 报错
    // console.log(c); // 报错
 
    // 函数作用域
    (function A() {
        var d = 5;
        let e = 6;
        const f = 7;
        console.log(d); // 5
        console.log(e); // 6  
        console.log(f); // 7 
 
    })();
    // console.log(d); // 报错
    // console.log(e); // 报错
    // console.log(f); // 报错
</script>

 

3. const定义的对象属性是否可以改变
这是今天面试的时候碰到的一个问题,上面说到 const 是不能修改的,于是很痛快的说不能,但是回来实际测试后发现错了,在此记录一下。

 const person = {
     name : 'jiuke',
     sex : '男'
 }
 
 person.name = 'test'
 
 console.log(person.name)

运行上述代码,发现person对象的name属性确实被修改了,这是怎么回事呢?

因为对象是引用类型的,person中保存的仅是对象的指针,这就意味着,const仅保证指针不发生改变,修改对象的属性不会改变对象的指针,所以是被允许的。也就是说const定义的引用类型只要指针不发生改变,其他的不论如何改变都是允许的。

然后我们试着修改一下指针,让person指向一个新对象,果然报错

const person = {
   name : 'jiuke',
   sex : '男'
}
 
person = {
   name : 'test',
   sex : '男'
}

 

来源:https://blog.csdn.net/unionz/article/details/80032048