【问题标题】:multiple php on apache centosapache centos上的多个php
【发布时间】:2014-06-13 09:13:45
【问题描述】:

如何在 Centos 6.5 上同时运行多个 php 版本?

方法如下。

要求
Centos 6.5(可能适用于 6.6 和 7)
Apache Apache/2.2.15(可能与其他版本一起使用)

本指南安装和使用
FASTCGI(请参阅 cmets 了解替代安装)
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 和模块支持
为 php 版本 5.5.14 的自定义 phpfarm 安装获取 MySQL 支持(和其他模块)的步骤。这些说明适用于任何版本,只需将 5.5.14 重命名为 5.4.3 即可。您当然需要一个 mysql 服务器来连接以使用 php.ini 中的 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/ \

它需要根据您正在使用的版本进行调整。作为根

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 和模块支持参考

Issue activating a php extension using PHP Farm


第 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

你应该能够在 diff 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

第 3 步
安装百胜

yum install php php-cli mod_fastcgi

注意 此时,如果您尝试运行 switch-phpfarm 5.5.11,它将无法正常工作,但没关系。我们仍然可以使用不同版本的 php 运行多个网站

第 4 步
确保您的 cgi-bin 已创建并已配置文件

$ cd  /var/www

如果 cgi-bin 还没有在这里创建它

$ mkdir cgi-bin

对于您打算使用的每个 php 版本,制作这些文件之一。用版本号替换结尾

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

第 5 步
在 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 步
为 apache:apache 用户和组启用 fastcgi 文件可执行

示例 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

示例 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

第 7 步
编辑 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>

第 8 步
编辑 etc/hosts 文件
这是您在 etc/hosts 文件中需要的内容。

127.0.0.1   localhost test1.com test2.com test3.org test4.net
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

第 9 步

现在重启你的服务器

service httpd restart

第 10 步
测试
如果您将 phpinfo() 添加到每个 index.php 站点,您会注意到所有 php 版本都会有所不同。最后一个 test4.net 也将使用 centos 的默认值。另请注意,test3.org 和 test4.net 不是 .com,但仍然可以使用。将来我计划为 phpfarm 文件制作指南,以便您可以安装 mysql 支持。这是我遇到的另一个问题。如果您发现其中的一些错误或难以使其工作,请发表评论,我会尽快处理。

【问题讨论】:

  • 我正在运行switch-phpfarm 5.5.11,但它仍然显示php 5.3.3。有什么建议吗?
  • 想通了。我已经通过 yum 安装了 php,所以我注意到这是预期的。试图弄清楚如何在没有这个问题的情况下做到这一点
  • 我不知道是什么原因造成的,我想这与主 php 正常通过 Apache 而不是 fastcgi 运行这一事实有关。如果您弄明白了,请告诉我,我会为其他人添加这些详细信息。
  • 我将yum install php php-cli mod_fastcgi 更改为yum install mod_fastcgi,现在我没有问题了。我仍然可以switch-phpfarm,这也允许我设置我的默认 PHP,而只需要专门为其他风格安装。在安装它们之前,我确实使用了一个特殊的配置来编译我的 PHP 安装。到目前为止一切顺利,如果我有任何问题,我会告诉你。我这周要配置一个新服务器,所以这应该是对这个设置的一个很好的测试。
  • 我投票结束这个问题,因为它不是一个问题。

标签: php apache centos fastcgi phpfarm


【解决方案1】:

我的几条通知:

  1. yum install php php-cli mod_fastcgi 不正确。不应启用 mod_php。也可以使用mod_fcgid 在没有外部存储库的情况下安装mod_fastcgi
  2. 对于 PHP 5.2 和 libxml>=1.2.9,您必须应用此补丁 libxml29_compat.patch
  3. 要为所有未启用 mod_php 的主机设置 php 版本,请将其添加到 httpd.conf

    <Directory "/var/www">
        Options All +ExecCGI
        AddHandler php-cgi .php
        Action php-cgi /cgi-bin/php.fastcgi.5.5.18
    </Directory>
    
  4. 在 64 位系统上编译时,由于 lib64 文件夹导致编译失败,因此您应该将 --with-libdir=lib64 添加到 configoptions

【讨论】:

  • yum install php php-cli mod_fastcgi 的目的是在不调整任何 iredmail 配置文件的情况下启用 iredmail。如果您不将其与 iredmail 一起使用,您可能希望以另一种方式进行。原始指南是在 64 位系统上完成的。虽然我不能代表 php 5.2,因为我自己从未测试过
猜你喜欢
  • 2018-10-04
  • 2021-06-10
  • 1970-01-01
  • 2013-03-19
  • 1970-01-01
  • 2017-09-11
  • 2016-01-04
  • 2018-12-20
相关资源
最近更新 更多