如果 error_log 指令只是说“error_log”,那么 PHP 错误会记录到哪里?

Posted

技术标签:

【中文标题】如果 error_log 指令只是说“error_log”,那么 PHP 错误会记录到哪里?【英文标题】:Where are PHP errors logged to if the error_log directive simply says "error_log"? 【发布时间】:2014-06-10 17:58:20 【问题描述】:

我运行了phpinfo()error_log 指令只写了error_log。那是指什么文件?即 error_log 的完整路径是什么?

【问题讨论】:

规范是 Where does PHP store the error log? (PHP 5, Apache, FastCGI, and cPanel)(尽管标题过于具体)。 【参考方案1】:

在Windows 10、IIS 10.0.18362.1 上,我在文件php\php.ini 中设置了这个:

error_log = "C:\tmp\php_errors.log"

error_log = C:\tmp\php_errors.log

error_log = \tmp\php_errors.log

phpinfo() 显示:

error_log C:\tmp\php_errors.log 或 \tmp\php_errors.log

有时直接,但总是在iisreset 之后(回收应用程序池)。

这是保存文件的位置。

不带pad:error_log = php_errors.log会写在出错的地方。已经提过了。

【讨论】:

你说的“没有pad”是什么意思?你能详细说明一下吗?【参考方案2】:

打开你的 php.ini 文件。

对照error_log检查路径。

【讨论】:

这不应该被否决,因为这是预期的正确用法。人们应该按照他们预期的方式使用提供的工具,并且只有在无法访问或未提供解决方案时才旋转他们自己的解决方案。这个网站上有太多人认为仅仅因为它没有解决他们的具体问题(以及所有相关但未报告的问题),它就会自动出错。这没有错,如果它不起作用,那么你的服务器设置不好,这是你真正的问题。 我想补充一点,日志也可以在 apache.conf 或 vhost.conf 中定义。 我同意投反对票,原因很简单,因为它没有清楚地解释任何事情。 你是什么意思“根据error_log检查路径。”(似乎难以理解)?你能详细说明吗?请通过editing (changing) your answer 回复,而不是在 cmets 中(without "Edit:"、"Update:" 或类似的 - 答案应该看起来像是今天写的)。【参考方案3】:

当该值仅显示error_log(或php.ini 文件中的error_log = error_log)时,这意味着错误将被写入发生错误的同一目录中名为error_log 的文件中。

因此,如果您在 /home/user/public_html/ 中有一个名为 index.php 的文件引发错误,则错误将被写入:/home/user/public_html /error_log.

如果您在 /home/user/public_html/admin/images/ 中有名为 resize.php 的文件引发错误,则错误将被写入:/home/user /public_html/admin/images/error_log


来源:Display and log errors for PHP

【讨论】:

【参考方案4】:

引用from the documentation:

error_log 字符串

脚本错误所在的文件名 记录。该文件应该可由 Web 服务器的用户写入。如果 使用特殊值 syslog,将错误发送到系统记录器 反而。在 Unix 上,这意味着 syslog(3),而在 Windows NT 上,这意味着 事件日志。 Windows 95 不支持系统记录器。另请参阅: 系统日志()。如果未设置此指令,则会将错误发送到 SAPI 错误记录器。例如,它是 Apache 或 stderr 中的错误日志 命令行界面。

因此,当未设置该值(这是默认值)时,它将被发送到父错误记录器,即 apache(如果通过它运行)或stderr,如果您在命令行上运行脚本。

如果您通过 apache 使用脚本,则必须查看 apache 错误日志,通常在 /var/log/apache/var/log/httpd,具体取决于您的发行版。您可以检查 apache 配置文件的确切位置。

编辑:

我刚刚注意到我误读了你的问题,我猜你的意思是error_log 的实际值是error_log

我刚刚做了一些测试。当我将error_log 设置为php_errors.log 之类的值时,PHP 仍然会将错误消息写入 apache 错误日志。它的行为就像值是空的一样。当我将值设置为完整路径(例如/tmp/php_errors.log)时,它会将错误写入指定文件。

所以我猜在你的情况下它会将错误写入 apache 错误日志文件。

当然你可以设置自己的日志文件添加

ini_set("error_log", "/tmp/php_errors.log");

到您需要它的 PHP 文件(如果它没有被管理员禁用)。

【讨论】:

/var/log 中没有 /apache。但是/usr/local/apache/logs 中有一个error_log,但它似乎没有显示任何PHP 错误。当我运行我的 PHP 页面时,我得到一个空白屏幕,我想知道语法错误。 display_errorsphp.ini 中被关闭。 你应该可以在你的 php 文件中打开display_errors。只需在开头添加ini_set("display_errors", 1);即可。 我相信ini_set("display_errors", 1); 告诉 PHP 通过输出 HTML 将错误消息回显到屏幕。 另一个位置是/var/log/apache2(额外的“2”)(在fairly standard LAMP installation 上观察到Ubuntu MATE 20.04(Focal Fossa))。

以上是关于如果 error_log 指令只是说“error_log”,那么 PHP 错误会记录到哪里?的主要内容,如果未能解决你的问题,请参考以下文章

#error 预处理器指令中带有撇号的警告

nginx日志-错误日志(error_log)

apache日志:error_log,access_log

error_log() 范例

002-Nginx 配置文件nginx.conf详解

php 不记录错误 log_errors=on,error_log 路径存在