单个 Apache 安装上的多个 php 编译器

单个 Apache 安装上的多个 php 编译器

埃洛,

我有一些旧的 php 脚本,它们在 php-5.2.x 上运行,而当前服务器使用的是 php-5.3.x。为了解决这个问题,我有两个选择,一个是降级 php-5.3.x,或者同时安装 php-5.2.x 和 php-5.3.x,其中 php-5.2.x 提供 cgi 脚本。我决定选择第二个选项

我已经关注了教程但是,除了执行选择 php-cgi 版本的 shell 脚本外,我可以使它的大部分工作正常。我无法让 apache 执行该脚本。

我如何让 apache 执行

#!/bin/sh
# you can change the PHP version here.
version="5.2.6"
# php.ini file location, */php-5.2.6/lib equals */php-5.2.6/lib/php.ini.
PHPRC=/etc/php/phpfarm/inst/php-${version}/lib/php.ini
export PHPRC

PHP_FCGI_CHILDREN=3
export PHP_FCGI_CHILDREN

PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_MAX_REQUESTS

# which php-cgi binary to execute
exec /etc/php/phpfarm/inst/php-${version}/bin/php-cgi

我的 apache vhost.conf

<VirtualHost *:80>
    ServerName 526.localhost
    DocumentRoot /home/getmizanur/public_html/www
    <Directory "/home/getmizanur/public_html/www">
        AddHandler php-cgi .php
        Action php-cgi /php-fcgi/php-cgi-5.2.6
    </Directory>
</VirtualHost>

有人能告诉我我做错了什么吗?

提前致谢。

解决方案: 如果我执行了 a2dismod php5,则上述配置有效。当激活 a2enmod php5 时,即使告诉 apache 执行 php5.2 shell 脚本,apache 仍会执行 php5.3 而不是 php5.2。为了解决我的问题,我不得不更改我的虚拟主机配置

<VirtualHost *:80>
    ServerName 526.localhost
    DocumentRoot /home/getmizanur/public_html/www

    DirectoryIndex index.php
    <Directory "/home/getmizanur/public_html/www">
        AddHandler php-cgi .php
        Action php-cgi /php-fcgi/php-cgi-5.2.6

        <FilesMatch "\.php">
            SetHandler php-cgi
        </FilesMatch>
    </Directory>
</VirtualHost>

瞧,它开始工作了。

答案1

取决于您的特定要求 - 具体来说,您是否可以将 PHP 作为 CGI 执行,而不是通过 mod_php - suPHP (http://www.suphp.org/Home.html) 可以成为一种非常方便的工具。您可以使用它为各种 CGI 解释器(包括多个版本的 PHP)创建配置文件,并根据文件扩展名、路径上的 .htaccess 文件中设置的环境变量等因素通过给定的解释器执行请求。

我使用它来允许开发人员在其 .htaccess 文件中指定他们想要执行的 PHP 版本,这样我就可以在同一个 Web 服务器基础架构中支持旧版 PHP 4、当前稳定的 5 和新版本的测试,同时还具有将 PHP 执行从 Web 服务器用户手中移出并返回到文件所有者的上下文中的额外好处。希望这对您有所帮助。

相关内容