Apache 日志问题上的 PHP-FPM

Apache 日志问题上的 PHP-FPM

我无法找到 php-fpm 进程将其错误输出记录到与脚本结果相同位置的原因。

我有一个 Apache 服务器,它使用以下命令将请求传递给 php-fpm 进程:

ProxyPassMatch [Regex to match] fcgi://127.0.0.1:9000/path/to/php/script.php

我遇到的问题是返回的 html 文档看起来像这样:

<!DOCTYPE html>
<html>
 <head>
  <br />
  <b>Warning</b>: Undefined array key... etc
  <br />
 </head>
 <body>
  Rest of html works as expected
 </body
</html>

php-fpm 遇到的错误消息与 html 输出一起传回 Apache,并显示在我的 Web 浏览器中。

尝试寻找问题的根源

由于错误消息源自 php-fpm,我尝试在 php-fpm conf 文件中寻找原因。

我从二进制文件运行 php-fpm 作为守护进程:

./php-fpm --allow-to-run-as-root

我使用以下命令确认 conf 文件的位置符合我的预期:

./php-fpm -tt

打印多行输出并附加以下内容:

/srv/php/conf/php-fpm.conf test is successful

确认正在使用的conf文件的位置。

我认为与错误日志记录相关的 conf 文件中的行是:

[global]
error_log = log/php-fpm_error.log
log_level = debug

[www]
listen = 127.0.0.1:9000

user = myuser
group = mygroup

access.log = log/$pool_access.log
access.format = [default access string format]

slowlog = log/$pool_slow.log

catch_workers_output = 1
decorate_workers_output = no

php_flag[display_errors] = off
php_admin_value[error_log] = /srv/php/log/$pool_error.log
php_admin_flag[log_errors] = on

我尝试将该行添加daemonize = no[global]选项并启动 fpm。当发出请求时,这只会显示一条event triggered通知,对我的调试工作没有帮助。

有解决办法,但是为什么呢?

当我输入这个问题时,我尝试添加以下行:

php_flag[display_errors] = off

这既可以防止 PHP 错误记录到传递给 Apache 的结果中,也可以开始将错误记录到文件中/srv/php/log/$pool_error.log

默认配置文件指出选项php_flagphp_admin_flag等用于覆盖 php.ini 设置的值。我的问题是,由于我没有 php.ini 文件,我预计不会有任何内容需要覆盖。也许这些值是在我配置 PHP 预构建时设置的?如能提供任何有关解决方案的建议,我将不胜感激。

此外,我在网上找不到任何关于 PHP-FPM 如何将其结果传递给 Apache 的文档。Apache 会监听 stdout 吗?错误是否记录到 stderr,然后定向到指定的日志文件?如果是这样,为什么在我解决问题之前将错误传递到 stdout?

谢谢 !

相关内容