我读过这个主题: 运行php4和php5并排
在那里,问题是处理两个不同代的PHP(PHP 4 vs 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-灯服务器不适用,因为在我的情况下,我不能使用不同的端口 – 这是在同一台服务器上的常规网站。
您仍然可以在https://stackoverflow.com/questions/524508/how-can-one-run-multiple-versions-of-php-5-x-on-a-development-lamp-server中使用该答案; 您只需添加一种方法将该stream量redirect到其他端口。 就是这样:
您使用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实例将接受所有stream量到您的服务器上的所有网站。 但是对这个特定域的请求将被透明地转发到另一个实例,而浏览器另一端的用户不知道它。
有一种方法可以在每个目录的基础上实现这一点。 你在网上发现了矛盾的观点,但我已经能够使它工作。
首先,您必须组织您的不同版本的PHP以CGI或fastCGI扩展的方式运行。 在下面的例子中我使用了fastCGI
你将需要设置两个单独的php.ini文件(是的,保持它们在同一个地方是重要的可能是一个痛苦,但另一种方法是只有一个php.ini文件为2个不同版本的PHP&这是要么或充满漏洞)
将这些php.ini文件放在您的PHP代码,模块等目录中,每个版本一个。 这是PHP将去的地方首先,没有PHPRC环境variables。 你不应该设置PHPRCvariables,除非你发现如何使它不同于两个不同的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文件中,上面目录环境中的代码也可以工作
请享用 !
我只是用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>