"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 版本:
- 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
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 服务,没有任何变化。
这是我认为我知道的:
- 这不是 PHP 5.x 问题,因为 PHP 5.2 有效;
- 这不是 FastCGI 问题,因为所有 VirtualHosts 都具有相同的配置,除了端口号;
- 这不是 Apache 配置问题,因为它启动和停止并重新启动和服务;
- 这不是 PHP 配置问题,因为所有配置都是标准的;
- 这不是 .htaccess 配置问题,因为没有 .htaccess 文件;
如有任何关于如何调试此配置或出现问题的想法,我们将不胜感激。
谢谢。
这个答案是关于我在这个问题上发现的,以及它是如何为我工作的。
在 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 行为在不同版本之间发生了变化):
this (unsolved) bug report with a similar issue has a user comment 建议将 doc_root
注释掉;
this paragraph自相矛盾;
PHP 的文档对于那些特定版本是错误的,对于当前版本是正确的:
在 Description of core php.ini directives 上:
Name Default Changeable
doc_root NULL PHP_INI_SYSTEM
以及 Where a configuration setting may be set:
PHP_INI_SYSTEM Entry can be set in php.ini or httpd.conf
希望这些信息有用。
注意:
我花了很多时间来解决这个问题。我发现一种有用的技术是将 Apache 日志级别提高到 trace8,如 suggested here:
LogLevel trace8
我根据 this guide 安装了多个版本的 PHP,我写的。 基本上,它是一个 ApacheLounge 安装,通过 Windows 10 上的 FastCGI 与 PHP 通信。 这曾经让我在不同的 VirtualHosts 上同时 运行 这些 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
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 服务,没有任何变化。
这是我认为我知道的:
- 这不是 PHP 5.x 问题,因为 PHP 5.2 有效;
- 这不是 FastCGI 问题,因为所有 VirtualHosts 都具有相同的配置,除了端口号;
- 这不是 Apache 配置问题,因为它启动和停止并重新启动和服务;
- 这不是 PHP 配置问题,因为所有配置都是标准的;
- 这不是 .htaccess 配置问题,因为没有 .htaccess 文件;
如有任何关于如何调试此配置或出现问题的想法,我们将不胜感激。
谢谢。
这个答案是关于我在这个问题上发现的,以及它是如何为我工作的。
在 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 行为在不同版本之间发生了变化):
this (unsolved) bug report with a similar issue has a user comment 建议将
doc_root
注释掉;this paragraph自相矛盾;
PHP 的文档对于那些特定版本是错误的,对于当前版本是正确的:
在 Description of core php.ini directives 上:
Name Default Changeable doc_root NULL PHP_INI_SYSTEM
以及 Where a configuration setting may be set:
PHP_INI_SYSTEM Entry can be set in php.ini or httpd.conf
希望这些信息有用。
注意:
我花了很多时间来解决这个问题。我发现一种有用的技术是将 Apache 日志级别提高到 trace8,如 suggested here:
LogLevel trace8