我使用带有 FPM 的 nginx 1.4.1 和 php 5.4.17。
我有一个简单的应用程序运行良好,直到我包含具有以下内容的文件:
class Config {
const HELLO = array('WORLD');
}
当我使用 php-cgi oder php 在命令行上执行该文件时,我的 PHP 没有给我任何错误。但是在线解析器告诉我类中不允许使用带有 const 的数组。但是为什么 nginx 和 php 没有返回这个错误呢?
此应用程序的 php-fpm 池在 unix 套接字上运行,访问任何其他 php 文件或 html 文件都可以正常工作。catch_worker_output=yes 设置和 display_errors 设置为 STDERR 所以 nginx 收到错误,所以我只需要查看 nginx 写入的错误日志文件。我的访问日志给了我 HTTP 状态 200。
但是我仍然得到一个空白页,根本没有输出,nginx 错误日志或 php 错误日志中没有错误,即使我的命令行工具在我测试该 php 文件时也没有给我错误。
我已在我的位置块中将 SCRIPT_FILE 设置为 $document_root&fast_cgi_script,用于服务器块的 .php 文件。
如果我输入一些不存在的函数名称,例如“idonotexist(true);” 然后我在浏览器上收到一个致命错误,告诉我该功能不存在。那么这里的问题是什么?
更新:在我的服务器上在控制台上运行它什么都不返回,所以 php 代码是好的:
php -r "class Config { const HELLO = array('WORLD'); }"
但是在我的其他服务器上运行它,它具有简单的基于 apx apache 的 php-module 我得到了这个:
PHP Fatal error: Arrays are not allowed in class constants in Command line code on line 1
Fatal error: Arrays are not allowed in class constants in Command line code on line 1
所以我的 nginx/php-fpm 配置有问题
UDATE 2:我设法通过将其放入 php.ini 来使命令行版本正常工作
error_reporting = 2147483647
代替
error_reporting = 999999
但仍然通过 nginx/php-fpm 我得到一个空白页。我现在只是创建了一个 test.php,它只有那个 Config 类定义和错误的 const 用法。命令行现在可以打印正确的致命错误,但没有通过 nginx/php-fpm 打印。