同时运行两个 PHP 版本 (5.3 和 5.2)

同时运行两个 PHP 版本 (5.3 和 5.2)

我已阅读过此主题:同时运行 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>

相关内容