error_log阻止回显显示

时间:2015-02-25 23:12:05

标签: php error-handling

我试图向自己发送一封包含详细错误信息的电子邮件,然后向用户显示一般错误消息。不幸的是,每次使用error_log函数时,它都只会显示一个白页。我尝试使用die('message');echo 'message'; die();以及在error_log()之前和之后放置它们。任何帮助,将不胜感激。下面是我用来测试的代码。所有常量都已定义。

    function onError($e_number, $e_message, $e_file, $e_line, $e_vars) {
        $message = "An error occured in script '$e_file' on line $e_line:\n$e_message.\n";
        $message .= "<pre>" . print_r(debug_backtrace(), 1) . "</pre>\n";
        $message .= "<pre>" . print_r($e_vars, 1) . "</pre>\n";

        if (!LIVE) { echo '<div class="alert alert-danger">' . nl2br($message) . '</div>'; }
        else {
            $headers = "From: errors@" . DOMAIN . "\r\n";
            $headers .= "Subject: ECOM1: ERROR!\r\n";
            $headers .= "To: " . CONTACT_EMAIL . "\r\n";
            $headers .= "MIME-Version: 1.0\r\n";
            $headers .= "Content-Type: text/html; charset=UTF-8\r\n";
            error_log($message, 1, CONTACT_EMAIL, $headers);
            echo '<div class="alert alert-danger>A system error has occured. We apologize for any inconvenience.</div>';
        }
        return true;
    }

    set_error_handler('onError');
    trigger_error('Error test');

3 个答案:

答案 0 :(得分:1)

您获得白页的原因可能是因为PHP设置会阻止任何错误输出。如果您无法更改php.ini设置,则可以尝试使用.htaccess启用错误输出:

php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on
php_flag  log_errors on
php_value error_log  /writable/path/domain/error.log

根据您使用的系统,请注意您可能需要创建文件error.log并使其可写。

如果这不起作用,您可以尝试在PHP中启用错误登录:

error_reporting(-1);
ini_set('display_errors', 'On');

答案 1 :(得分:0)

您可能希望查看可能在try catch中发送失败的代码并在catch上发送电子邮件并显示消息。以下是异常处理的文档,它可能有助于更好地处理这个问题。

http://php.net/manual/en/language.exceptions.php

答案 2 :(得分:0)

请尝试我的代码。它对我有用

<?php
define('LIVE', true);
define('DOMAIN', 'email.com');
define('CONTACT_EMAIL', 'email@gmail.com');

function onError($e_number, $e_message, $e_file, $e_line, $e_vars) {
    $message = "An error occured in script '$e_file' on line $e_line:\n$e_message.\n";
    $message .= "<pre>" . print_r(debug_backtrace(), 1) . "</pre>\n";
    $message .= "<pre>" . print_r($e_vars, 1) . "</pre>\n";

    if(!LIVE) {
        echo '<div class="alert alert-danger">' . nl2br($message) . '</div>';
    } else {
        $headers = "From: errors@" . DOMAIN . "\r\n";
        $headers .= "Subject: ECOM1: ERROR!\r\n";
        $headers .= "To: " . CONTACT_EMAIL . "\r\n";
        $headers .= "MIME-Version: 1.0\r\n";
        $headers .= "Content-Type: text/html; charset=UTF-8\r\n";
        error_log($message, 1, CONTACT_EMAIL, $headers);
        return null;
    }
    return true;
}
$old_error_handler = set_error_handler('onError');

if($old_error_handler == null) {
    echo "<div class='alert alert-danger'>A system error has occured. We apologize for any inconvenience.</div>";
}