某些版本的 PHP 的“未指定输入文件”

Spy*_*yto 7 php windows apache fastcgi nssm

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

  • 端口 9052 上的 PHP 5.2.17
  • 端口 9053 上的 PHP 5.3.29
  • 端口 9054 上的 PHP 5.4.45
  • 端口 9055 上的 PHP 5.5.38
  • 端口 9056 上的 PHP 5.6.40
  • 端口 9070 上的 PHP 7.0.33
  • 端口 9071 上的 PHP 7.1.33
  • 端口 9072 上的 PHP 7.2.31
  • 端口 9073 上的 PHP 7.3.19
  • 端口 9074 上的 PHP 7.4.7

一切在安装后,其中一些已经工作了一段时间。昨天我不得不在 PHP 5.6 上测试一个网站,但输出只是一个“没有指定输入文件的消息”,事实证明,它没有那么多描述性,正如谷歌快速搜索所证实的那样

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

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

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

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

这就是我认为我知道的:

  • 这不是 PHP 5.x 的问题,因为 PHP 5.2 可以工作;
  • 这不是 FastCGI 问题,因为所有 VirtualHosts 都有相同的配置,除了端口号;
  • 这不是 Apache 配置问题,因为它会启动和停止并重新启动和服务;
  • 这不是PHP配置问题,因为所有配置都是标准的;
  • 这不是 .htaccess 配置问题,因为没有 .htaccess 文件;

任何有关如何调试此配置或出现问题的想法表示赞赏。

谢谢你。

Spy*_*yto 4

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

这篇文章和网上的其他地方,我发现了将注释掉的doc_root建议php.ini

;doc_root = 
Run Code Online (Sandbox Code Playgroud)

这是可行的,事实上,这就是我用于所有上述 PHP 7.x安装以及 PHP 5.2 的配置。但是,这不适用于 PHP 5.3 到 5.6

现实情况是,对于这些版本的 PHP,ApacheDocumentRoot和 PHP 的doc_root指令必须完全匹配。

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

我希望这些信息有用。

笔记:

我花了很多时间才解决这个问题。我发现有用的一项技术是将 Apache 日志级别增加到trace8,如下所示

    LogLevel trace8
Run Code Online (Sandbox Code Playgroud)