【问题标题】:Where does PHP store the error log? (PHP 5, Apache, FastCGI, and cPanel)PHP 将错误日志存储在哪里? (PHP 5、Apache、FastCGI 和 cPanel)
【发布时间】:2011-07-04 21:53:02
【问题描述】:

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

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

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

【问题讨论】:

  • 在 Linux 上,/var/log/httpd/error_log/var/log/apache2/error.log。这些文件归root所有,所以你需要root或者使用sudo才能看到,或者阅读。
  • php --info | grep error
  • 对于那些正在寻找 Windows 解决方案的人,请使用 php --info | findstr /r /c:"error_log" 查看日志文件的位置。
  • 这对我来说很奇怪...我托管了网站,PHP 日志与 Apache 日志存储在同一个文件中...在我的管理面板上,在日志中,有显示完整 Apache 的选项错误日志,当我单击它时,会出现关于用户输入不应进入的地方的错误,例如。但是,在同一个文件中也有 PHP 显示的错误。
  • @soaku 如果你使用 fastcgi apache 本身不运行 PHP。当您使用作为 apache 模块的 mod_php 时,apache 会处理 php。这意味着在使用 mod_php 时错误可能并且可能会出现在 apache 日志中,但在使用 cgi 或 fastcgi 时不会出现这种情况

标签: error-handling php


【解决方案1】:

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

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

【讨论】:

  • Re "public_html 文件":你不是说"public_html 文件夹"吗? (或“public_html 目录”?)
  • 是的,你是对的 public_html 目录
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    Error Handling Functions 中查看更多信息。

    【讨论】:

    • 谢谢,这解决了我的问题。相对定义的行为真的很蹩脚,日志文件遍布 htdocs 文件夹,不知道从哪里开始查看。我本来希望与安装文件夹相关,就像其他设置一样。 +1。
    【解决方案4】:

    Linux

    php --info | grep error 
    

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

    视窗

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

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

    设置日志位置

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

    error_log = /log/myCustomLog.log
    

    感谢chelmertzBoom 提供这些(问题的cmets)。

    【讨论】:

    • 我在 Linux 上。这没有为我提及日志位置。
    • @Sirex php -info 输出什么?您需要确保 php 实际上是在调用 PHP 来运行...
    • 另外,php 当前可能没有记录任何内容。如果是这种情况,您可以打开您的php.ini,并将error_reporting 设置为E_ALL & ~E_DEPRECATED & ~E_STRICT,或者您想查看的任何错误,然后将error_log 设置为您希望记录错误的目录的路径. (注意:这不是文件的完整路径,只是目录的完整路径。)
    • 我只在大多数人推荐的 /var/log/httpd/ 中找到 old 日志,但运行 php --info | grep log 将我指向 /var/www/logs找到了最近的日志。
    • 设置日志位置后,别忘了重启Apache:sudo /etc/init.d/apache2 restart
    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

      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
      

      【讨论】:

        【解决方案7】:
        1. 您可以进入文件管理器并查看日志文件夹。
        2. 检查 public_html 文件夹中的日志文件。
        3. 检查“php phpinfo()”文件以了解日志的存储位置。

        【讨论】:

        • 什么是“文件管理器”?你的意思是“文件管理器”(普通名词)吗?还是 Windows 的 File Manager(虽然那是 1990 年代的 - 较新的名称是 "File Explorer""Windows Explorer")?你能详细说明吗?例如,您指的是特定的操作系统吗?如果有,是哪个版本?
        【解决方案8】:
        php --info | grep error
        

        这很有帮助。

        【讨论】:

        • (似乎)这会输出 PHP 命令行设置的值(例如 /etc/php/7.1/cli/php.ini)而不是 Apache 设置。
        • 在 PHP 7.4 版本中,我看到:# error_log => no value => no value 我不知道这是否意味着什么都没有写入,或者是否使用了一些默认目标路径。
        【解决方案9】:

        通过在命令行上运行 cat <file location> | grep ErrorLoghttpd.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 以指定不同的日志文件位置。

        【讨论】:

          【解决方案10】:

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

          【讨论】:

            【解决方案11】:

            如果你在Google Compute Engine,也可以是/var/log/apache2/error.log

            你可以这样查看尾巴:

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

            【讨论】:

            • 不仅是谷歌计算引擎。大多数 LAMP 安装(在 Linux 上)也是如此。
            【解决方案12】:

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

            一般我:

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

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

              应该将 PHP 日志级别设置为对您来说足够的任何合并。,

              例如:E_ALL &amp; ~E_DEPRECATED &amp; ~E_STRICT

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

              默认值没有给出完整路径,只有文件名,不知道这个路径正常解析到哪里。应该是/var/log/

            【讨论】:

              【解决方案13】:

              最好的方法是查看您的 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/

              【讨论】:

                【解决方案14】:

                如何在 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
                

                【讨论】:

                  【解决方案15】:

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

                  /var/log/httpd/error_log
                  

                  所有访问日志都归于:

                  /var/log/httpd/access_log
                  

                  【讨论】:

                  • 那么注释掉php错误日志文件规范就直接写到这里了吗?
                  • 更有可能是/var/log/apache2/error.log
                  【解决方案16】:

                  WordPress

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

                  See WordPress documentation for WP_DEBUG_LOG

                  【讨论】:

                  • 除非该位置被 WordPress 根文件夹中的文件 .htaccess 中的条目覆盖(例如,登录到 Web 服务器根目录的正上方(因此 HTTP/HTTPS 无法访问))。示例:php_value error_log /var/www/pmortensen.eu/phperrors.log。它是否以这种方式工作可能取决于配置,也可能不取决于配置。
                  【解决方案17】:

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

                  /var/log/php5-fpm.log
                  

                  【讨论】:

                    【解决方案18】:

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

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

                    【讨论】:

                      【解决方案19】:

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

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

                      共享环境中的其他地方:

                      • /home/yourusername/logs
                      • /home/yourusername/public_html/error_log

                      【讨论】:

                      • 截图可以创造奇迹。您可以edit (change) your answer(但没有“编辑:”、“更新:”或类似的 - 答案应该看起来好像是今天写的)。
                      【解决方案20】:

                      类似这样的:

                      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
                      

                      【讨论】:

                        【解决方案21】:

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

                        /var/log/php-errors.log

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

                        【讨论】:

                          【解决方案22】:

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

                          【讨论】:

                            【解决方案23】:

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

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

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

                            /usr/local/apache/logs/error_log
                            

                            如果一切都失败了,您可以使用检查日志文件的位置

                            <?php phpinfo(); ?>
                            

                            【讨论】:

                            • “如果 php 是 apache2,Php 将错误日志存储在 /var/log/apache2 中”而不是 RHEL 等,其中包的名称是“httpd”。真的不能假设一个包的名称在各个发行版中是一致的。
                            • 仅供 Google 员工参考 - 如果您使用的是 cPanel,您可能正在寻找的主日志文件(默认情况下)存储在 /usr/local/apache/logs/error_log
                            • 但检查&lt;?php phpinfo(); ?&gt;的'error_log'部分以确认路径
                            • 它会在 phpinfo 部分的什么位置显示?在 error_log 中,我看到的所有键/值都是“error_log”,没有实际路径
                            • 我猜@Hi-Angel 的问题是试图通过... PHP shell (php -a) 运行一个实际的 PHP 标记(而不是纯 PHP 代码)
                            【解决方案24】:

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

                            error_log = /var/log/php.errors
                            

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

                            【讨论】:

                              【解决方案25】:

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

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

                              在有人花时间编写完整的跨系统指南之前,您将获得的最好的信息是您可以查询的一般方向。每个 PHP 开发人员都必须在这一追求中忍受痛苦,只有一个例外。如果您在一个地方工作,并且在您第一次需要信息时提供了信息,那么您将永远拥有所需的信息,也就是说,直到您发现自己处于新的工作环境中。有这么幸运的人。

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

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

                              <?php
                                  phpinfo();
                              

                              要么浏览到该文件,要么从命令行运行它。如果两者都做,您可能会发现 error_log 位于不同的位置,具体取决于 PHP 的命令行与 Web 服务器使用情况。这是因为在 Web 服务器上运行的 PHP 解释器与从命令行运行的 PHP 解释器不同,即使命令行与 Web 服务器在同一台机器上也是如此。此处已经发布的答案大多是假设 PHP 作为 Web 服务器的一部分运行。

                              error_log 的默认值是 no value

                              无论值是什么,它都来自用于配置 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,则文件的常用主目录是网站的文档根目录(也称为网站主目录,不要与您帐户的主目录混淆)。

                              此备忘单在某些情况下很有用,但我不得不承认它并非普遍适用。你有我的哀悼。

                              【讨论】:

                                【解决方案26】:

                                尝试phpinfo() 并检查“error_log”

                                【讨论】:

                                • 它只是说 error_log 没有指定路径。我想这可能是因为它位于共享托管环境中,如果我们可以访问它,我们会看到其他所有人的网站错误。
                                • @PHPLOVER 如果您尝试echo ini_get('error_log');,它会说同样的话吗?
                                • @PHPLOVER:您可以通过设置error_reporting(E_ALL|E_STRICT);se.php.net/manual/en/function.error-reporting.php轻松控制报告级别
                                • 我的也说error_log,不知道去哪里找。这在谷歌上命中了 nr one,但没有回答。
                                • @Pacerier 我每个月支付大约 12 美元,但 Digital Ocean 有一台小机器,似乎只需 5 美元:digitalocean.com/pricing 不太熟悉托管,但您可能可以通过 google 找到一些东西。
                                猜你喜欢
                                • 2017-10-13
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 2012-07-03
                                • 1970-01-01
                                • 2012-10-01
                                • 1970-01-01
                                相关资源
                                最近更新 更多