PHP 将错误日志存储在哪里?(PHP 5、Apache、FastCGI 和 cPanel)

Where does PHP store the error log? (PHP 5, Apache, FastCGI, and cPanel)

提问人:PHPLOVER 提问时间:2/26/2011 最后编辑:Peter MortensenPHPLOVER 更新时间:9/30/2023 访问量:1238690

问:

我在共享主机上,有 cPanel、Apache 和 PHP 由 FastCGI 运行。PHP 将错误日志存储在哪里?

有没有另一种方法可以在共享托管环境中找到错误日志,而不必遍历整个站点结构来查找error_log文件?

我可以访问php .ini文件(我使用的是PHP版本5.2.16)。

错误处理 PHP

评论

40赞 Eric Leschinski 8/8/2014
在 Linux 上,要么 .这些文件归 root 所有,因此您需要是 root 或使用 才能查看或读取它。/var/log/httpd/error_log/var/log/apache2/error.logsudo
134赞 sjas 8/27/2014
php --info | grep error
13赞 Boom 5/14/2015
对于寻找 Windows 解决方案的用户,请使用 查看日志文件的位置。php --info | findstr /r /c:"error_log"
1赞 3/12/2017
这对我来说很奇怪......我已经托管了网站,PHP日志与Apache日志存储在同一个文件中...在我的管理面板上,在日志中,可以选择显示完整的Apache错误日志,例如,当我单击它时,会出现有关用户输入不应输入的地方的错误。但是,在同一文件中,PHP也显示了错误。
0赞 Gall Annonim 6/7/2018
@soaku,如果您使用 fastcgi,apache 本身不会运行 PHP。当您使用mod_php即 Apache 模块时,Apache 会处理 PHP。这意味着在使用 mod_php 时,错误可能而且可能会出现在 apache 日志中,但在使用 cgi 或 fastcgi 时不会出现这种情况

答:

101赞 chelmertz 2/26/2011 #1

尝试并检查“error_log”phpinfo()

评论

18赞 PHPLOVER 2/26/2011
它只是说error_log没有指定路径。我想这可能是因为它位于共享主机环境中,如果我们可以访问它,我们会看到其他人的网站错误。
8赞 chelmertz 2/27/2011
如果你尝试,@PHPLOVER说同样的话吗?echo ini_get('error_log');
2赞 chelmertz 2/27/2011
@PHPLOVER:您可以使用设置 se.php.net/manual/en/function.error-reporting.php 轻松控制报告级别error_reporting(E_ALL|E_STRICT);
4赞 HMR 6/10/2014
我的也说error_log,不知道去哪里找。这在谷歌上击中了 nr one,但没有回答它。
1赞 chelmertz 3/2/2015
@Pacerier我每月支付大约 12 美元的费用,但 Digital Ocean 似乎有一台 5 美元的小型机器:digitalocean.com/pricing 不太熟悉托管,但您可能会通过谷歌找到一些东西。
12赞 mailo 2/26/2011 #2

php.ini 文件中设置变量时error_log应使用绝对路径,否则错误日志将根据您的相对路径存储。

error_log = /var/log/php.errors

其他解决方案是编写简单的脚本,该脚本将列出目录树中的所有错误日志文件。

381赞 Adam Arold 2/26/2011 #3

如果 PHP 是 apache2 模块,PHP 会存储错误日志。 共享主机通常将日志文件存储在根目录子文件夹中。 但。。。如果您有权访问文件,则可以执行以下操作:/var/log/apache2/logphp.ini

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

根据 rinogo 的评论:如果您使用的是 cPanel,您可能要查找的主日志文件(默认情况下)存储在

/usr/local/apache/logs/error_log

如果所有其他方法都失败,您可以使用

<?php phpinfo(); ?>

评论

24赞 chelmertz 5/14/2013
“如果 php 是 apache2,则 Php 将错误日志存储在 /var/log/apache2 中”,而不是在 RHEL 等上,其中包的名称是“httpd”。真的不能假设一个包的名称在发行版之间是一致的。
30赞 rinogo 12/5/2013
仅供参考 Google 员工 - 如果您使用的是 cPanel,您可能要查找的主日志文件(默认情况下)存储在/usr/local/apache/logs/error_log
5赞 doub1ejack 5/28/2014
但检查“error_log”部分以确认路径<?php phpinfo(); ?>
2赞 Robert Sinclair 8/29/2017
它将在 phpinfo 部分的哪个位置显示它?在error_log中,我看到的键/值都是“error_log”,没有实际路径
1赞 igorsantos07 6/19/2020
我猜 @Hi-Angel 的问题是试图通过......PHP shell (php -a)
3赞 anemone928 8/6/2013 #4

在 php.ini 中配置错误日志文件时,可以使用绝对路径或相对路径。将根据生成脚本的位置解析相对路径,并且您将在包含脚本的每个目录中获得一个日志文件。如果希望所有错误消息都转到同一文件,请使用该文件的绝对路径。

有关详细信息,请参阅错误处理函数

评论

0赞 drakorg 5/2/2014
谢谢,这解决了我的问题。相对定义的行为真的很蹩脚,日志文件遍布 htdocs 文件夹,不知道从哪里开始查看。我本来希望与其他设置一样相对于安装文件夹。+1.
38赞 Allie 12/21/2013 #5

LAMP环境中,PHP错误默认定向到以下文件。

/var/log/httpd/error_log

所有访问日志都属于:

/var/log/httpd/access_log

评论

0赞 User 2/4/2015
所以注释掉php错误日志文件规范,它会写在这里吗?
0赞 Peter Mortensen 9/19/2021
更有可能./var/log/apache2/error.log
0赞 Prid 7/29/2022
对我来说,这是/var/log/httpd-error.log
5赞 Abhishek 2/13/2014 #6

如果您从源代码构建了 Apache 和 PHP,那么默认情况下,错误日志会在您的 ,即通常 .${Apache install dir}/logs/error_log/usr/local/apache2/logs/error_log

否则,如果您已从存储库中安装了它,则可以在 中找到它。/var/log/apache2/error_log

您也可以在 also 中设置路径,并通过调用 来验证它。php.iniphpinfo()

20赞 Eric Leschinski 8/8/2014 #7

如何在 Linux 上查找 PHP 错误日志:

sudo updatedb

[sudo] password for eric:

sudo locate error_log

/var/log/httpd/error_log

另一种等效方式:

sudo find / -name "error_log" 2>/dev/null

/var/log/httpd/error_log
3赞 mateusz.szymborski 11/14/2014 #8

如果您使用 php5-fpm 日志默认值,它应该在:

/var/log/php5-fpm.log
5赞 Thomas Bennett 1/9/2015 #9

最好的方法是查看您的 httpd.conf 文件,看看默认值是什么。它也可能被您的特定虚拟主机覆盖。我首先查看或搜索error_log。它可以列为 /var/log/httpd/error_log 或 ,但也可以简单地列为 。/etc/httpd/conf/httpd.conf/etc/apache2/httpd.conf/var/log/apache2/error_loglogs/error_log

在这种情况下,它是一个相对路径,这意味着它将位于 .如果仍然找不到它,请检查 httpd.conf 文件的底部,看看虚拟主机的包含位置。它可能在 /etc/httpd/conf.d/ <- 中作为“其他”或“额外”。然后,您的虚拟主机可以使用 ErrorLog “/path/to/error_log” 覆盖它。/etc/httpd/logs/error_log

4赞 cfphpflex 1/12/2015 #10

无论您希望在何处,如果您在函数调用中设置它:

error_log($errorMessageforLog . "\n", 4, 'somePath/SomeFileName.som');
13赞 2 revs, 2 users 71%ThorSummoner #11

默认情况下,PHP 似乎不会在任何地方记录错误。php.ini 中的密钥在我见过的所有安装中都被注释掉了。error_log

一般我:

  1. 查找 php.ini 文件。.locate php.ini

  2. 在这些文件中搜索值;error_reporting

    它应该设置为任何PHP日志级别的合并对你来说就足够了。

    例如:E_ALL & ~E_DEPRECATED & ~E_STRICT

  3. 检查该值以确保它指向实际地点并且未被注释掉。error_log

    默认值没有给出完整路径,只给出文件名,我不知道这个路径通常解析到哪里。可能。/var/log/

14赞 Vivek 7/6/2015 #12

如果您在 Google Compute Engine 中,也可以是这样。/var/log/apache2/error.log

你可以这样查看尾巴:

tail -f /var/log/apache2/error.log

评论

0赞 Peter Mortensen 9/29/2021
不仅是 Google Compute Engine。大多数 LAMP 安装(在 Linux 上)也是如此。
69赞 Cullub 1/29/2016 #13

Linux操作系统

php --info | grep error 

终端将输出错误日志位置。

窗户

php --info | findstr /r /c:"error_log"

命令提示符将输出错误日志位置。

设置日志位置

打开 your 并添加以下行:php.ini

error_log = /log/myCustomLog.log

感谢 chelmertzBoom 的这些(对问题的评论)。

评论

8赞 Sirex 3/24/2016
Linux 上的 IM。这没有提到我的日志位置。
1赞 Cullub 4/8/2016
@Sirex输出什么?您需要确保实际上是在调用 PHP 来运行......php -infophp
1赞 Cullub 4/8/2016
此外,php 当前可能没有记录任何内容。如果是这种情况,您可以打开 ,并设置为 ,或任何要查看的错误,然后设置为要记录错误的目录的路径。(注意:这不是文件的完整路径,只是目录的完整路径。php.inierror_reportingE_ALL & ~E_DEPRECATED & ~E_STRICTerror_log
1赞 ChrisBob 2/3/2017
我只在大多数人建议查找的 /var/log/httpd/ 中找到了日志,但运行将我指向最新日志所在的 /var/www/logs。php --info | grep log
1赞 BrianHenryIE 7/3/2018
设置日志位置后,不要忘记重新启动 Apache:sudo /etc/init.d/apache2 restart
6赞 DarkNeuron 7/18/2016 #14

NGINX 通常将其存储在 /var/log/nginx/error.log 或 access.log(无论如何在 Ubuntu 上)。

3赞 jkdev 6/21/2017 #15

通过在命令行上运行来搜索 httpd.conf 文件。例如:ErrorLogcat <file location> | grep ErrorLog

cat /etc/apache2/httpd.conf | grep ErrorLog

输出:

# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a <VirtualHost>
ErrorLog "/private/var/log/apache2/error_log"

找到开头的那一行,就有了你的答案。ErrorLog

注: 对于虚拟主机,您可以编辑虚拟主机文件以指定不同的日志文件位置。httpd-vhosts.conf

1赞 Stan James 7/13/2017 #16

WordPress的

WordPress 会将消息定向到 when 设置为 true。error_log()/wp-content/debug.logWP_DEBUG_LOG

请参阅 WordPress 文档了解WP_DEBUG_LOG

评论

0赞 Peter Mortensen 9/26/2021
除非该位置被 WordPress 根文件夹中的文件中的条目覆盖(例如,登录到 Web 服务器根目录的正上方(因此 HTTP/HTTPS 无法访问))。例:。它是否完全以这种方式工作可能取决于配置,也可能不取决于配置。.htaccessphp_value error_log /var/www/pmortensen.eu/phperrors.log
8赞 J4GD33P 51NGH 5/10/2018 #17
php --info | grep error

这很有帮助。

评论

3赞 BrianHenryIE 7/3/2018
(似乎)这输出PHP命令行设置(例如/etc/php/7.1/cli/php.ini)的值,而不是Apache设置。
3赞 chrisinmtown 12/9/2020
在PHP版本7.4中,我看到了这一点:我不知道这是否意味着没有写入任何内容,或者是否使用了某些默认的目标路径。# error_log => no value => no value
2赞 Mevil Bhojani 12/14/2018 #18
  1. 您可以进入文件管理器并检查日志文件夹。
  2. 检查public_html文件夹中的日志文件。
  3. 检查“php phpinfo()”文件以了解日志的存储位置。

评论

0赞 Peter Mortensen 9/29/2021
什么是“文件管理器”?你的意思是“文件管理器”(普通名词)吗?还是 Windows 的文件管理器(尽管那是 1990 年代的 - 较新的名称是“文件资源管理器”和“Windows 资源管理器”)?你能详细说明一下吗?例如,您指的是特定的操作系统吗?如果是这样,哪个版本?
0赞 Mevil Bhojani 10/6/2022
当您使用 cpanel 或任何其他托管面板时,您可以在托管面板中看到“文件管理器”。链接斜体
3赞 Dewlance 3/24/2019 #19

cPanel 错误日志位于:

  • /usr/local/cpanel/logs/

  • /usr/local/apache/logs/

默认情况下,Apache 日志位于以下位置:

  • /var/log/apache

  • /var/log/apache2

如果有人正在使用自定义日志位置,则可以通过运行以下命令来检查它:

cat /etc/apache2/**conf**/httpd.conf | grep ErrorLog

如果您收到 apache2 目录不存在的错误,则可以通过以下方式运行此命令以查找正确的位置:

whereis apache

whereis apache2
2赞 Krishna Pariyar 5/27/2019 #20

您位于共享环境中,找不到错误日志。始终检查cPanel在cPanel仪表板中是否有“错误”选项。如果您无法找到错误日志,则可以在那里找到它。

在cPanel搜索栏中,搜索“错误”,它将显示“错误页面”,这些页面基本上是不同HTTP错误页面的列表,而其他“错误”是显示错误日志的位置。

在共享环境中要查看的其他位置:

  • /home/yourusername/logs
  • /首页/您的用户名/public_html/error_log

评论

0赞 Peter Mortensen 9/26/2021
屏幕截图会创造奇迹。您可以编辑(更改)您的答案(但不能使用“编辑:”、“更新:”或类似内容 - 答案应该看起来就像今天写的一样)。
2赞 Freeman 1/30/2020 #21

像这样的东西:

sudo locate error.log | xargs -IX grep -iH "errorlog" X

sudo locate error_log | xargs -IX grep -iH "errorlog" X

sudo find / -iname "error?log" 2>/dev/null | xargs -IX grep -iH "errorlog" X
2赞 Grzegorz Adam Kowalski 10/13/2020 #22

对于 PHP-FPM,只需在配置文件中搜索:error_log

cat /etc/php-fpm.d/www.conf | grep error_log

php_admin_value[error_log] = /var/log/php-fpm/www-error.log
1赞 Fusseldieb 10/16/2020 #23

由于某种原因,我的将其存储在:

/var/log/php-errors.log

我正在使用 Ubuntu Server 16.04 (Xenial Xerus) 和 PHP 7.1.28。

2赞 otman soulimani 2/12/2021 #24

对于 CentOS 8,它是 .var/log/httpd/error_log

1赞 bitBirds Solutions 5/11/2021 #25

在共享的cPanel环境中,如果您的托管服务提供商在cPanel仪表板中未提供任何选项,则找不到错误日志。您可以搜索“错误”,看看您的提供商是否有任何错误。

否则,通常您会在public_html文件中找到一个名为“error_log”的文件,其中记录了所有PHP错误。

评论

0赞 Peter Mortensen 10/5/2021
回复“public_html文件”:你不是说“public_html文件夹”吗?(或“public_html目录”
0赞 bitBirds Solutions 12/19/2021
是的,您是对的public_html目录
4赞 Dan Allen 6/20/2021 #26

我可以向你保证,我不是唯一一个在令人沮丧的日志文件搜索中至少被逼疯一次的人。似乎它应该是整个系统中最容易找到的东西。

关于PHP错误日志存储位置的权威指南将是一项复杂的工作。官方的PHP手册甚至没有试图解决整个主题,因为存在对PHP以外的系统的依赖,例如操作系统(Linux与Windows,Linux的发行版),包括Windows和Linux中的设置,这些设置会影响PHP错误日志的名称和位置。

除非有人花时间写一份完整的跨系统指南,否则你得到的最好的就是你可以查询的一般方向。每个PHP开发人员都不得不忍受这种追求的痛苦,但有一个例外。如果你在一个地方工作,并且在你第一次需要信息时提供信息,那么你就永远拥有信息需求,也就是说,直到你发现自己处于一个新的工作环境。有这样幸运的人。

如果信息没有在银盘上给你,可以这么说,你有一些狩猎要做。狩猎不是你职业生涯中最长的一次,但也不是最简单的。

从已经发布的许多答案中可以明显看出,一个明智的起点是 phpinfo() 的输出。要查看它,请创建一个包含以下内容的 PHP 文件:

<?php
    phpinfo();

浏览到该文件或从命令行运行它。如果两者都这样做,您可能会发现error_log位于不同的地方,具体取决于命令行和 Web 服务器对 PHP 的使用。这是因为在 Web 服务器上运行的 PHP 解释器与从命令行运行的 PHP 解释器不同,即使命令行与 Web 服务器在同一台计算机上也是如此。这里已经发布的答案大多是做了一个未说明的假设,即PHP是作为Web服务器的一部分运行的。

Sample output from phpinfo() via web server and web browser

error_log的默认值为无值

Default error_log in php running as an Apache mod.

无论值是什么,它都来自用于配置 PHP 的 php.ini 文件。可以有很多php.ini文件。一开始在它们中找到自己的方式是令人困惑的,但你不需要处理这个问题来找到你的PHP日志。

如果 phpinfo() 的输出显示文件的完整路径,则日志所在的位置。你很幸运。

诀窍是 phpinfo() 中通常没有指示的完整路径。当没有完整路径时,位置取决于:

  1. 是否error_log是没有价值的。如果是,日志文件位置将取决于操作系统和 PHP 的运行模式。如果PHP作为Apache模块运行,则在Linux上,日志通常位于/var/log/apache2/error.log中。另一个可能的位置是帐户主目录的日志目录 ~/logs/error.log

  2. 如果存在没有路径的文件名,则位置取决于文件名是否具有值 syslog。如果是 syslog,则 PHP 错误日志将注入到服务器的 syslog 中,该日志因 Linux 发行版而异。一个常见的位置是 /var/log/syslog,但它可以位于任何地方。甚至系统日志的名称也因发行版而异。

  3. 如果没有路径的名称不是 syslog,则该文件的常用主页是网站的文档根目录(又名网站主目录,不要与您帐户的主目录混淆)。

这个备忘单在某些情况下很有帮助,但我很遗憾不得不承认它几乎不是普遍的。你有我的哀悼。

Enter image description here

1赞 Rachel 11/16/2022 #27

您可以在以下位置查看帐户的 php 错误:

/home/username/logs/domain_tld.php.error.log

您可以在全局和本地设置php错误日志。

  1. 通过WHM在全球范围内:

    • WHM -->> MultiPHP INI 编辑器 --> “编辑器模式”
    • 选择要设置错误日志的 PHP 版本
    • 编辑参数error_log。 error_log = “/some/path” 将文件名更改为所需的错误日志文件
    • 保存更改
  2. 在本地,通过cPanel:

    • CPanel -->> MultiPHP INI 编辑器 --> “编辑器模式”
    • 选择要设置错误日志的 PHP 版本
    • 编辑参数error_log。 error_log = “/some/path”
    • 将文件名更改为所需的错误日志文件

    主目录将为帐户上配置的所有域、插件和子域设置选项 特定域将限制对该域的更改,或者,如果是插件域,则限制插件和匹配的子域

    • 保存更改
  3. 如果启用了 PHP-fpm:

    • WHM --> MultiPHP 管理器
    • 找到要更改其错误日志位置的域
    • 点击“编辑 PHP-FPM”
    • 更改“错误日志文件 (error_log)”中相对于用户主目录中文件夹“logs”的日志位置
    • 保存更改
0赞 infomasud 4/4/2023 #28

如果您使用的是 Ngnix,则应该将文件位于目录中。error.logvar/log/ngnix/

0赞 Mevil Bhojani 8/24/2023 #29

当PHP在具有Apache和FastCGI的服务器上运行时,特别是在cPanel等环境中,PHP错误日志的位置可能取决于服务器的配置。但是,我可以为您提供一些常见的位置,您可以在其中找到错误日志:

php.ini 配置:

PHP 的主要配置文件 php.ini 有一个称为 error_log 的指令,用于确定应记录错误的位置。您可以在 php .ini 文件中搜索此指令,以查看日志的存储位置。它可能看起来像这样:

error_log = /path/to/your/php-error.log

Apache 日志:

如果PHP设置为将错误记录到Apache的错误日志中,您可能会在那里找到PHP错误。常见位置包括:

  • /var/log/httpd/error_log(适用于某些通用 Linux 发行版)

  • /var/log/apache2/error.log (适用于 Debian/Ubuntu)

  • /var/log/apache/error_log(适用于其他发行版)

特定于 cPanel 的日志:

在装有 cPanel 的服务器上:

PHP 错误可能会记录到用户的主目录中,例如

/home/username/public_html/error_log。

cPanel 有一个“错误”部分,您可以在其中查看最近 300 条错误日志消息。访问 cPanel 并导航到此部分可能会让您在不访问服务器的文件系统的情况下获得直接见解。

快速CGI:

根据 FastCGI 的设置方式,它可能有自己的错误日志,独立于 Apache。检查 FastCGI 配置文件以查看是否设置了任何特定的错误日志路径。

自定义日志位置:

在某些情况下,开发人员或系统管理员可以在应用程序代码中(使用 PHP 中的 error_log() 函数)或在服务器级别指定自定义日志位置。

如何找到php.ini:

要查找 PHP 安装正在使用的 php.ini 文件: 创建一个包含以下内容的 PHP 文件(例如 phpinfo.php):

    <?php
phpinfo();
?>

在 Web 浏览器中导航到此文件。这将显示有关PHP设置的大量信息。

查找“加载的配置文件”部分,它将告诉您正在使用哪个 php.ini 文件。此文件将包含前面提到的 error_log 指令。

永远记得之后删除或保护phpinfo.php文件,因为它可能会暴露有关服务器配置的敏感信息。

0赞 Idiota 9/30/2023 #30

我正在将 php 与 cpanel 一起使用,我发现错误日志是在与生成错误的 php 脚本相同的文件夹中创建的。因此,我做了一个 cron 作业来每天运行,

/usr/bin/php -q /home/mysite/cron.php

使用以下 PHP:

$errors="";
foreach(explode("\n",shell_exec('find . -name error_log')) as $file)
    $errors.=$file.":\n".file_get_contents($file)."\n\n\n";
if(empty($errors)) exit(0);
mail("[email protected]","php error_log",$errors);

它将每天搜索错误日志,如果找到,则通过电子邮件将其文件名和内容发送给我。

评论

0赞 volkerschulz 10/4/2023
这似乎更像是一个失败的配置,而不是一个规则。