Linux系统中设置多版本PHP共存配合Nginx服务器使用


Posted in PHP onDecember 21, 2015

应用环境

LNMP的环境,当前PHP版本5.3.8,遇到一个应用需求只支持PHP 5.2.x,又希望保持现有应用还是用PHP 5.3.8。也就是说需要两个版本的PHP同时存在,供nginx根据需要调用不同版本。

思路

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

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

配置记录

下面记录简单的配置流程,基于已经安装了lnmp的debian环境。当前版本的PHP是5.3.8,位于/usr/local/php。

1.下载PHP-5.2.14及相关的FPM、autoconf组件:

mkdir ~/php5.2
cd ~/php5.2
wget -c http://museum.php.net/php5/php-5.2.14.tar.gz
wget -c http://php-fpm.org/downloads/php-5.2.14-fpm-0.5.14.diff.gz

2.解压PHP-5.2.14,并打上PHP-FPM的补丁:

tar zxvf php-5.2.14.tar.gz
gzip -cd php-5.2.14-fpm-0.5.14.diff.gz | patch -d php-5.2.14 -p1

3.如果你已经通过lnmp安装,应该已经安装好了autoconf,如果没有,请自行下载并编译autoconf-2.13,然后设置autoconf环境变量:

export PHP_AUTOCONF=/usr/local/autoconf-2.13/bin/autoconf¬
export PHP_AUTOHEADER=/usr/local/autoconf-2.13/bin/autoheader

3.编译安装PHP-5.2.14在新的路径(/usr/local/php-5.2.14)下,注意?prefix、?with-config-file-path的路径,并且打开fastcgi和fpm选项:

cd php-5.2.14/
./buildconf --force
./configure --prefix=/usr/local/php-5.2.14 --with-config-file-path=/usr/local/php-5.2.14/etc --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-fastcgi --enable-fpm
make ZEND_EXTRA_LIBS='-liconv'
make install

4.设置/usr/local/php-5.2.14/etc/php-fpm.conf,监听端口:

<value name="listen_address">127.0.0.1:9001</value>

或者监听文件:

<value name="listen_address">/path/to/unix/socket</value>

其他参数根据服务器环境和需求自行定制。
5.启动php-fpm,以后可以通过php-fpm进行管理:

/usr/local/php-5.2.14/sbin/php-fpm start

字php5.3.3后,php已经将php-fpm继承到php中,而且内置的php-fpm默认不支持(start|stop|reload)的平滑启动参数,需要使用官方源代码中提供的启动脚本来控制:

cp -f (php -5.3.x-source-dir)/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod 755 /etc/init.d/php-fpm
/etc/init.d/php-fpm start

php-fpm支持的操作:

  • start,启动PHP的FastCGI进程。
  • stop,强制终止PHP的FastCGI进程。
  • quit,平滑终止PHP的FastCGI进程。
  • restart, 重启PHP的FastCGI进程。
  • reload, 重新加载PHP的php.ini。
  • logrotate, 重新启用log文件。

5.3.3的php-fpm脚本支持的操作:start|stop|force-quit|restart|reload|status

6.配置好PHP-5.2.14的php.ini,重新加载生效:

vi /usr/local/php-5.2.14/etc/php.ini
/usr/local/php-5.2.14/sbin/php-fpm reload
7.修改nginx配置,对需要的服务配置使用PHP-5.2.14:

location ~ .*.(php|php5)?$
    {
      fastcgi_pass 127.0.0.1:9001;
      fastcgi_index index.php;
      include fcgi.conf;
    }
8.记录一下自己编译php5.5.10使用的配置
./configure --prefix=/usr/local/php-5.5.10 --with-config-file-path=/usr/local/php-5.5.10/etc --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-bz2 --with-curl=/usr/bin --enable-ftp --enable-sockets --disable-ipv6 --with-gd --with-jpeg-dir=/usr/local --with-png-dir=/usr/local --with-freetype-dir=/usr/local --enable-gd-native-ttf --with-iconv-dir=/usr/local --enable-mbstring --enable-calendar --with-gettext --with-libxml-dir=/usr/local --with-zlib --with-pdo-mysql=mysqlnd --enable-dom --enable-xml --enable-fpm --with-libdir=lib64 --with-mcrypt=/usr/bin --enable-zip --enable-soap --enable-mbstring --with-gd --with-openssl --enable-pcntl --with-xmlrpc --enable-opcache
							
PHP 相关文章推荐
PHP+MYSQL的文章管理系统(二)
Oct 09 PHP
PHP用SAX解析XML的实现代码与问题分析
Aug 22 PHP
openPNE常用方法分享
Nov 29 PHP
php比较多维数组中值的大小排序实现代码
Sep 08 PHP
PHP下使用CURL方式POST数据至API接口的代码
Feb 14 PHP
利用浏览器的Javascript控制台调试PHP程序
Jan 08 PHP
PHP COOKIE及时生效的方法介绍
Feb 14 PHP
php生成QRcode实例
Sep 22 PHP
php保存任意网络图片到服务器的方法
Apr 14 PHP
php动态生成缩略图并输出显示的方法
Apr 20 PHP
学习php设计模式 php实现适配器模式
Dec 07 PHP
PHP开发实现快递查询功能详解
Apr 08 PHP
在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程
Dec 21 #PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
Dec 21 #PHP
反射调用private方法实践(php、java)
Dec 21 #PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
Dec 21 #PHP
变量在 PHP7 内部的实现(二)
Dec 21 #PHP
变量在 PHP7 内部的实现(一)
Dec 21 #PHP
php阿拉伯数字转中文人民币大写
Dec 21 #PHP
You might like
一段php加密解密的代码
2006/10/09 PHP
AJAX for PHP简单表数据查询实例
2007/01/02 PHP
CI框架安全类Security.php源码分析
2014/11/04 PHP
php生成唯一的订单函数分享
2015/02/02 PHP
PHP上传图片、删除图片简单实例
2016/11/12 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
JQuery中对Select的option项的添加、删除、取值
2013/08/25 Javascript
JavaScript常用脚本汇总(二)
2015/03/04 Javascript
JS实现具备延时功能的滑动门菜单效果
2015/09/17 Javascript
JS对HTML表格进行增删改操作
2016/08/22 Javascript
微信小程序 摇一摇抽奖简单实例实现代码
2017/01/09 Javascript
gulp加批处理(.bat)实现ng多应用一键自动化构建
2017/02/16 Javascript
js实现PC端根据IP定位当前城市地理位置
2017/02/22 Javascript
vue双向绑定简要分析
2017/03/23 Javascript
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
2019/04/12 Javascript
javascript实现导航栏分页效果
2019/06/27 Javascript
axios实现简单文件上传功能
2019/09/25 Javascript
Vue使用NProgress的操作过程解析
2019/10/10 Javascript
[49:21]2018DOTA2亚洲邀请赛3月30日 小组赛B组 Effect VS iG
2018/03/31 DOTA
Windows系统配置python脚本开机启动的3种方法分享
2015/03/10 Python
基于ID3决策树算法的实现(Python版)
2017/05/31 Python
python多维数组切片方法
2018/04/13 Python
让你的Python代码实现类型提示功能
2019/11/19 Python
tensorflow保持每次训练结果一致的简单实现
2020/02/17 Python
HTML5+css3:3D旋转木马效果相册
2017/01/03 HTML / CSS
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
集团薪酬管理制度
2014/01/13 职场文书
风险评估实施方案
2014/03/09 职场文书
出纳会计岗位职责
2014/03/12 职场文书
二年级班级文化建设方案
2014/05/10 职场文书
机关作风整顿个人整改措施2014
2014/09/17 职场文书
水利局群众路线专题民主生活会发言材料
2014/09/21 职场文书
年度考核个人总结
2015/03/06 职场文书
利用Nginx代理如何解决前端跨域问题详析
2021/04/02 Servers
uniapp开发小程序的经验总结
2021/04/08 Javascript
Golang 实现超大文件读取的两种方法
2021/04/27 Golang