![单个 Apache 安装上的多个 php 编译器](https://linux22.com/image/533346/%E5%8D%95%E4%B8%AA%20Apache%20%E5%AE%89%E8%A3%85%E4%B8%8A%E7%9A%84%E5%A4%9A%E4%B8%AA%20php%20%E7%BC%96%E8%AF%91%E5%99%A8.png)
埃洛,
我有一些旧的 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 服务器用户手中移出并返回到文件所有者的上下文中的额外好处。希望这对您有所帮助。