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 相关文章推荐
我常用的几个类
Oct 09 PHP
PHP脚本的10个技巧(8)
Oct 09 PHP
PHP图片验证码制作实现分享(全)
May 10 PHP
preg_match_all使用心得分享
Jan 31 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
Jul 25 PHP
PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
Jan 09 PHP
PHP保存session到memcache服务器的方法
Jan 19 PHP
PHP中key和current,next的联合运用实例分析
Mar 29 PHP
PHP创建word文档的方法(平台无关)
Mar 29 PHP
php htmlentities()函数的定义和用法
May 13 PHP
PHP中上传文件打印错误错误类型分析
Apr 14 PHP
PHP const定义常量及global定义全局常量实例解析
May 28 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垃圾回收机制简单说明
2010/07/22 PHP
php/js获取客户端mac地址的实现代码
2013/07/08 PHP
PHP使用SOAP调用.net的WebService数据
2013/11/12 PHP
PHP后端银联支付及退款实例代码
2017/06/23 PHP
tp5框架的增删改查操作示例
2019/10/31 PHP
JavaScript中获取未知对象属性的代码
2011/04/27 Javascript
JavaScript实现的购物车效果可以运用在好多地方
2014/05/09 Javascript
如何防止回车(enter)键提交表单
2014/05/11 Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
2014/06/06 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
jquery动态添加文本并获取值的方法
2016/10/12 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
2016/11/23 Javascript
jQuery 选择符详细介绍及整理
2016/12/02 Javascript
jquery实现拖动效果(代码分享)
2017/01/25 Javascript
解决vue2 在mounted函数无法获取prop中的变量问题
2018/11/15 Javascript
JS 自执行函数原理及用法
2019/08/05 Javascript
微信小程序云函数使用mysql数据库过程详解
2019/08/07 Javascript
javascript使用Blob对象实现的下载文件操作示例
2020/04/18 Javascript
Webpack5正式发布,有哪些新特性
2020/10/12 Javascript
python循环监控远程端口的方法
2015/03/14 Python
python分布式环境下的限流器的示例
2017/10/26 Python
Python2与python3中 for 循环语句基础与实例分析
2017/11/20 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
2018/06/19 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
Python XML转Json之XML2Dict的使用方法
2019/01/15 Python
python实发邮件实例详解
2019/11/11 Python
django有外键关系的两张表如何相互查找
2020/02/10 Python
详解HTML5 LocalStorage 本地存储
2016/12/23 HTML / CSS
adidas官方旗舰店:德国运动用品制造商
2017/11/25 全球购物
澳大利亚领先的女帽及配饰公司:Morgan&Taylor
2019/12/01 全球购物
中考标语大全
2014/06/05 职场文书
公安领导班子四风问题个人整改措施思想汇报
2014/10/09 职场文书
会议邀请函
2015/01/30 职场文书
贷款工资证明范本
2015/06/12 职场文书
MySQL中utf8mb4排序规则示例
2021/08/02 MySQL
Java 超详细讲解ThreadLocal类的使用
2022/04/07 Java/Android