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

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

是否有其他方法可以在共享主机环境中找到错误日志,而不必通过整个站点结构来查找error_log文件?

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

1156843 次浏览

尝试phpinfo()并检查"error_log"

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

error_log = /var/log/php.errors

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

如果PHP是apache2模块,PHP将错误日志存储在/var/log/apache2中。 共享主机通常将日志文件存储在根目录/log子文件夹中。 但是…如果你可以访问php.ini文件,你可以这样做:

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

根据rinogo的注释:如果您正在使用cPanel,您可能正在寻找的主日志文件(默认情况下)存储在

/usr/local/apache/logs/error_log

如果所有这些都失败了,您可以使用

<?php phpinfo(); ?>

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

详见错误处理函数

环境中,PHP错误默认指向下面这个文件。

/var/log/httpd/error_log

所有访问日志分为:

/var/log/httpd/access_log

如果你从源代码构建Apache和PHP,那么错误日志默认生成在你的${Apache install dir}/logs/error_log,即通常是/usr/local/apache2/logs/error_log

否则,如果你已经从存储库安装了它,你会在/var/log/apache2/error_log找到它。

你也可以在你的php.ini中设置路径,并通过调用phpinfo()来验证。

如何找到你的PHP错误日志在Linux:

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

如果你使用php5-fpm默认日志,它应该在下面:

/var/log/php5-fpm.log

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

在这种情况下,它是一个相对路径,这意味着它将在/etc/httpd/logs/error_log之下。如果你仍然找不到它,检查你的httpd . conf文件的底部,看看你的虚拟主机包括在哪里。它可能在/etc/httpd/conf.d/ <-作为“other”;或“;extra"。你的虚拟主机可以用ErrorLog "/path/to/error_log"覆盖它。

无论你想要它在哪里,如果你在函数调用中设置它:

error_log($errorMessageforLog . "\n", 4, 'somePath/SomeFileName.som');

默认情况下,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/

如果你在谷歌计算引擎中,它也可以是/var/log/apache2/error.log

你可以这样看尾巴:

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

Linux

php --info | grep error

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

窗户

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

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

命令,设置日志的位置

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

error_log = /log/myCustomLog.log

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

NGINX通常将其存储在/var/log/nginx/error.logaccess.log中(在任何情况下都是Ubuntu)。

通过在命令行上运行cat <file location> | grep ErrorLog搜索httpd . conf文件中的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来指定不同的日志文件位置。

WordPress

WP_DEBUG_LOG设置为true时,WordPress将把error_log()消息定向到/wp-content/debug.log

WP_DEBUG_LOG参见WordPress文档

php --info | grep error

这很有帮助。

  1. 你可以在文件管理器中查看日志文件夹。
  2. 检查public_html文件夹中的日志文件。
  3. 检查&;php phpinfo()&;存储日志的文件。

cPanel错误日志位于:

  • < p > /usr/local/cpanel/logs/

  • < p > /usr/local/apache/logs/

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

  • /var/log/apache

  • /var/log/apache2

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

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

如果你得到一个错误,输入目录不存在,那么你可以运行这个命令来找到正确的位置:

whereis apache

whereis apache2

您处于共享环境中,无法找到错误日志。总是检查cPanel仪表板中是否有选项错误。如果您无法找到错误日志,那么您可以在那里找到它。

在cPanel搜索栏中,搜索Error,它将显示错误页面,这基本上是不同HTTP错误页面的列表,其他Error是错误日志显示的地方。

共享环境中的其他地方:

  • /home/yourusername /日志
  • /home/yourusername / public_html / error_log

就像这样:

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

对于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

因为某种原因,我把它存储在:

/var/log/php-errors.log

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

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

在共享的cPanel环境中,如果你的主机提供商没有在cPanel仪表板中提供任何选项,你就无法找到错误日志。你可以搜索“;error"看看你的医生有没有。

否则,通常你会发现一个名为“error_log”的文件;在你的public_html文件中,它记录了所有的PHP错误。

我可以向你保证,我不是唯一一个在沮丧地寻找日志文件时被逼疯过的人。看起来它应该是整个系统中最容易找到的东西。

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

在有人花时间写一份完整的、跨系统的指南之前,你能得到的最好的是你可以查询的大致方向。每个PHP开发人员都不得不忍受这种追求带来的痛苦,只有一个例外。如果你在一个地方工作,信息是在你第一次需要的时候提供的,那么你永远都需要这些信息,也就是说,直到你找到一个新的工作环境。有这么幸运的人。

如果这些信息不是直接提供给你的,也就是说,你还有一些事情要做。在你的职业生涯中,寻找工作不是最漫长的,但也不是最简单的。

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

<?php
phpinfo();

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

从phpinfo()通过web服务器和web浏览器的样本输出

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中。另一个可能的位置是在您的帐户主目录~ / / error.log日志中的日志目录中。

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

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

这个小抄在某些情况下是有帮助的,但我很遗憾地承认它并不是万能的。我向你表示哀悼。

Enter image description here

你可以在下面看到一个帐户的php错误:

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

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

  1. 全局通过WHM:

    • 交通和——在祝辞MultiPHP INI编辑器——>“编辑器Mode"
    • 选择要设置错误日志的PHP版本
    • 编辑参数error_log。 Error_log = "/some/path; 将文件名更改为所需的错误日志文件
    • 保存更改
  2. 本地通过cPanel:

    • CPanel——在祝辞MultiPHP INI编辑器——>“编辑器Mode"
    • 选择要设置错误日志的PHP版本
    • 编辑参数error_log。 Error_log = "/some/path"
    • 将文件名更改为所需的错误日志文件

    主目录将为帐户上配置的所有域、插件和子域设置选项 特定的域将限制更改到该域,或者,在附加域的情况下,附加和匹配的子域

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

    • 交通和——比;MultiPHP经理
    • 找到要更改错误日志位置的域
    • 点击“编辑php - fpm”;
    • 更改“错误日志文件(error_log)”中的日志位置;相对于文件夹"日志"在用户的主目录中
    • 保存更改