我该在哪里找到PHP的错误日志文件?

38

我应该在哪里找到错误日志文件?

我需要检查它们以解决安装suPHP后出现的内部服务器错误。


1
这取决于您的日志记录设置 :) CO - Nemoden
1
我的服务器是CentOS,但在var/log/httpd下没有显示任何内容。 - user1010966
检查 php.ini 中是否设置了 error_log 路径。如果未设置,则通常会记录在 Web 服务器的错误日志中。 - air4x
php.ini 中查找 error_log,如果您使用 php-fpm,您可能还想检查 php-fpm 配置文件中的 error_log - Nemoden
这是一个超级常见问题。作为规范问题的候选人:*PHP在哪里存储错误日志?(php5,apache,fastcgi,cpanel)*。标题有些具体,但答案肯定不是全部都一样的。 - Peter Mortensen
8个回答

29
你可以使用 lsof 来查找系统上打开的日志文件。lsof 只会给你一个所有打开文件的列表。
使用 grep 查找 "log" ... 再次使用 grep 查找 "php"(如果文件名包含字符串 "log" 和 "php",例如在 "php_error_log" 中,并且你是 root 用户,你将无需知道配置即可找到文件)。
lsof | grep log

... snip
gmain     12148 12274       user   13r      REG              252,1    32768     661814 /home/user/.local/share/gvfs-metadata/home-11ab0393.log
gmain     12148 12274       user   21r      REG              252,1    32768     662622 /home/user/.local/share/gvfs-metadata/root-56222fe2.log
gvfs-udis 12246             user  mem       REG              252,1    55384     790567 /lib/x86_64-linux-gnu/libsystemd-login.so.0.7.1
==> apache 12333             user  mem       REG              252,1    55384     790367 /var/log/http/php_error_log**
        ... snip
lsof | grep log | grep php

**apache 12333             user  mem       REG              252,1    55384     790367 /var/log/http/php_error_log**
... snip

另外,还可以查看有关在Linux系统上查找打开日志文件的文章:在Linux系统上查找打开的日志文件


16

对我来说很有效。 我们如何将所有PHP错误记录到日志文件中?

只需在文件/etc/php.ini中添加以下行,即可将错误记录到指定的文件- 文件/var/log/php-scripts.log

vi /etc/php.ini

修改 error_log 指令:

error_log = /var/log/php-scripts.log

确保display_errors被设置为关闭状态(对最终用户不显示错误):

display_errors = Off

保存并关闭文件。重启 Web 服务器:

/etc/init.d/httpd restart

如何将错误记录到syslog或Windows Server事件日志?

按照以下方式修改error_log

error_log = syslog

如何查看日志?

使用SSH登录或使用SFTP下载日志文件 /var/log/php-scripts.log:

sudo tail -f /var/log/php-scripts.log

为什么我要确保 display_errors 是关闭的?这肯定不会影响错误日志记录,对吧? - User
如答案所述,display_errors 确定错误是否显示给最终用户(例如在呈现的网页上),因此不会影响日志记录。http://php.net/manual/en/errorfunc.configuration.php#ini.display-errors - cincodenada
php.ini文件中没有error_log选项,我该在哪里找到它? - Adamantus

6
在安装了cPanelCentOS上,我的日志文件位于:
/usr/local/apache/logs/error_log

观看:tail -f /usr/local/apache/logs/error_log


6

这取决于你使用的操作系统和web服务器。

在Linux和Apache上,你可以在文件夹/var/log/apache2/中找到Apache的error_log


在 /var/log 目录下没有任何名为 apache2 或 apache 的文件夹或文件。我的服务器是 centos - apache。 - user1010966
在 /var/log/httpd 下吗?您可以在 apache.conf 文件中配置 Apache 的日志位置。该文件应该位于 /etc/httpd/ 的某个地方。 - hiasl86

5

这一定会对您有所帮助,

启用PHP错误日志记录

或者

php.ini中(vim /etc/php.ini sudo vim /usr/local/etc/php/7.1/php.ini)

display_errors = Off

log_errors = On

error_log = /var/log/php-errors.log

将日志文件设为可写,使用者为www-data

sudo touch /var/log/php-errors.log

/var/log/php-errors.log

sudo chown <owner>:www

1
在大多数情况下,这是一个更可取的答案,因为它允许您将软件的执行与对服务器平台的直接了解分离开来,从而使您的代码更具可移植性。如果您正在执行大量的cron或CGI,则可能无法直接帮助,但可以在Web运行时将其设置为配置,以便cron和CGI脚本从中获取以保持日志位置一致。

您可以通过以下方式在任何平台上在运行时获取分配给PHP的当前日志文件:

ini_get('error_log');

这里返回的是Web服务器直接分配给PHP二进制文件的值,这在90%的使用情况下是您想要的(明显的例外是CGI)。CGI通常会记录到与HTTP Web服务器客户端相同的位置,但并不总是。在将任何内容提交到此位置之前,请确保它是可写的,以避免出现错误。定义其位置的配置文件(通常是全局文件apache.conf或每个域基础上的vhosts.conf),但配置并不能确保文件权限在运行时允许写入访问。

1

对于Unix CLI用户:

很可能error_log ini文件条目未设置。要验证:

php -i | grep error_log
// error_log => no value => no value

你可以在php.ini CLI文件中设置它,或者只需将所有的标准错误快速地导向文件即可:
./myprog 2> myerror.log

然后迅速地:
tail -f myerror.log

1

我正在使用CentOS 6.6Apache,对我来说错误日志文件在以下位置:

/usr/local/apache/log

一些在Linux上的LAMP安装可能会使用/var/log/apache2/error.log - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接