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中文本数据翻页(留言本翻页)
Oct 09 PHP
Email+URL的判断和自动转换函数
Oct 09 PHP
支持php4、php5的mysql数据库操作类
Jan 10 PHP
php笔记之常用文件操作
Oct 12 PHP
解析PHP获取当前网址及域名的实现代码
Jun 23 PHP
有关于PHP中常见数据类型的汇总分享
Jan 06 PHP
PHP中的按位与和按位或操作示例
Jan 27 PHP
php实现的短网址算法分享
Jun 20 PHP
PHP中类属性与类静态变量的访问方法示例
Jul 13 PHP
PHP+mysql实现从数据库获取下拉树功能示例
Jan 06 PHP
调试php程序的简单步骤
Oct 04 PHP
详解Go与PHP的语法对比
May 29 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
php关键字仅替换一次的实现函数
2015/10/29 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
客户端限制只能上传jpg格式图片的js代码
2010/12/09 Javascript
解析Jquery的LigerUI如何实现文件上传
2013/07/09 Javascript
在jquery中combobox多选的不兼容问题总结
2013/12/24 Javascript
jQuery实现企业网站横幅焦点图切换功能实例
2015/04/30 Javascript
JavaScript截断字符串的方法
2015/07/15 Javascript
Bootstrap企业网站实战项目4
2016/10/14 Javascript
详解VUE自定义组件中用.sync修饰符与v-model的区别
2018/06/26 Javascript
jquery+ajax实现异步上传文件显示进度条
2020/08/17 jQuery
JavaScript 闭包的使用场景
2020/09/17 Javascript
vue项目查看vue版本及cli版本的实现方式
2020/10/24 Javascript
vue-cli3配置favicon.ico和title的流程
2020/10/27 Javascript
[57:50]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第二局
2016/03/05 DOTA
[02:05]DOTA2完美大师赛趣味视频之看我表演
2017/11/18 DOTA
python基础梳理(一)(推荐)
2019/04/06 Python
Python bytes string相互转换过程解析
2020/03/05 Python
django模型类中,null=True,blank=True用法说明
2020/07/09 Python
Selenium alert 弹窗处理的示例代码
2020/08/06 Python
HTML5实现QQ聊天气泡效果
2017/06/26 HTML / CSS
微信html5页面调用第三方位置导航的示例
2018/03/14 HTML / CSS
毕业生个人求职的自我评价
2013/10/28 职场文书
会计自我鉴定
2013/11/02 职场文书
校园文化建设方案
2014/02/03 职场文书
简洁的英文求职信范文
2014/05/03 职场文书
庆六一文艺汇演活动方案
2014/08/26 职场文书
道歉信范文
2015/05/12 职场文书
负责培养人意见
2015/06/05 职场文书
关于远足的感想
2015/08/10 职场文书
2016优秀教师先进个人事迹材料
2016/02/25 职场文书
2019西餐厅创业计划书范文!
2019/07/12 职场文书
如何用JavaScipt测网速
2021/05/09 Javascript
python ConfigParser库的使用及遇到的坑
2022/02/12 Python
JavaScript实现外溢动态爱心的效果的示例代码
2022/03/21 Javascript
详解Python内置模块Collections
2022/03/22 Python