为了账号安全,请及时绑定邮箱和手机立即绑定

linux下多版本php共存的原理及方法

标签:
PHP

服务器当前PHP版本5.4,新项目中使用了Laravel,PHP版本最低要求5.6。希望保持现有应用同时使用PHP5.6.*。也就是说需要两个版本的PHP同时存在,供nginx根据需要调用不同版本。

一、原理:

Nginx是通过PHP-FastCGI与PHP交互的。而PHP-FastCGI运行后会通过文件、或本地端口两种方式进行监听,在Nginx中配置相应的FastCGI监听端口或文件即实现Nginx请求对PHP的解释。

既然PHP-FastCGI是监听端口和文件的,那就可以让不同版本的PHP-FastCGI同时运行,监听不同的端口或文件,Nginx中根据需求配置调用不同的PHP-FastCGI端口或文件,即可实现不同版本PHP共存了。

二、方法:

原理很简单,操作方法其实也很简单。

1.php-fpm监听不同端口,如9000(默认)、9001

2.Nginx配置调用端口,(9000,9001)

第一步,PHP编译安装的话,php-fpm配置文件路径一般是 /PHP_INSTALLED_PATH/etc/php-fpm.conf (php刚编译安装完时配置文件名为php-fpm.default.conf,直接改名为php-fpm.conf即可),当然这个路径是编译时配置的,上面这个路径算是最佳实践吧。

下面这里即是配置监听端口的地方,此处端口9000改为9001,其他配置参考旧版本php-fpm.conf的配置即可。

listen = 127.0.0.1:9000#fpm监听端口,即nginx中php处理的地址,一般默认值即可。可用格式为: 'ip:port', 'port', '/path/to/unix/socket'. 
每个进程池都需要设置.

注意,如果是要安装5.2及以前版本需要打php-fpm补丁,
下载fpm补丁包并执行命令

第二步,修改Nginx vhost.conf配置文件,添加如下部分:

 

 1 server {    
 2     listen       80;     
 3     server_name  a.b.com;        
 4     index index.html index.htm index.php;                    
 5     root /MY_PROJECT_PATH; 6  7     location / {             
 8            try_files $uri $uri/ /index.php?$query_string;         
 9     }         
10     location ~ .*\.(php|php5)?$         {                 
11         #fastcgi_pass  unix:/tmp/php-cgi.sock;                
12         fastcgi_pass  127.0.0.1:9001;                
13         fastcgi_index index.php;                 
14         include fastcgi.conf;        
15     }16 }

上面9001部分即是将所有.php和.php5文件请求都转发到9001端口。

第三步、启动新版php-fpm,重启nginx。

php-fpm支持的操作:

  • start,启动PHP的FastCGI进程。

  • stop,强制终止PHP的FastCGI进程。

  • quit,平滑终止PHP的FastCGI进程。

  • restart, 重启PHP的FastCGI进程。

  • reload, 重新加载PHP的php.ini。

  • logrotate, 重新启用log文件。

常见错误1:php-fpm start启动后通过浏览器访问项目出现502BAD GATEWAY,查看netstat -ano发现并没有监听到9001端口的程序,应该是php-fpm启动出错。

查资料发现可以通过指定配置文件来启动php-fpm,命令如下:

#测试php-fpm配置/usr/local/php/sbin/php-fpm -t/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf -t
#启动php-fpm/usr/local/php/sbin/php-fpm/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf

指定配置文件后启动正常,正确监听9001端口

 

常见错误2:

  1. ERROR: [pool www] cannot get uid for user '@php_fpm@

  2. ERROR: FPM initialization failed  

解决办法是修改php-fpm.conf中user和group部分为系统用户的名字,如root或www(应用这个,root千万别用,权限太大)

 

通过以上三步便实现了Linux上多版本PHP共存,不过这个前提是服务器上已经安装了两个版本的PHP。


原文出处:http://www.cnblogs.com/ningskyer/articles/5639276.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消