"No input file specified" 对于 PHP 的某些版本

"No input file specified" for some versions of PHP

我根据 this guide 安装了多个版本的 PHP,我写的。 基本上,它是一个 ApacheLounge 安装,通过 Windows 10 上的 FastCGI 与 PHP 通信。 这曾经让我在不同的 VirtualHosts 上同时 运行 这些 PHP 版本。 Apache 在这些端口上通过 FastCGI 调用正确的 PHP 版本:

Everything 其中一些在安装后已经工作了一段时间。昨天我不得不在 PHP 5.6 上测试一个网站,但输出只是一条“没有指定输入文件的消息”,结果并没有那么多描述性,如 quick google search confirmed.

所以我开始了系统的方法。 我为每个 PHP 版本创建了一个 VirtualHost,只有一个带有 echo 语句的 index.php 文件。 我测试了所有安装的 PHP 版本,所有 PHP5 版本都不起作用,而 PHP7 版本照常工作。

我删除了所有自定义配置文件。没有变化。

我提供了一个简单的 index.html 文件,它适用于所有 VirtualHosts。关于PHP,没有变化。

我以为是 PHP 5.x 的错误,但在我重新启动电脑后,PHP 5.2 版本开始工作了。 我停止、删除并重新安装了一些通过 NSSM 创建的 Windows 服务,没有任何变化。

这是我认为我知道的:

如有任何关于如何调试此配置或出现问题的想法,我们将不胜感激。

谢谢。

这个答案是关于我在这个问题上发现的,以及它是如何为我工作的。

this post 和网络上的其他地方,我发现建议将 php.ini 中的 doc_root 注释掉:

;doc_root = 

有效,实际上这是我用于所有上述 PHP 7.x 安装的配置,也是 PHP 5.2 .但是,那是 不适用于 PHP 5.3 到 5.6

实际情况是,对于 PHP 的那些版本,Apache 的 DocumentRoot 和 PHP 的 doc_root 指令必须完全匹配。

来到这里并不容易,因为我在网上发现了很多欺骗性或明显错误的信息(主要是由于 PHP 行为在不同版本之间发生了变化):

希望这些信息有用。

注意:

我花了很多时间来解决这个问题。我发现一种有用的技术是将 Apache 日志级别提高到 trace8,如 suggested here:

    LogLevel trace8