虽然关于同时运行 php5 和 php4 有很多答案,但我还没有找到针对我的具体情况的答案。
我设置了一个新的 Ubuntu 12.4 服务器,安装了 apache 2 和 PHP 5.3。我需要运行 php 4.4.9,因为必须使用很久以前编写的旧 CMS 系统,该系统仍在维护,但通过 php5 运行时会遇到错误。
因此 php5 作为 apache 模块运行。
我想运行 php4,但一切都表明必须将其作为 cgi 运行。我见过一些解决方案,人们必须将文件扩展名更改为 .php4 并通过 cgi 处理程序运行它们,但我没有将其作为 php4 或 php5 的选项。文件太多,代码库是共享的。
第一个问题,我也可以安装 php4 作为模块吗?接下来,最好的方法是什么?
第二个问题,我可以让切换到 php4 的处理程序在目录路径上执行此操作,而不仅仅是 *.php4 吗?因此,我可以告诉它一个目录列表,或者使用多个 <Directory> 块,让这些目录中的 php 文件仅作为 php4 运行。
谢谢,- Keith
答案1
php4 和 php5 彼此不兼容。您要么需要使用旧的、不受支持的版本(您必须从源代码构建),要么使用 php5 并更新您的系统。您不能同时运行它们而不会造成损坏。
答案2
您可以将 php4 设置为在完全不同的 Web 服务器(apache 1.3 或 lighthttpd)下运行。只需将该 Web 服务器设置为监听不同的端口(不是端口 80),然后直接使用该端口或在 apache2 中设置一定数量的重写规则以将 php4 请求定向到其他 Web 服务器。
但这需要大量的工作和设置,可能比仅仅使用 CGI 还要多。
答案3
对于第一个问题,即使可能,我也不认为这是明智的做法 — — 虽然可能是,但我不知道有谁尝试过。
对于第二个问题,你确实可以这样做。
但是,您需要告诉 Apache 对包含 PHP4 应用程序的文件夹使用哪个处理程序。
使 php4 作为 cgi 运行的正常方式是:
Add Handler php-script .php4
Action php-script /cgi-bin/php4
但这并不是你想要的,所以我们需要改成这样:
RemoveHandler .php
Add Handler php-script .php
Action php-script /cgi-bin/php4
您可能还需要ExecCGI
向应用程序根文件夹添加一个选项。
我目前无法测试,所以有可能无法正常工作。作为替代方案,您可以进行重写,将所有 .php 文件请求更改为 .php4
请注意,这一切都取决于是否拥有足够的权限在 .htaccess 文件或 apache conf 文件(需要权限才能重新启动 apache 服务器)中进行这些更改。
更新:我越想我的答案,就越觉得它不会起作用。检查 mod_php5 conf 文件后,我发现处理程序实际上是针对 mime 类型设置的,application/x-httpd-php
所以我认为你也必须调整它。
因此也许重写是最好的。
不过还有另一种可能性。如果您有权访问 apache 配置文件,则可以清空/etc/apache/mods-available/php5.conf
内容并将其移动到特定于站点的配置中。然后,您可以将 php4 特定配置放入另一个虚拟主机甚至文件夹中 - 尽管在这种情况下,您可能需要在多个位置(针对 Web 服务器上的每个应用程序根文件夹)包含 php5 配置。
更新2:事实上,问题 1 的答案也是“是”,这实际上是可能的。你可以同时运行使用 suPHP。不过您应该了解以这种方式运行 PHP 可能存在的限制。