【问题标题】:"No input file specified" for some versions of PHP某些 PHP 版本的“未指定输入文件”
【发布时间】:2021-05-14 08:07:17
【问题描述】:

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

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

一切其中一些在安装后已经工作了一段时间。昨天我不得不在 PHP 5.6 上测试一个网站,但输出只是一个“没有指定输入文件的消息”,事实证明,它不像 quick google search confirmed 那样具有描述性。

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

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

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

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

这是我认为我知道的:

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

感谢您对如何调试此配置或出现问题的任何想法。

谢谢。

【问题讨论】:

  • 要调试,您可能应该查看从 apache 发送到 php-fpm 端口的 fascgi 协议数据的内容。为此,您可以使用 Wireshark 之类的工具。
  • 我确认 php 5.3 设置 php.ini:doc_roothttpd.conf:document_root WORKS 相同。问题是如果VirtualHost:DocumentRoot 不同,它显然不起作用。如果我有多个具有不同 DocumentRoot 的虚拟主机...

标签: php windows apache fastcgi nssm


【解决方案1】:

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

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

;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

【讨论】:

猜你喜欢
  • 2021-08-11
  • 2014-12-12
  • 1970-01-01
  • 2021-11-18
  • 2015-02-12
  • 2015-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多