我刚刚调整了我的 CentOS 64 位 VPS 上的 php.ini(/etc/php.ini)来记录 PHP 错误:
cat /etc/php.ini | grep php-errors.log
error_log = /var/log/php-errors.log
我也有log_errors = on
我在 /var/log/ 中创建了日志文件,其 CHMOD 为 644。我还打开了错误报告 E_ALL
cat /etc/php.ini | grep error_reporting
; error_reporting
error_reporting = E_ALL
; Eval the expression with current error_reporting(). Set to true if you want
; error_reporting(0) around the eval().
然后我重启了 httpd 守护进程。当我通过 WordPress 上传器添加文件时,我发现由于权限问题,文件未上传
“cannot-open-file.png” has failed to upload due to an error
Unable to create directory wp-content/uploads/2014/05. Is its parent directory writable by the server?
,但它没有作为错误存储在 php-errors.php 中:
pwd
/var/log
ls -l | grep php
-rw-r--r-- 1 root root 0 May 6 06:21 php-errors.log
我所有其他的日志/var/log/httpd
也都是root:root
这样,所以我假设日志记录会起作用。当我按照建议调整文件的权限时,apache:apache
日志文件中仍然没有错误。即使在 .htaccess 上添加错误日志记录也无济于事。
我还使用 检查了 PHP.ini phpinfo()
。唯一加载的 ini 是我调整的那个/etc/php.ini
,它使用的用户和组是 apache - User/Group apache(48)/48
。我遗漏了什么?
PS 可能是日志文件目录存在问题,正如这里建议的那样无法配置 PHP 错误日志我正在查看有关此的更多信息。
答案1
从官方文档,你应该改变许可/var/log/php-errors.log因此该文件可由 apache 用户写入(例如 www、www-data 等)
#chown www:www
错误日志细绳
记录脚本错误的文件的名称。该文件应由 Web 服务器的用户写入。如果使用特殊值 syslog,则错误将发送到系统记录器。在 Unix 上,这表示 syslog(3);在 Windows NT 上,这表示事件日志。Windows 95 不支持系统记录器。另请参阅:syslog()。如果未设置此指令,则错误将发送到 SAPI 错误记录器。例如,它是 Apache 中的错误日志或 CLI 中的 stderr。另请参阅 error_log()。
答案2
如果您在写入/读取文件时遇到困难,您应该查看此答案中的详尽列表:https://stackoverflow.com/questions/12531408/setting-php-tmp-dir-php-upload-not-working
基本上,如果您希望 apache 写入 syslog 以外的 error_log 文件,则 apache 需要具有写入该文件的权限,如果该文件尚不存在,则 apache 也需要对父文件夹具有写入权限。
但是,如果您从 CentOS 7 开始尝试读取/写入或将 error_log 设置为 /tmp 文件夹,则上述内容均不适用。答案如下:https://stackoverflow.com/questions/10752396/cant-write-to-tmp-with-php-despite-777-permissions-and-no-open-basedir-value?rq=1参考此博客http://blog.oddbit.com/2012/11/05/fedora-private-tmp/解释如何systemd
不允许这样做。
答案3
显然我还需要display_errors = on
。我以为这是用于在屏幕上显示错误,但它似乎也用于错误记录。
答案4
运行时# ls -la /var/log/php-fpm
,您将看到一个名为的文件error.log
和另一个名为的文件www-error.log
。只需使用该文件即可。
它位于 Centos 8、PHP 7.4 FPM 下。