php5.5出来很久了,一直没应用,vps上还是5.3,折腾一番尝试一下看5.5效果如何。
查阅了官方的升级说明,从5.3到5.5变化不大,而且vps上主要跑的wordpress,drupal,phpmyadmin等应用,它们的开发理论是是比较规范的,估计问题不大。
原环境,php-fpm, nginx, 其中php安装了apc, memcache两个附加模块。
下载php5.3源码,解压,参考5.3的配置参数,改了下安装目录到/usr/local/php55,编译安装,很顺利。
不过启动php-fpm进程时,还得加 -c参数指定php.ini目录才行,指定该参数重新配置编译了几次,都还是不行。那就带参数也无所谓了。
在一个测试站点上,修改nginx里fast-cgi端口为9005, 新开启一下fpm进程,php-fpm端口设置为9005,(php5.3工作在9000端口)这样不影响php5.3的正常工作。打开phpinfo页面,检查没有发现异常,打开phpMyAdmin,也正常。
编译附加模块apc,但编译失败,google到雪鸟(雪候鸟)的文章,说php5.5里集成了zend O+加速模块,这样就可以不要apc了。
到以前的memcache目录里,重新配置编译安装,正常。
加载,因为是偷懒从php5.3的php.ini里拷来加载模块的两行代码,没有改,在运行php-fpm时报错了,说是模块跟php的api版本不一致,一个是2009xxx版,一个是2012xxx版,以为编译错了。重新下载新版本memcache也一样。
纳闷中,突然意识到php.ini里最后加的加载memcache模块是以绝对路径调用的,这个路径没改,还是加载的php5.3目录下的,这不报错就没天理了。删掉路径,只保留文件名,杀死php-fpm进程,重新开启,正常了。这次安装模块是安装到extension_dir指定的目录下的,这样更简单。
运行wordpress站点,报错了:
syntax error, unexpected end of file
想起php.ini里没有开启short_open_tag, 以前安装5.3时也报了这个错误,一些不规范的插件,不想改它的源码,反正有其它一些php程序也这么干,那就打开short_open_tag好了。
重启php-fpm,运行wp又报错了
Call-time pass-by-reference has been removed
又是一个插件的问题:wp-related-posts,其源码 wp-related-posts/wp-relatedposts.php 里有这样的行 wp_relatedposts_ontags(&$options), 删除调用参数时的&号,即wp_relatedposts_ontags($options) 这就好了。
测试运行没有发现问题。
杀死php5.3的fpm进程。修改php5.5的fpm到9000端口上,并启动。
再测试一番,正常。
修改/etc/rc.local里的php-fpm开机启动命令为5.5版本。
完成。
记录一下,算是这个中秋节做的一点有意义的事情。
原计划一大早睡觉,结果又0:18了——
—- 130923 补 ——————–
原来 opcache并没有自动加载,虽然它会被安装到php扩展的目录下,默认在 {$PREFIX}/lib/php/extensions/no-debug-non-zts-20121212
在php.ini里加入以下两行
[opcache] zend_extension=opcache.so
opcache.so是个zend扩展模块,要用zend_extension=xx加载。
重启php-fpm生效
不知道能不能再不改变原来配置的情况下在安装一个apache php
当然可以,只是在编译过程中要注意不要与原来的冲突。两个apache不能同时监听相同的端口,不要启用旧的、只用新的就可以。