【问题标题】:Is there any way to have Apache / PHP log specifically why a 500 is being returned?有什么方法可以让 Apache / PHP 专门记录为什么返回 500?
【发布时间】:2011-10-23 09:01:06
【问题描述】:

我知道在各种不同的情况下可以返回 500 响应,但是有没有办法让服务器记录具体是什么导致了 500?或者就此将其打印到 PHP 页面/输出?

编辑:

我在 MediaTemple 的网格服务上,显示错误在 phpinfo() 中打开,以下是我的 PHP 代码:ini_set('display_errors',1); error_reporting(E_ALL|E_STRICT);

并且在我的主机配置中打开了错误日志记录,但是当我 tail 记录日志时,当我点击刷新时什么都没有出现。有什么想法吗?

【问题讨论】:

  • 如果您自己生成 500,则使用 error_log() 将原因保存到 PHP 自己的错误日志中。 Apache 本身通常对 PHP 的内部状态一无所知。如果 PHP 崩溃并且 Apache 记录了 500,那么它将包含有关崩溃原因的一些详细信息。

标签: php apache logging error-handling


【解决方案1】:

500 错误的原因应该已经在 Apache 的错误日志中。如果 PHP 负责,那么如果您在 php.ini 中有 display_errors = On,则错误将显示在屏幕上。

【讨论】:

  • 我在 PHP 和主机配置中打开了错误日志记录,但每次生成 500 时都没有写入日志。那,除了通常的“内部服务器错误”之外,没有错误消息被打印到页面上。如果我在我拥有的日志中没有看到它,无法访问 Apache 的核心日志(由于我的提供商),并且无法将其打印到屏幕上,有没有其他方法可以查看具体原因错误?
  • 您正在查看的 PHP 错误日志通常会写入错误输出吗?你能故意用error_log('put this in the error log')给它写信吗?如果没有,那么问题是您的 PHP 错误日志根本没有被使用。解决这个问题,生成 500 错误的错误也应该显示在那里。
【解决方案2】:

你可以试试:

$log_file = 'c:temp\test_error.txt';
register_shutdown_function('handleShutdown');

function handleShutdown() {
    global $log_file;
    $error = error_get_last();
    if ($error !== NULL) {
        $info = "[SHUTDOWN] file:" . $error['file'] . " | ln:" . $error['line'] . " | msg:" . $error['message'] . PHP_EOL;
        file_put_contents($log_file, $info, FILE_APPEND);
    } else {
        file_put_contents($log_file, "SHUTDOWN ", FILE_APPEND);
    }
}

【讨论】:

    猜你喜欢
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 2021-10-27
    相关资源
    最近更新 更多