在CentOS上为Apache配置多个PHP版本

16
我该如何在Centos 6.5上同时运行多个php版本?
以下是具体步骤。
要求: Centos 6.5(可能适用于6.6和7) Apache Apache/2.2.15(其他版本也可能适用)
本指南安装并使用: FASTCGI(有替代安装方法,请参考评论) PHPFARM
这样安装是为了兼容iredmail。 您可以在此设置的服务器上安装iredmail。
步骤1: 安装PHPFarm。
yum install gcc libxml2-devel openssl-devel bzip2-devel curl-devel libjpeg-devel     freetype-devel icu libicu-devel gcc-c++ postgresql-devel aspell-devel git -y

$ cd /opt/
$ git clone https://github.com/cweiske/phpfarm.git phpfarm
$ cd phpfarm/src/
$ cd /opt/phpfarm/src/

对于每个要运行此程序的php版本,您都需要这样做。但是,如果您想要自定义模块(例如mysql支持),请跳过此部分并查看其下方的部分。

$ ./compile.sh 5.3.1
$ ./compile.sh 5.3.3
$ ./compile.sh 5.5.11

如果您遇到编译错误,请重新启动并再次尝试/compile.sh 5.3.1。 当我遇到这个问题时,这对我有用。
MYSQL和模块支持 为了在自定义phpfarm安装的php版本5.5.14中获得MySQL支持(以及其他模块),请按照以下步骤操作。这些说明适用于任何版本,只需将5.5.14重命名为任何版本,如5.4.3。当然,您需要一个mysql服务器来连接并使用php中的mysql模块。
这些步骤需要按照以下顺序完成
步骤1A 确保您拥有这些路径,并且日期时间是正确的。我是以root身份执行此操作的。您应该拥有要使用的date.timezone。
cd /opt/phpfarm/src
vi custom-php.ini

date.timezone=America/Halifax
include_path=".:/opt/phpfarm/inst/php-$version/pear/php/"

步骤 1B
确保您拥有这些路径,并且日期时间是正确的。

cd /opt/phpfarm/src
vi default-custom-php.ini

date.timezone=America/Halifax
include_path=".:/opt/phpfarm/inst/php-$version/pear/php/"

步骤1C
特别注意此行

--with-config-file-path=/opt/phpfarm/inst/php-5.5.11/lib/ \

需要根据您所使用的版本进行调整。以 root 用户身份运行。

vi custom-options-5.5.14.sh

#!/bin/bash

#gcov='--enable-gcov'
configoptions="
--disable-debug \
--with-config-file-path=/opt/phpfarm/inst/php-5.5.11/lib/ \
--enable-short-tags \
--with-pear \
--enable-bcmath \
--enable-calendar \
--enable-exif \
--enable-ftp \
--enable-mbstring \
--enable-pcntl \
--enable-soap \
--enable-sockets \
--enable-wddx \
--enable-zip \
--with-zlib \
--with-gettext \
--enable-pdo \
--with-pdo-mysql \
--enable-cgi \
--enable-json \
--with-curl \
--with-openssl \
--enable-openssl \
--with-mysql \
--enable-mysql \
$gcov"

第1D步
现在以root身份编译。当您编译5.5.14或任何其他版本时,phpfarm将自动查找名为custom-options-5.5.14.sh的文件,当然还有相应的版本号。

./compile.sh 5.5.14

稍后,当您使用phpinfo();函数检查您的网页时,您将看到对这些模块的支持以及页面上不同的“配置命令”文本。


如果这些步骤没有按顺序完成,则可能需要再次执行。要再次执行此操作,请先从src文件夹和inst文件夹中删除文件。

rm -rf /opt/phpfarm/inst/php-5.5.14

rm -rf /opt/phpfarm/src/php-5.5.14

rm命令将删除文件夹,-rf代表r递归和f强制。 参考:http://linuxcommand.org/lc3_man_pages/rm1.html


如果出现错误,请查阅此网站。还有其他网站,但我发现这个很有用。

http://crybit.com/20-common-php-compilation-errors-and-fix-unix/


mysql和模块支持的参考资料

使用PHP Farm激活PHP扩展的问题


步骤2
将phpfarm添加到您的配置文件中

将此内容添加到root和非root用户的.bashrc文件底部。.bashrc文件可以在用户的根目录中找到或cd ~/,然后ls -all即可看到它。

PATH="$PATH:/opt/phpfarm/inst/bin:/opt/phpfarm/inst/current-bin"

在将其添加到root和非root用户的.bashrc文件后,请在终端中执行此操作。

export PATH="$PATH:/opt/phpfarm/inst/bin:/opt/phpfarm/inst/current-bin"

现在退出终端并重新登录。尝试运行此命令。
switch-phpfarm 5.5.11

您应该能够在不同的PHP版本之间来回切换。

[root@test joe]# switch-phpfarm 5.5.11
Setting active PHP version to 5.5.11
PHP 5.5.11 (cli) (built: May 17 2014 22:01:31) (DEBUG)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
[root@test joe]#

为CentOS/RHEL 6, 64位(x86_64)添加仓库:

cd /tmp
rpm -Uvh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

步骤三
安装YUM

yum install php php-cli mod_fastcgi
注意:此时如果您尝试运行 switch-phpfarm 5.5.11,它可能无法正常工作,但这没关系。我们仍然可以运行具有不同 PHP 版本的多个网站。 第四步
确保已创建 cgi-bin 并配置文件。
$ cd  /var/www

如果cgi-bin目录不存在,请先创建它。

$ mkdir cgi-bin

对于您打算使用的每个 PHP 版本,请制作一个这样的文件。将结尾替换为版本号。

vi /var/www/cgi-bin/php.fastcgi.5.5.11

步骤五
在文件 php.fastcgi.5.5.11 中进行操作。

#!/bin/bash
PHPRC="/opt/phpfarm/src/php-5.5.11/php.ini-development"
PHP_FCGI_CHILDREN=4
PHP_FCGI_MAX_REQUESTS=1000
export PHPRC
export PHP_FCGI_CHILDREN
export PHP_FCGI_MAX_REQUESTS
exec /opt/phpfarm/inst/bin/php-cgi-5.5.11

第一行

PHPRC="/opt/phpfarm/src/php-5.5.11/php.ini-development"

告诉你要使用哪个php.ini文件,这在Ubuntu中是不同的。最后一行。
exec /opt/phpfarm/inst/bin/php-cgi-5.5.11

每个特定版本都需要更改的内容也需要更改。我不确定它是做什么的,但我知道它需要被更改。

步骤6
使fastcgi文件对apache:apache用户和组可执行

示例1

[root@test joe]# chown apache:apache /var/www/cgi-bin/php.fastcgi.5.5.11
[root@test joe]# chmod +x /var/www/cgi-bin/php.fastcgi.5.5.11

示例 2

[root@test joe]# chown apache:apache /var/www/cgi-bin/php.fastcgi.5.3.3
[root@test joe]# chmod +x /var/www/cgi-bin/php.fastcgi.5.3.3

例子三

[root@test joe]# chown apache:apache /var/www/cgi-bin/php.fastcgi.5.3.1
[root@test joe]# chmod +x /var/www/cgi-bin/php.fastcgi.5.3.1

第七步
编辑httpd.conf文件
以下是/etc/httpd/conf/httpd.conf文件所需内容。 首先找到“NameVirtualHost *:80”,将其用作起点。“#”表示该行已被注释。通过删除#来取消注释此行。现在它应该看起来像这样。

NameVirtualHost *:80

这将允许多个虚拟主机通过每个虚拟主机引用中的"ServerName"在Apache上运行。我留下了一些注释行,以向您展示可以不进行哪些操作。请确保/etc/httpd/conf/httpd.conf的底部如下所示。
<VirtualHost *:80>
    ServerName test1.com
   #ServerAdmin admin@tecadmin.net
    DocumentRoot /var/www/html/test1
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
    <Directory "/var/www/html/test1">
            Options +Indexes FollowSymLinks +ExecCGI
            AddHandler php5-fastcgi .php
            Action php5-fastcgi /cgi-bin/php.fastcgi.5.5.11
            AllowOverride All
            Order allow,deny
            Allow from All
    </Directory>
</VirtualHost>
<VirtualHost *:80>
    ServerName test2.com
#   ServerAdmin admin@tecadmin.net
    DocumentRoot /var/www/html/test2
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
    <Directory "/var/www/html/test2">
            Options +Indexes FollowSymLinks +ExecCGI
            AddHandler php5-fastcgi .php
            Action php5-fastcgi /cgi-bin/php.fastcgi.5.3.3
            AllowOverride All
            Order allow,deny
            Allow from All
    </Directory>
</VirtualHost>
<VirtualHost *:80>
    ServerName test3.org
#   ServerAdmin admin@tecadmin.net
    DocumentRoot /var/www/html/test3
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
    <Directory "/var/www/html/test3">
            Options +Indexes FollowSymLinks +ExecCGI
            AddHandler php5-fastcgi .php
            Action php5-fastcgi /cgi-bin/php.fastcgi.5.3.1
            AllowOverride All
            Order allow,deny
            Allow from All
    </Directory>
</VirtualHost>
<VirtualHost *:80>
    ServerName test4.net
#   ServerAdmin admin@tecadmin.net
    DocumentRoot /var/www/html/test6
</VirtualHost>
第八步
编辑etc/hosts文件
以下内容是你需要在etc/hosts文件中加入的。
127.0.0.1   localhost test1.com test2.com test3.org test4.net
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
第九步

现在重新启动你的服务器。

service httpd restart
第10步
测试
如果您在每个index.php网站中添加phpinfo(),您会发现所有的php版本都不同。此外,最后一个test4.net将使用centos的默认版本。还要注意,test3.org和test4.net不是.com的域名,但仍然可以正常工作。将来我计划制作一个关于phpfarm文件的指南,以便您可以安装带有mysql支持的版本。这也是我遇到的另一个问题。如果您在这方面遇到错误或难度,请留言,我会尽快解决。

我现在运行的是switch-phpfarm 5.5.11,但它仍然显示php 5.3.3。有什么建议吗? - Jeremy
1
我将 yum install php php-cli mod_fastcgi 更改为 yum install mod_fastcgi,现在没有任何问题。我仍然可以使用 switch-phpfarm,这也允许我设置默认的 PHP 版本,同时只需要专门安装其他版本。在安装之前,我使用了特殊的配置来编译我的 PHP 安装程序。目前为止一切都很好,如果有任何问题,我会告诉你。我正在配置一个新的服务器,这应该是对这个设置的一个很好的测试。 - Jeremy
那很酷。我有一些关于在phpfarm中添加对mysql支持的东西。我希望今晚能够以原始形式准备好它。此外,我需要添加我目前为Apache等工作的所有特定版本号。在某个时候,我需要弄清楚如何在phpfarm中为不同的php添加模块。我猜最后一个会是一个挑战。此外,我应该为Centos 6.6和Centos 7测试这个。 - Harry Fairbanks
我想我最初使用了yum install php,因为我在我的服务器上运行iredmail,它需要来自apache的本地php。如果我有时间找到解决方法,我会的。迫不及待地想阅读您的多个mysql添加。我编辑了这个页面以使其更易于阅读。我更新了要求,现在对于新用户来说应该更容易理解了。 - Harry Fairbanks
2
我投票关闭此问题,因为它不是一个问题。 - Paul Sweatte
显示剩余10条评论
1个回答

1

我有几个通知:

  1. yum install php php-cli mod_fastcgi is not correct. mod_php should not be enabled. also mod_fastcgi can be installed without external repository using mod_fcgid
  2. For PHP 5.2 and libxml>=1.2.9 you have to apply this patch libxml29_compat.patch
  3. to set php version for all host without mod_php enabled add this to httpd.conf

    <Directory "/var/www">
        Options All +ExecCGI
        AddHandler php-cgi .php
        Action php-cgi /cgi-bin/php.fastcgi.5.5.18
    </Directory>
    
  4. when compiling on 64bit systems the compilation fails because of lib64 folder so you should add --with-libdir=lib64 to configoptions

使用yum install php php-cli mod_fastcgi的目的是在不调整任何iredmail配置文件的情况下启用iredmail。如果您没有与iredmail一起使用,您可能需要另一种方法。原始指南是在64位系统上完成的。虽然我不能对php 5.2发表意见,因为我从未自己测试过。 - Harry Fairbanks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接