我试图向自己发送一封包含详细错误信息的电子邮件,然后向用户显示一般错误消息。不幸的是,每次使用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');
答案 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上发送电子邮件并显示消息。以下是异常处理的文档,它可能有助于更好地处理这个问题。
答案 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>";
}