我在 Google 上得到的大多数结果是如何让两个版本在同一台服务器上但在不同的 URL 上同时运行,但这不是我想要的。
例如,我希望http://localhost
在同一网站上同时运行 PHP4 和 PHP5。这是因为我的网站包含 PHP4 的旧代码,这些代码在 PHP5 中执行时会崩溃。
同一站点还有一些仅用 PHP5 编写的组件,所以我想在同一个站点同时运行两个 PHP 版本。
我在运行 Apache 的 Windows XP 上,如果需要的话,我不介意切换到 IIS7。
我已经意识到与该潜在解决方案相关的安全风险。
答案1
您不能让一个 PHP 脚本同时由 PHP4 运行时和 PHP5 运行时执行。任何时候都只有一个解释器在运行。因此,不能执行“这几行和 PHP4”和“其他行在 PHP5”并在两者之间来回跳转。
但是可以连接两个单独的脚本。创建正常的 PHP 输出脚本并调用任何 PHP4 代码,如下所示:
<?php
// do some PHP5 code here
code_here(...);
// then invoke the script parts for PHP4
passthru("php4-cgi.exe .../script2.php4");
# MAYBE REQUIRES setenv("SCRIPT_FILENAME", ...); ETC. ON WINDOWS
// then do some more PHP5 thingys
...
?>
PHP4 解释器将继承 CGI 环境,因此可以像主脚本本身一样运行。通过清理该环境(使用正则表达式过滤所有变量),它也不必担心安全问题。(但您一开始就没打算更新代码,所以。)