背景:以前调试PHP如CPU100%发生在哪儿,用GDB,现在PHP自己带了一个PHPGDB,方便调试。


root@119.10.6.23:/data/codesdev/phpServer# php test.php
root@119.10.6.23:/data/software/lnmp1.1-full/php-5.6.0# ps aux|grep test.php
root      4071  1.3  1.5 350356 92040 pts/1    S+   11:37   0:00 php test.php
cli方式执行php脚本,加入执行的进程号为4071。我们使用gdb命令来调试进程。
root@119.10.6.23:/data/software/lnmp1.1-full/php-5.6.0# gdb -p 4071

(gdb) print (char *)executor_globals.active_op_array->filename
$1 = 0x2ad61b4c8c48 "/data/codesdev/phpServer/test.php"
(gdb) print (char *)executor_globals.active_op_array->function_name
$2 = 0x2ad61b4c8d50 "test1"
(gdb)  print executor_globals->current_execute_data->opline->lineno
$3 = 4
(gdb)  print executor_globals->current_execute_data->opline->lineno
$4 = 4
很显然,他正在执行第四行的sleep方法。
如果上面的方法你感觉麻烦,那你可以使用.gdbinit文件。这个文件在php源码的根目录下。使用方法如下:


题外话:
​从php5.6开始,php中集成了一个phpdbg的工具。可以像gdb调试c语言程序一样,调试php程序。感兴趣的话,可以打开下面的连接看看。
https://wiki.php.net/rfc/phpdbg
http://phpdbg.com/docs
来自:http://www.searchtb.com/2014/04/当cpu飙升时,找出php中可能有问题的代码行.html
————————————————————————————————————————————————————————————
phpdbg 作为一个交互式集成的调试器SAPI:
http://phpdbg.com/
Download:
https://codeload.github.com/krakjoe/phpdbg/legacy.zip/v0.4.0
Unzip:
root@119.10.6.23:/data/software/lnmp1.1-full/php-5.6.0/ext/krakjoe-phpdbg-cee9645#

http://phpdbg.com/docs
Installation
To install phpdbg, you must compile the source against your PHP installation sources, and enable the SAPI with the configure command.

cd /usr/src/php-src/sapi
git clone https://github.com/krakjoe/phpdbg
cd ../
./buildconf --force
./config.nice
make -j8
make install-phpdbg

phpdbg  Felipe Pena, Joe Watkins, Bob Weinand
Command Line Options
The following switches are implemented (just like cli SAPI):

-n ignore php ini
-c search for php ini in path
-z load zend extension
-d define php ini entry
The following switches change the default behaviour of phpdbg:

-v disables quietness
-s enabled stepping
-e sets execution context
-b boring - disables use of colour on the console
-I ignore .phpdbginit (default init file)
-i override .phpgdbinit location (implies -I)
-O set oplog output file
-q do not print banner on startup
-r jump straight to run
-E enable step through eval()
Note: passing -rr will cause phpdbg to quit after execution, rather than returning to the console
背景:开php-fpm的9000端口,有时配置出错会出现502,特别转载。
不要总看nginx 的日志文件。
对于开端口这种事情,listen.allowed_clients 里逗号分割不能有空格!
[www]
listen = 10.11.80.49:9000
listen.allowed_clients = 10.11.80.47,10.11.80.48, 10.11.80.49

阅读全文
背景:有可能 fastcgi Connection reset by peer于502共同发生,(参看:https://jackxiang.com/post/4710/ ,http://www.jb51.net/article/50408.htm 写道:很多站长转到nginx+php-fpm后,饱受500,502问题困扰。当nginx收到如上错误码时,可以确定后端php-fpm解析php出了某种问题,比如,执行错误,执行超时。php-fpm.conf的配置文件中有一个参数request_slowlog_timeout。 )。注意nginx的notice日志及php的request_slowlog_timeout日志。
1)nginx:
在nginx的全局配置中增加 : error_log   logs/error.log notice;

nginx记录日志信息分两个级别,第一个级别的取值为如下之一:
“stderr”, “emerg”, “alert”, “crit”, “error”,”warn”, “notice”, “info”, “debug”
这些值是互斥的,也就是说只能取其中之一,如果在配置文件里加了像如下这种两条配置项:
error_log  logs/error.log  notice;
error_log  logs/error.log  info;

2)php的php-fpm.conf增加时间长度限定超过就算超时:
当PHP运行在php-fpm模式下,php.ini配置的max_execute_time是无效的,需要在php-fpm.conf中配置另外一个配置项:request_terminate_timeout;
request_terminate_timeout = 10
request_slowlog_timeout = 0
slowlog = /data/logs/php/slow.log
    当request_slowlog_timeout 设为一个具体秒时request_slowlog_timeout =5,表示如果哪个脚本执行时间大于5秒,会记录这个脚本到慢日志文件中
request_slowlog_timeout =0表示关闭慢日志输出。
摘自:http://blog.csdn.net/zhangxinrun/article/details/17002939

下面是php 5.3以上版本将TCP改成socket方式的配置方法:
修改php-fpm.conf(/usr/local/php/etc/php-fpm.conf)
;listen = 127.0.0.1:9000
listen = /dev/shm/php-cgi.sock
nginx通过unix socket和fastcgi通信,比tcp socket要高效,重负荷下可以考虑。
1、在nginx.conf中修改配置为:
fastcgi_pass unix:/tmp/php-cgi.sock;
#fastcgi_pass 127.0.0.1:9000;
2、在php-fpm.conf中修改配置为:
/tmp/php-cgi.sock
同理,在proxy_pass、upstream server 等处都能使用

言归正传:
Connection reset by peer
这个错误是在nginx的错误日志中发现的,为了更全面的掌握nginx运行的异常,强烈建议在nginx的全局配置中增加
error_log   logs/error.log notice;
这样,就可以记录nginx的详细异常信息。


nginx的错误日志中会出现Connection reset by peer) while reading response header from upstream, client: 1.1.1.1, server: 102.local, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000

后来反复检查,发现这是因为php运行较慢,并超出php-fpm.conf的request_terminate_timeout设置的秒数。

request_terminate_timeout用于设置当某个php脚本运行最长时间,若超出php-fpm进程管理器强行中止当前程序,并关闭fastcgi和nginx的网络连接,然后nginx中就会出现Connection reset by peer的错误了。

也就是说,产生这个错误的原因是:
php 程序的运行时间超出request_terminate_timeout设置的值。
在php-fpm环境下,在php的安装目录的etc/php-fpm.conf中有此值的设置项,可将其设置为0或更大的值。

提示,在php.ini中存在一项max_execution_time,也用于设置php脚本的最长执行时间。但在php-fpm环境下,我发现max_execution_time的设置是无效的,只有request_terminate_timeout产生了作用。

总结:请将request_terminate_timeout设置为较大的值或0,可减少因php脚本执行时行过长导致nginx产生Connection reset by peer错误。

转自:http://zhangxugg-163-com.iteye.com/blog/1310311
背景:最近升级mysql到: 5.6.21,PHP也升级到php-5.6.0,发现博客成乱码了。
解决办法:
my.cnf


备注:
Php升级为5.6.0后注意OPCache生成扩展路径和PHP5.5.32位置不一样,否则会报:
The Zend Engine API version 220131226 which is installed, is newer.
背景:PHP学Java的jar文件一样可以打包,有点意思。
——
简单来说,Phar就是把Java界的jar概念移植到了PHP界。
Phar可以将一组PHP文件进行打包,还可以创建默认执行的stub(或者叫做 bootstrap loader),Phar可以选择是否进行压缩,可选gzip和bzip2格式。
下面举例说明如何创建和使用Phar:
假设我们的项目名称是user,包含三个文件:
user/user.class.php

user/user.func.php

user/test.php

然后我们使用如下PHP程序创建Phar文件:
make_phar.php

执行 php make_phar.php后,可以在当前目录发现一个叫做user.phar的文件。
我们可以直接执行user.phar文件:
php user.phar,这个相当于执行user/test.php
我们还可以引用此文件:
test_phar.php

摘自:
http://xmgu2008.blog.163.com/blog/static/1391223802014225101912694/
参考资料:
https://php.net/manual/en/book.phar.php
背景:php-fpm一般来说是够用,难免不够用,一是怎么样看,二是怎么样判断是否真够用,博主用了一个命令:netstat -anpo | grep "php-cgi" | wc -l 去和自己配置php-fpm.conf作对比,再者是对nginx出现各种错误都出现502揽在自己身上了,于其说nginx是为了安全,还不如说是也给排查问题增加了难度,再就是超时等,nginx有nginx的超时,php有php配置的超时,双方都是一个相互关联的问题,这些都是对于lnmp架构里经常遇到的问题。

统计Nginx日志里有502的行数有一个大体的了解,如下:
cat a.txt
183.60.235.59 - - [31/Jan/2015:00:00:06 +0800] "GET /forum/0/index.html HTTP/1.1" 302
183.60.235.59 - - [31/Jan/2015:00:00:06 +0800] "GET /forum/0/index.html HTTP/1.1" 302
183.60.235.59 - - [31/Jan/2015:00:00:06 +0800] "GET /forum/0/index.html HTTP/1.1" 502
183.60.235.59 - - [31/Jan/2015:00:00:06 +0800] "GET /forum/0/index.html HTTP/1.1" 302
183.60.235.59 - - [31/Jan/2015:00:00:06 +0800] "GET /forum/0/index.html HTTP/1.1" 302
183.60.235.59 - - [31/Jan/2015:00:00:06 +0800] "GET /forum/0/index.html HTTP/1.1" 302

cat a.txt |awk '{print "line:"NR " status:"$9}'|grep 502
line:3 status:502

——————————————————————————————————————————————
Nginx 502的触发条件

  502错误最通常的出现情况就是后端主机当机。在upstream配置里有这么一项配置:proxy_next_upstream,这个配置指定了 nginx在从一个后端主机取数据遇到何种错误时会转到下一个后端主机,里头写上的就是会出现502的所有情况拉,默认是error timeout。error就是当机、断线之类的,timeout就是读取堵塞超时,比较容易理解。我一般是全写上的:

proxy_next_upstream error timeout invalid_header http_500 http_503;  不过现在可能我要去掉http_500这一项了,http_500指定后端返回500错误时会转一个主机,后端的jsp出错的话,本来会打印一堆 stacktrace的错误信息,现在被502取代了。但公司的程序员可不这么认为,他们认定是nginx出现了错误,我实在没空跟他们解释502的原理 了……
阅读全文
背景:当用popen打开多个command时会出现重用变量,二是会用连字符进行连接command返回的变量,两次popen会有两个地方出现问题。
$handle = popen($command, "r");
        do {
            $excuteResult = fread($handle, 2024);
            if (strlen($excuteResult) == 0) {
                pclose($handle); //关闭pipe
                break;
            }
            $excuteResultAll .= $excuteResult;
        } while (true);
//这儿用到的$excuteResultAll 变量,下面还要用,防止污染,则需要给NULL值清空,用unset后需要再定义一次相同的变量,否则会出现:
Undefined variable: excuteResultAll in /data/htdocs/jackxiang.com/index.php on line 354
        do {
            $excuteResult = fread($handle, 2024);
            if (strlen($excuteResult) == 0) {
                pclose($handle); //关闭pipe
                break;
            }
            $excuteResultAll .= $excuteResult;
        } while (true);

______________________________小demon实践如下:______________________________
php null.php
<?php
$foo = "";
$foo = "jack";
unset($foo);
$foo .= "xiang";
$vars = get_defined_vars();

通过unset后,$foo变量用点连接时运行如下:
[22-Sep-2014 14:29:59 Asia/Shanghai] PHP Notice:  Undefined variable: foo in /tmp/null.php on line 6
[foo] => xiang
而不用unset而用NULL后:
<?php
$foo = "";
$foo = "jack";
$foo = NULL;
//unset($foo);
$foo .= "xiang";
$vars = get_defined_vars();
print_r($vars);
解决了这个变量的问题:
[foo] => xiang

说明这样做是可行的,完毕。
iframe跨域传值超过2M的问题解决
使用iframe进行传值时,如果采用URL的方式传递,则最大只能传递大约2k的数据,超过这个长度就会被截断了,那么是否可以采用post的方式传值呢?答案是可以的,我们可以采用js创建一个form表单,并将此form提交到iframe上,这样就能做到打破2k数据的限制。


还需要注意2个问题:

1 tomcat下post不能超过2M的问题
这个需要将tomcat的配置文件server.xml修改一下:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" maxPostSize="0"/>
maxPostSize为0时,表示不用限制长度。

2 跨域的问题
跨域不影响iframe的post传值,发送方的tomcat无需更改,只是需要将接收方的tomcat的maxPostSize修改为0即可。

来自:http://housen1987.iteye.com/blog/1695065
/*
Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of getimagesize(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. ind:\vhost\include\inc_custom_fields.php on line178
*/

我把php.ini的display_errors = on改成display_errors = off // (不显示错误)
就不显示了。

虽然没有什么影响。但是心里还是有个疙瘩。。。
百度上没有找到什么答案,然后在google上 找到了。

修改php.ini就可以了。

1. 在PHP.ini中搜索关键字 : allow_call_time_pass_reference 没有的自行建立。
2. 将 Off 改成 On ,Web Server重起就OK了~
allow_call_time_pass_reference = Off 变成 allow_call_time_pass_reference = On


ps

文档注解为:

是否启用在函数调用时强制参数被按照引用传递。此方法已不被赞成并在 PHP/Zend 未来的版本中很可能不再支持。鼓励使用的方法是在函数定义中指定哪些参数应该用引用传递。鼓励大家尝试关闭此选项并确保脚本能够正常运行,以确保该脚本也能在未来的版本中运行(每次使用此特性都会收到一条警告,参数会被按值传递而不是按照引用传递)。

在函数调用时通过引用传递参数是不推荐的,因为它影响到了代码的整洁。如果函数的参数没有声明作为引用传递,函数可以通过未写入文档的方法修改其参数。要避免其副作用,最好仅在函数声明时指定那个参数需要通过引用传递。


可以在函数里修改外面变量的值:


这样写就有前面描述的一系列问题:


说白了就是不能传一个地址给一个定义的函数参数里不是地址,这会有问题。
这块特别是在foreach这块的php实现上可能有一点缺陷也好,总之,想抛弃c的&取地址符号是php简单的根源。

执行结果如下:
---------- 调试PHP ----------
Deprecated: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of test1().  If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file in D:\wamp\www\array_walk.php on line 11

PHP Deprecated:  Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of test1().  If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file in D:\wamp\www\array_walk.php on line 11
输出完成 (耗时 0 秒) - 正常终止



像pdo的foreach陷阱和这有关,究其原因, 也就是bindParam和bindValue的不同之处, bindParam要求第二个参数是一个引用变量(reference),引用这种东东在PHP里出现其实怎么说好呢,有它有好处,用不好大大的坏,陷阱的根源,像c不是c的PHP的问题是PHP发展的争议根源,如果多都用c里的特性,那PHP完全可以成为一个类java的常驻内存server,乃至内存实现上也可有进步,但会编写复杂,掌握难度加大:
http://weibo.com/1170999921/ylgFcpe1f
http://www.laruence.com/2012/10/16/2831.html
https://jackxiang.com/post/7425/
背景:时下都流行enum类型的使用tinyint,那enum就真没有用的价值了么?
PHP低级编程的兄弟是这样来看这个问题的,我作下笔录如下,期望能客观的理解这个enum字段的优点及缺点:
膘哥观点:
    enum有优点。但个人觉得。。。缺点更多,客观的讲:优点主要是在建数据 库的时候就可以把一些值给规范好。缺点是。。enum不适合PHP。主要是PHP是弱类型,如:你insert into ..... set a= 1,你没法知道你是想 a= '1' 还是 a= 1(a='1'是插入值1,a=1是插入enum的第一个值,尤其php弱类型的,如果int的,很少有人在sql里加双引号。),这是PHP和mysql 在使用enum 最大的问题。所以。。安心点啦。干脆点直接tinyint。

单曲观点:
    我觉得没什么优点,对数字型的enum,简直就是梦魇,boolean  tinyint(1) 0,1 status  tinyint(1)  1,2,3,4,5,6..tinyint欢淫你~~。如:audit_result enum(1,2,3),set audit_result = 1;...容易出现膘哥所说的混淆。

简单观点:
   少用,一般都是用tinyint替代。

天枫观点:
   我觉得除了状态直观  没什么优点,我一般直接int,tinyint([1or2or3]) 到底有啥区别?(后面会简单探讨下,这里面的1or2or3区别。)

中庸观点:
   a=1是插入enum的第一个值,尤其php弱类型的,如果int的,很少有人在sql里加双引号,基本上是不加引号的。

竖琴螺观点:
   六种情况就:tinyint(1)  -1,-2,1,2,3,4

上面各种观点重点集中在PHP这种弱类型语言对引号不重视,
程序员不写容易引起插入的语句不是自己想要的结果的问题,
容易出现int时没有用引号导致插入了新值而不是定的那个值:


结论:要插入enum的值,字段必须加引号,不加引号当然是数字,数字就是key,不是value。
规劝:
1)enum是整型这样的错误很容易发生,尤其是php弱类型的,一般新来一个人,没注意enum类型,就会犯错。
2)数据库说明清楚的话,或者可选择的全是字符串的话,还没什么,但是里面有数字,难免有新手犯错,养成加引号的习惯很重要。
最终结论:
历史原因,要把enum改成tinyint程序改动太大了,用了的没必要改·~,以后新建的时候,尽量使用tinyint就好。
这种字段的重复内容过多的,索引建不建,关系不大,这种在mysql叫索引的势太低,其查询效果不太好:(英文是这么翻译的:https://jackxiang.com/post/1405/)。
————————————————————————————————————————————————————————————————————
tinyint(1)和tinyint(4)一样的,都是-127到128或者0到256。unsigned属性全是正,和c语言unsigned int有点类似:
tinyint(1)   -128 ~ 127
tinyint(1) unsigned  0 ~ 255

为何表示的最大正数比最小负数的绝对值少1呢?
第一位是符号位,1表示负数
所以负数可以到128,正数只能到127
-128正127
如:0111 1111  正数  ,负数 1111 1111
提问:
Mysql里int(1)和int(11)差别很大的,mysql的int,有个属性 ,UNSIGNED ZEROFILL  后面的ZEROFILL,就是有定义的位数不够则用零补齐对齐一下(这儿可能涉及到索引的性能罢):int,  长度(M)=5, 属性=UNSIGNED ZEROFILL(无符号,用0来填充位数),00001,00002。
但这个tinyint呢,tinyint(1)和tinyint(4)一样的?
看这文章后:http://blog.csdn.net/lysygyy/article/details/5983433
我估计:mysql这块对一个字节不像int这种四个字节要进行对其前部分进行部分字节索引,如果说tinyint(1)和tinyint(4)是一样的表示范围情况下,但mysql对tinyint数字长度位数作了可设置的限定,从理论上说其存在硬盘里的字节是不一样才是合乎逻辑的,这块估计还是为了对字节进行对齐方便索引等,以提升效率为主罢,l如:ike keyword%    索引有效,如果统一对齐,索引效果会不会更好呢?我也只是猜测。
————————————————————————————————————————————————————————————————————
在网上找了下这个enum的mysql的大体实现如下:
一)enum的存储原理我仔细查看了下手册。是这样的:
在建立这个字段时,我们会给他规定一个范围比如enum('a','b','c'),这时mysql内部会建立一张hash结构的map表,类似:0000 -> a,0001 -> b,0002 -> c。
当我插入一条数据,此字段的值位a或b或c时,他存储在里面的不是这个字符,而是对应他的索引,也就是那个0000或0001或0002。
同样,enum在mysql手册上的说明:
ENUM('value1','value2',...)
1或2个字节,取决于枚举值的个数(最多65,535个值)
除非enum的个数超过了一定数量,否则他所占的存储空间也总是1字节。


二)tinyint:
类型  字节  最小值  最大值
      (带符号的/无符号的)  (带符号的/无符号的)
TINYINT  1  -128  127
他的最小存储所占空间也是1字节。


最后,Enum,既然要用它,就不必要使用什么0,1,2来代替实际的字符串了。甚至中文字符串。他并不会对数据库性能进行多余开销。因为对于它来说,你使用'0','1','2'和'张三','李四','王五'数据表所占的存储空间一样。但是考虑到我们实际应用时数据需要从db服务器回传到web app,所以在网络传输时,当然还是尽可能的传输小数据比较好。所以如果很在意这些,还是不用它好了。


mysql中关于bit,enum,tinyint三种数据类型的差别 :
http://blog.csdn.net/shadowsniper/article/details/7071004

慎用mysql的enum字段:
http://www.neatstudio.com/show-1498-1.shtml
背景:最近vps上安了PHP Version 5.4.30,没有加速器...性能不高,加上vps硬件不行,还得加上一个ea啥的,apc,有一个lpcache.so不错,安上。

PHP5.5开始内置了Zend OPcache的缓存系统,这个系统在5.2-5.4下也是可以使用的。经过测试,在php5.4下的加速性能明显,效果比5.2+ea还要好,在此推荐安装。
CentOS6中yum源中已经有git的版本了,可以直接使用yum源进行安装
yum -y install git
编译步骤:
git clone git://github.com/zend-dev/ZendOptimizerPlus.git
cd ZendOptimizerPlus
$PHP_DIR/bin/phpize
./configure \
  --with-php-config=$PHP_DIR/bin/php-config
make && make install

./configure --with-php-config=/usr/local/php/bin/php-config

配置步骤:

在 php.ini 内增加

zend_extension=/...full path.../opcache.so

下面这段是官方推荐的配置参数,可以更加提升性能,建议使用:

opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1

另:PHP5.5下只需要编译时增加 --enable-opcache 参数即可:


静态编译配置不配置无所谓了?
PHP是这样的:
[root@jackxiang ~]# php -v
PHP 5.5.15 (cli) (built: Aug 10 2014 15:18:31)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
但好像用那个下载的php统计好像说是没有发现这个opcache,奇了怪了,呵。
ocp.php?FILES=1&GROUP=2&SORT=3
出现:Opcache not detected?
原因:
配置好这个opcache后没有重启php-fpm,所以,重启动好了。
[root@jackxiang ~]# php -m|grep OP
Zend OPcache
Zend OPcache
————————————————————————————————————————

出现:You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
如果想看到底命中多少百分比的opcache,有个php可以运行下:
https://gist.github.com/ck-on/4959032/download#

configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
说需要安装re2c
执行以下命令
wget http://sourceforge.net/projects/re2c/files/re2c/0.13.5/re2c-0.13.5.tar.gz/download
tar -zxvf re2c-0.13.5.tar.gz
cd re2c-0.13.5
./configure && make && make install


推荐使用:Zend OPcache 控制面板:
https://gist.github.com/ck-on/4959032

来自:http://chen.so/post/71/
http://www.laogui.com/Zend-Opcache
新一代 PHP 加速插件 Zend Opcache:
http://www.laogui.com/Zend-Opcache
最后,
效果还是有的,这个数值表现出的效果是相当的明显:
Cache hits   15338969
Cache misses   294
————————————————————————————
op于ea的性能对比:http://dafengzi.com/?p=4


是否可以一起安,更牛x呀,哈哈:Add Time:2014-08-20
————————————PHP高级研究群———————————————
PHP里的Zend的OPcache 和 eaccelerator 同时使用是不是效果更好?
上午 10:49:58
啥也不会
14/8/20 星期三 上午 10:49:58
会冲突
七夜
14/8/20 星期三 上午 10:51:58
直接opcache就行

————————————低级PHP码农———————————————
PHP里的Zend的OPcache 和 eaccelerator 同时使用是不是效果更好?
【活跃】[沪部]-莫莫
14/8/20 星期三 上午 10:40:19
胡扯的吧
【活跃】[沪部]-莫莫
14/8/20 星期三 上午 10:40:28
opcache  选一个吧
【活跃】[沪部]-莫莫
14/8/20 星期三 上午 10:40:33
选opcache 吧
上午 10:40:50
【活跃】[沪部]-莫莫
14/8/20 星期三 上午 10:40:50
两个功能重叠了 你觉得好吗?【


听说高版本的PHP连Memcache都自带了,莫莫给了一文章:
http://blog.csdn.net/zqtsx/article/details/23942605
摘录片段:
安装MEMCACHE,和OPCACHE扩展
(因为php5.5X+版本已经内置了memcache和opcache扩展,所以不必另行下载,即可采用以下方式进行编译)
1.memcache
如果需要为php增加memcache扩展,按如下方法进行:
cd /usr/local/php/bin
./pecl install memcache

安装时会提示是否开启session支持,根据需要输入no 或者 yes,安装后路径如下:
/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/memcache.so

需要手动配置到php.ini中,增加如下内容,即表示启用memcache扩展:
extension=memcache.so
保存后,重启Apache,或PHP-FPM。


/usr/local/php/bin/pecl install memcache
Installing shared extensions:     /tmp/pear/temp/pear-build-root9N8MRR/install-memcache-2.2.7/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/
一阵编译......
Build process completed successfully
Installing '/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/memcache.so'
install ok: channel://pecl.php.net/memcache-2.2.7
configuration option "php_ini" is not set to php.ini location
You should add "extension=memcache.so" to php.ini

service php-fpm restart

看样子,这个pecl是想做一个类linux的yum 或apt-get啊。
从InnoDB引擎转换成MyISAM引擎,看完本文,你应该懂得如何操作以把MyISAM引擎转换成InnoDB引擎了(请确保InnoDB开启,MySQL命令行下SHOW ENGINES命令查看)。

mysql> ALTER TABLE  boblog_history   ENGINE=InnoDB;
Query OK, 2808 rows affected (0.76 sec)
Records: 2808  Duplicates: 0  Warnings: 0

ALTER TABLE  boblog_blogs     ENGINE=InnoDB;
ALTER TABLE  boblog_calendar  ENGINE=InnoDB;
ALTER TABLE  boblog_categoriesENGINE=InnoDB;
ALTER TABLE  boblog_counter   ENGINE=InnoDB;
ALTER TABLE  boblog_forbidden ENGINE=InnoDB;
ALTER TABLE  boblog_history   ENGINE=InnoDB;
ALTER TABLE  boblog_linkgroup ENGINE=InnoDB;
ALTER TABLE  boblog_links     ENGINE=InnoDB;
ALTER TABLE  boblog_maxrec    ENGINE=InnoDB;
ALTER TABLE  boblog_messages  ENGINE=InnoDB;
ALTER TABLE  boblog_mods      ENGINE=InnoDB;
ALTER TABLE  boblog_pages     ENGINE=InnoDB;
ALTER TABLE  boblog_plugins   ENGINE=InnoDB;
ALTER TABLE  boblog_replies   ENGINE=InnoDB;
ALTER TABLE  boblog_tags      ENGINE=InnoDB;
ALTER TABLE  boblog_upload    ENGINE=InnoDB;
ALTER TABLE  boblog_user      ENGINE=InnoDB;

来自:http://www.samhere.net/mysql_innodb_to_myisam.html
当访问 https 时,跳 http:



来自:http://www.nowamagic.net/librarys/veda/detail/287
https://github.com/netputer/netputweets/commit/009286e9f4b8bdbe0b7fb2e3c4824265d43b877b
PHP Fatal error:  Call to undefined function session_is_registered() in
Fatal error: Call to undefined function session_register() in

听说是有安全问题,容易被猜中,so,这个函数已经被废弃了。。。
一、检查php.ini里面register_globals=是否设置为on。或者是直接使用session_start();然后用$_session[],取值。
二、将session_register("autonum");变成$_SESSION["autonum"];就可以解决旧版本转换新版本
这个直接用国内的也成,实践OK:
http://tieba.baidu.com/p/3086275811

一、wordpress博客最近变慢之解决(fonts.google.com)

进入wordpress后台管理,选择“外观”,再选择“编辑”。
在右边,选择“模板函数(functions.php)”

注意:多个模板时有一个下拉:
模板
模板函数(functions.php)

然后在左边的编辑框内,查找googleapis.com
然后按如图的方法注释掉这行。
然后再点“更新文件”
好了,就完成了。
需要注意的是,这样操作后,你查看博客文章的源码,还是可以看到fonts.googleapis.com的引用那行。
但是只要退出管理员登录wordpress后,就可以看到,源码里,已经没有这行了。

来自:http://blog.csdn.net/metababy/article/details/28892173

二、Wordpress 只能将修改保存到可写的文件。参见Codex文档以了解更多。

使用wordpress的朋友都知道wordpress博客程序后台有个主题编辑器,是让我们方便的在后台直接编辑修改主题源文件用的,小简觉得这个功能很实用也很方便!
小简用nginx服务器装wordpress的时候,在这个wordpress网站后台主题编辑器的使用上遇到了点问题!可以确定wordpress数据完整搬移!
像以前,小简在wordpress后台使用主题编辑器修改完代码后下面有一个“更新文件”的按钮!我们只要点一下这个按钮,修改的内容就可以保存了。
小简把网站数据搬到服务器后,在wordpress后台主题编辑器里修改了一些源码,改完后想就去点击“更新文件”按钮,却发现更新按钮不见了,在原来那个地方找不到那个按钮了!(如图)
--------------------------------------------------------------------------------
原来显示“更新文件”的那个位置变成了“文档:函数名(下拉框)“查询”按钮,下面还有一行字“只能将修改保存到可写的文件。参见 Codex 文档以了解更多。”
--------------------------------------------------------------------------------
权限
现在小简面临的问题是,wordpress后台主题编辑器里编辑好的代码,无法保存?
出现问题当然要解决了,这个问题其实很简单,涉及到了权限问题,记得小简曾经分享过pureftpd新建FTP账户无法管理文件(没有权限)的解决方法,同样的权限问题!
在之前小简已经分享过lnmp搭建WordPress博客后台不能显示所有主题和无法编辑主题的问题的解决方法,这个算是小简遇到的第二个关于wordpress后台主题编辑器的问题。。。
解决方法很简单,我们ssh使用命令:
查看源代码打印帮助1 chown www:www -R /home/wwwroot/www.jannn.com/
其中/home/wwwroot/www.jannn.com/这个是古月小简博客的目录路径,你需要改成你自己网站的!然后刷新下,后台主题编辑器就可以恢复正常了!
关于目录属主和属组修改代码解析
chown www:www -R /home/wwwroot/www.jannn.com/
命令中第一个www为UID,第二个www为GID, -R递归
UID是拥有者ID(User ID)也就是用户ID
GID就是群组ID(Group ID)
Linux系统中的所有文件/文件夹都有拥有者ID和群组ID,即UID和GID.
一般从一个服务器迁移应用程序到另一个服务器时将需要更改文件/文件夹的所有者.
如果你之前服务器上文件/文件夹所有者为root,如果我们没有更改文件/文件夹的所有者,那么使用ftp账户执行操作(比如写入)就不能正常操作!同样,Wordpress等程序也无法正常上传附件,在wordpress后台主题(插件)编辑器中对源文件做了修改也如法写入保存。
代码中利用chown指令将目录的所有权限指派为www用户及www组

来自:http://www.jannn.com/1356.html
背景:作为swoole项目的顾问,平时工作时间很少看QQ群里如此有系统讲到swoole的热重启实现,特转载。
阅读全文
前面不成立,后面就不运行了,解决这个问题很简单如:

这样就很好的解决这个问题了。
来自:http://www.111cn.net/phper/31/46438.htm

Notice: Undefined offset 的解决方法,
在PHP 5.3.5中出现Undefined offset: 0的解决方法:
http://blog.csdn.net/jallin2001/article/details/6644194

附带:
解决phpmyadmin安装过程中Notice: Undefined offset: 以及Function eregi() is deprecated 的报错信息:
http://jackxiang.com/post/7028/

解决办法:在php.ini里面设置error_reporting = E_ALL & ~E_NOTICE,error_reporting 不能有分号,有分号表示不使用这个设置。如果有多个error_reporting,以最后一个为准。 操作后,问题解决。
; error_reporting
;   Default Value: E_ALL & ~E_NOTICE
;   Development Value: E_ALL | E_STRICT
;   Production Value: E_ALL & ~E_DEPRECATED

;   E_ALL & ~E_NOTICE  (Show all errors, except for notices and coding standards warnings.)
;   E_ALL & ~E_NOTICE | E_STRICT  (Show all errors, except for notices)
;   E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR  (Show only errors)
;   E_ALL | E_STRICT  (Show all errors, warnings and notices including coding standards.)

   这问题很常出现在数组中的,程序是能正确地运行下去,但是在屏幕上总会出现这样的提示:Notice: Undefined offset: ….. 网上普遍是采用抑制其显示的方法,即更改php.ini文件中error_repoting的参数为”EALL & Notice “,这样屏幕就能正常显示了.
问题是解决了,但是总想不透offset:接下去的数字(如 Notice: Undefined offset: 4 ….)是什么意思.还有,句子里的语法明明是正确的,为什么会出现警告.冷静地思考了好几遍并尝试了每种可能
终于找到了答案.offset:接下去的数字是出错的数组下标,一般是超出了数组的取值范围,如定义了数组$A[]有10个元数,如果出现了$A[10]就会出现错误(Notice: Undefined offset: 10 ….),因为数组的下标是从0开始的,所以这个数组的下标就只能是0~9.因此在出现这类问题时,不要急于用抑制显示的方法(更简单的可以在当前文件的最前面加上一句”error_reporting(填offset:接下去的那个数字);,一定要注意你所用的数组下标,仔细思考一下,问题一定会很快得到解决的 !发也有可能是unset数组后再尝试读取其内容,php手册中有:

$array[1] ='www.111cn.net';
echo $array[0] ;
输入结果是
Notice: Undefined offset: 1 in D:wwwrootwraskseo404.php on line 5 下面我们来看解决办法
解决这个问题很简单如

echo isset($array[0])?$array[0]:'数组未定义';
这样就很好的解决这个问题了。
来自:http://www.111cn.net/phper/31/46438.htm

实践如下:

---------- 调试PHP ----------
数组未定义
输出完成 (耗时 4 秒) - 正常终止


来自:http://wenwen.sogou.com/z/q309347664.htm
背景:装了个php,说是现在apc和ea都不行了,这个叫opcache的比较牛x,来处:http://www.laruence.com/2013/11/11/2928.html
一、不同,就是不一样:
不同于APC, O+除了是Opcodes Cache以外, 还做了很多的Opcodes优化, 这个PPT就是主要列举了一下主要的优化们.
也不同于eacc, O+做的优化更多一些.
这个特性, 就使得O+要比APC快不少, 从Benchmark来看(Zend/bench.php), O+能节省5%的CPU IR, 能快7%以上.
另外就是, 随着Opcache进入PHP源代码树, APC我们也就不在做更新了, 主要的精力都迁移到了O+的进一步开发上.
所以, 建议大家都切换O+吧(支持5.2 到最新的5.5). 基本上只需要改一个配置, 你就能得到性能提升, 何乐而不为呢? 是吧.

二、在哪儿才能下载得到呢?
http://pecl.php.net/package/ZendOpcache

三、一个Opcache的推荐配置:
[opcache]
zend_extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/opcache.so
opcache.enable_cli=1
opcache.memory_consumption=128 ;共享内存大小, 这个根据你们的需求可调
opcache.interned_strings_buffer=8 ;interned string的内存大小, 也可调
opcache.max_accelerated_files=4000 ;最大缓存的文件数目
opcache.revalidate_freq=60 ;60s检查一次文件更新
opcache.fast_shutdown=1 ;打开快速关闭, 打开这个在PHP Request Shutdown的时候
// 会收内存的速度会提高
opcache.save_comments=0 ;不保存文件/函数的注释


[Zend Opcache]
zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/opcache.so"
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
;opcache end
背景:买了个vps云主机,安了一个lnmp,发现nginx启动后,其没法访问,通过curl又能访问,但22端口又可以使用,原来是防火墙给挡住了,so,得让防火墙给打开这个80端口可以访问,方法如下。
阅读全文
背景:PHP探针里有一个:服务器实时数据(CPU型号 [4核] ...)  网络使用状况(eth1 :  已接收 : 1.03612 GB  已发送 : 0.20958 GB) 这个是肿实现的?
阅读全文
分页: 6/18 第一页 上页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 下页 最后页 [ 显示模式: 摘要 | 列表 ]