我已阅读过此主题:同时运行 php4 和 php5
那里的问题在于处理两代不同的 PHP(PHP 4 与 PHP 5),但我需要的是使除一个服务器帐户之外的所有服务器帐户都在 5.3 下工作,并且只有一个域在 5.2 下工作。
我无法通过 Apache 模型做到这一点,并且答案来自https://stackoverflow.com/questions/524508/how-can-one-run-multiple-versions-of-php-5-x-on-a-development-lamp-server不适用,因为就我而言,我不能使用不同的端口——这是同一服务器上的常规网站。
答案1
您仍然可以使用答案https://stackoverflow.com/questions/524508/how-can-one-run-multiple-versions-of-php-5-x-on-a-development-lamp-server;您只需添加一种方法来将该流量重定向到另一个端口。方法如下:
您使用 PHP 5.2 设置一个单独的 apache 实例,并将其设置为监听端口 8080。
在常规 Apache 上,您可以更改该域的 VirtualHost,以便它现在包含 5.2 Apache 的反向代理。示例:
<VirtualHost *:80>
Servername php52.example.com
ProxyPass / http://yourservername.example.com:8080/
ProxyPassReverse / http://yourservername.example.com/
</VirtualHost>
这样,您的原始 Apache 实例将接受服务器上所有网站的所有流量。但对这个特定域的请求将透明地转发到另一个实例,而浏览器另一端的用户对此一无所知。
答案2
有一种方法可以基于每个目录实现这一点。你在网上确实会发现相互矛盾的观点,但我能够让它发挥作用。
首先,您必须组织好不同版本的 PHP,以便将其作为 CGI 或 fastCGI 扩展运行。我在下面的示例中使用了 fastCGI
您需要设置两个单独的 php.ini 文件(是的,在重要的地方保持它们同步可能很麻烦,但另一种方法是为两个不同版本的 PHP 只设置一个 php.ini 文件,这要么是不可能的,要么充满漏洞)
将这些 php.ini 文件放在 PHP 代码、模块等目录中,每个版本一个。如果没有 PHPRC 环境变量,PHP 将首先在这里查找它们。你应该不是设置 PHPRC 变量,除非您发现如何使它对于两个不同的 fastCGI 存根有所不同,否则我无法做到这一点:Apache FcgidInitialEnv 指令只能在全球范围内起作用,而不是基于每个目录,而应该起作用的 FcgidCmdOptions 根本不起作用。
然后,您所要做的就是在 httpd.conf 文件中添加以下代码:
#
# start PHP as FastCGId
#
LoadModule fcgid_module modules/mod_fcgid.so
#
# PHP 7.0 is the default
# PHP 5.2 is the legacy
#
<Files ~ "\.php$>"
AddHandler fcgid-script .php
FcgidWrapper "c:/WebServers/PHP-7.0.5/php-cgi.exe" .php
</Files>
#
# Keep PHP 5.2 for legacy Drupal sites
#
<DirectoryMatch "Puitscarre|Royale$">
<Files ~ "\.php$>"
AddHandler fcgid-script .php
FcgidWrapper "c:/WebServers/PHP-5.2.39/php-cgi.exe" .php
</Files>
</DirectoryMatch>
它在我的环境中完美运行:Windows 7,Apache 2.2。顺便说一句,如果您将上述目录环境中的代码放在需要特定或旧版 PHP 的目录的 .htaccess 文件中,它也会起作用
享受 !
答案3
我只是在这种情况下使用了 cgi
<VirtualHost *:80>
Servername site.example.net
ScriptAlias /php-fastcgi/ /usr/local/php-5.2.17/bin/
AddHandler php-fastcgi .php
AddType application/x-httpd-php .php
Action php-fastcgi /php-fastcgi/php-cgi
...
</VirtualHost>