同时安装多个 PHP 版本


现在 PHP 其中一个很大的问题, 是很多个不同的 PHP 版本都有人使用, 对于开发者需要顾及程式码是否可以在不同版本执行, 而对系统管理员, 就要面对不同程式可能需要不同 PHP 版本。

以下记录一下在系统安装不同 PHP 版本, 并可以按需要设定不同 Virtualhost 或目录, 可以使用不同 PHP 版本的方法, 以下会以 CentOS 7 及 Apache 作为安装环境。

首先在系统用 YUM 安装好 Apache 及 PHP, 可以参考本站另一篇文章: RHEL 及 CentOS 7 安装 Apache, MariaDB, PHP(LAMP)

上面安装的 PHP 是 Redhat 7 默认的 PHP 5.4, 并透过 mod_php 执行。下面会安透过 mod_fcgid 执行不同 PHP 版本, 先安装 mod_fcgid 及其他所需套件:

# yum install gcc libxml2-devel bzip2-devel zlib-devel \
curl-devel libmcrypt-devel libjpeg-devel \
libpng-devel gd-devel mysql-devel mod_fcgid

现在下载及编译 PHP 源始码, 以下会以 PHP 5.6 为例子:

# cd /usr/local/src
# wget http://hk1.php.net/get/php-5.6.29.tar.gz/from/this/mirror
# tar zxvf mirror
# cd php-5.6.29

以下是 PHP 编译选择

执行以下指令编译:

# make
# make install
# mkdir /etc/php56
# cp php.ini-production /etc/php56/php.ini

开启 PHP 5.6 的 php.ini:

# vi /etc/php56/php.ini

在最后的位置加入这行:

建立执行 PHP 5.6 的帐号及群组, 以下用 web1 作为例子:

# groupadd web1
# useradd -s /bin/false -d /var/www/web1 -m -g web1 web1
# chmod 755 /var/www/web1

然后建立储存 html 的位置, 及设定 owner:

# mkdir -p /var/www/web1/html
# chown web1:web1 /var/www/web1/html

在一个 wrapper script 在 /var/www/php-fcgi-scripts

# mkdir -p /var/www/php-fcgi-scripts/web1
# vi /var/www/php-fcgi-scripts/web1/php-fcgi-starter

输入以下内容:

储存盘案后离开编辑器, 现在给 php-fcgi-starter 执行权限:

# chmod 755 /var/www/php-fcgi-scripts/web1/php-fcgi-starter
# chown -R web1:web1 /var/www/php-fcgi-scripts/web1

现在设定 Virtualhost, 开启档案 /etc/httpd/conf/httpd.conf:

# vi /etc/httpd/conf/httpd.conf

在档案最后加上这段:

重新启动 Apache:

# systemctl restart httpd

放一个简单的 PHP 测试程式到 /var/www/web1/html:

# vi /var/www/web1/html/info.php

加入以下内容:

用浏览器查看, 应该看到默认 PHP 5.4 的 phpinfo 页面。将同一个 info.php 放到 /var/www/web1/html/php56/ 目录下, 应该会看到 PHP 5.6 的 phpinfo 页面.

在 VirtualHost 部份如果没有设定 FCGIWrapper, 会以默认的 PHP 5.4 执行, 要安装其他 PHP 版本, 只要重复以下编译的步骤即可。

One Response

  1. Pingback: CentOS 7 安装 LMD 及 ClamAV | Mr.Cpp 02 November 2018
  2. jimmy 23 October 2020

Leave a Reply