年前,终于迎来了期待已久的php7正式版,我也在第一时间就给博客用上了。性能确实有了质的飞跃,问题还是有不少的。比如鱼叔的微信插件在php7下面自动回复异常等。
为了继续使用微信插件,我只好将php5.6又开了起来,下面简单分享一下多个版本php共存的方法。
一、编译路径
多个版本php要共存,必须使用不同的安装路径。比如,之前php5.6安装在/usr/local/php,那么我们安装php7的时候,就应该定义到 /usr/local/php7 等不一样的路径。
就如之前php7编译安装分享的那样,把安装目录和配置文件目录都指向新的路径:
CFLAGS= CXXFLAGS= ./configure --prefix=/usr/local/php7 --with-config-file-path=/usr/local/php7/etc \ --with-fpm-user=www --with-fpm-group=www --enable-fpm --enable-opcache \ --disable-fileinfo --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-jpeg-dir \ --with-iconv-dir=/usr/local --with-freetype-dir --with-png-dir --with-zlib --disable-rpath \ --with-libxml-dir=/usr --enable-xml --enable-bcmath --enable-shmop --enable-exif --with-curl \ --enable-sysvsem --enable-inline-optimization --enable-mbregex --enable-inline-optimization \ --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl \ --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-ftp \ --with-gettext --enable-zip --enable-soap --disable-ipv6 --disable-debug
具体安装这里就不多说了,请自行翻看之前的文章==>传送门
二、配置修改
编译安装完php7之后,我们需要将配置文件中涉及的路径都更新为php7的实际路径,具体如下:
①、php-fpm.conf
#编辑 vim /usr/local/php7/etc/php-fpm.conf #找到如下参数: listen = /dev/shm/php-cgi.sock #改为 listen = /dev/shm/php7-cgi.sock #保存退出 :wq
如此一来,php5.6和php7的sock监听文件分别为/dev/shm/php-cgi.sock和/dev/shm/php7-cgi.sock。
②、nginx配置
nginx配置只需要修改php动态解析的sock指向即可:
在站点对应的nginx配置文件中(比如,vhost/zhang.ge.conf )找到:
location ~ [^/]\.php(/|$) { try_files $uri =404; fastcgi_pass unix:/dev/shm/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; }
将其中的
fastcgi_pass unix:/dev/shm/php-cgi.sock; 改为: fastcgi_pass unix:/dev/shm/php7-cgi.sock; #路径改为和该版本php的sock监听路径一致
然后重启nginx就能将此站点环境更新到php7了。
说白了,就是你想让站点用哪个版本就修改为该版本的监听文件路径。当然,也有一些php用的是端口的监听模式,修改原理一致!
如果只是某些特殊的页面需要使用php的其他版本,也只要新增额外的location。假如,网站有一个目录是另外的建站程序,不支持php7,那么我们需要额外设置下即可:
location /wap { try_files $uri =404; fastcgi_pass unix:/dev/shm/php-cgi.sock; #对于/wap这个路径,使用php5.6 fastcgi_index index.php; include fastcgi.conf; }
更多需求,举一反三即可!
三、启动脚本
在第二步,我们修改了php的配置,但是也没启动php。怎么启动很简单,我们先修改下服务脚本:
找到 PHP5.6 的服务脚本 /etc/init.d/php-fpm
#复制一份: cp /etc/init.d/php-fpm /etc/init.d/php7 #编辑修改: vim /etc/init.d/php7 #找到 prefix=/usr/local/php #改为 prefix=/usr/local/php7 #最后保存退出 :wq
现在,我们就可以使用 service php7 start 启动php7了,而之前的php5.6则继续使用 service php-fpm start 启动。
四、其他考虑
上述修改,只是让多个版本的php能够同时run起来,并未考虑多个版本的资源抢占问题。其实,还是有些许文章可以做的。
比如,php-fpm.conf 会对php的进程数量、响应超时等进行优化配置,很多时候我们都是用的单个php环境的最优配置。不过,当我们跑了多个php版本的时候,这些配置就应该折中考虑一下了。
就拿我博客举例,我让php5.6继续存在只是为了微信的一个插件,也就只是博客的小部分功能,其他绝大多数功能还是要用php7的,所以我在配置这个php-fpm的时候,会将php7的线程等资源给多一些,php5.6我就只给了一个主进程和一个子线程了。
好了,以上内容就是php多版本共存分享,充分理解下nginx和php的交互,本文分享可有可无。
2016-3-2:分享一个纯属巧合的事情,早上搜索资料的时候,发现linuxeye.com--linux运维笔记比我更早的发布了php多版本共存教程,而且更是巧合的是,改的方式都基本一致。。。搞得好像是我抄袭的一样o(︶︿︶)o
不过php的安装和配置基本也都是从他的脚本中扒的,好吧,就当我也伪原创了一把。。。
这样确实是好!
php7 里全局关键字只接受简单变量,ereg_replace 没了,preg_replace 也弃用了 /e 这个参数...之前改代码改的头都炸了...多版本并存的话能省很多事...非常感谢分享~
php7还在测试阶段,存在一些问题都很正常的,每个版本都是通过不断的测试才变得完整的
PHP7速度快,支持64位
都是货真价实的干货啊,等我神马时候上VPS了再折腾吧,向蛋疼的人是致敬!
主机商暂时不给部署,说还有很多bug
php5.几的版本很经典 但是php7效率高。。。。
感谢分享
这样确实是好!
高清蓝光3D。4K电影拷贝网站www.hdtv668.com
哈,我用UPUPW集成环境可以多个PHP版本共存的
我最烦代码有什么办法。
很牛逼的运维
学到了
1w签到成功!签到时间:下午4:28:54,每日签到,生活更精彩哦~
曾经用宝塔搞过一个混合,后端用的5.6,前端用的7.0,有一次网站被人爆XML,wp-config文件都被初始化了。后台也不开了,前台文章网页照常访问!哈哈哈~