将AJAX错误报告到php脚本
我在应用程序中使用了几个jqueryajax调用,有时在这些AJAX调用过程中会遇到错误,例如500内部服务器错误。为了弄清错误的根源,我登录到服务器并检查错误日志,它向我提供了PHP错误 我正在寻找一种在这些错误发生时获取通知的方法,以及是什么PHP错误导致了错误。至少是一种获得通知的方式,而不必先收到用户的电子邮件,然后再进去查看日志 我查看了本教程,但不确定如何将其集成到AJAX错误中:而且我也不确定这是否会返回PHP错误或仅返回500内部服务器错误 非常感谢您的任何想法、现有服务或解决方案!下面是我的一个AJAX调用示例:将AJAX错误报告到php脚本,php,jquery,ajax,error-reporting,Php,Jquery,Ajax,Error Reporting,我在应用程序中使用了几个jqueryajax调用,有时在这些AJAX调用过程中会遇到错误,例如500内部服务器错误。为了弄清错误的根源,我登录到服务器并检查错误日志,它向我提供了PHP错误 我正在寻找一种在这些错误发生时获取通知的方法,以及是什么PHP错误导致了错误。至少是一种获得通知的方式,而不必先收到用户的电子邮件,然后再进去查看日志 我查看了本教程,但不确定如何将其集成到AJAX错误中:而且我也不确定这是否会返回PHP错误或仅返回500内部服务器错误 非常感谢您的任何想法、现有服务或解决方
$.ajax ({
url: report,
cache: false,
success: function(html) {
// continue with event
},
error: function(x, status, error) {
// report error here
},
async:true
});
编辑:
下面是更新的AJAX调用,它向php错误通知发出AJAX请求
$.ajax ({
url: report,
success: function(html) {
// success
},
error: function(x, status, error) {
$.ajax ({
url: 'admin/error_notification.php',
type: "POST",
data:{
error: error
}
});
},
async:true
});
但是,这非常有效,只报告发生了内部服务器错误,而不是导致AJAX错误的实际PHP错误。以下是PHP错误处理文件:
$error = $_POST['error'];
$sysadmin_message = $error;
$sysadmin_to = 'email@example.com';
$sysadmin_subject = 'Error Notification';
$sysadmin_headers = "From: Site <accounts@example.com>\r\n";
$sysadmin_headers .= "MIME-Version: 1.0\r\n";
$sysadmin_headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
mail($sysadmin_to, $sysadmin_subject, $sysadmin_message, $sysadmin_headers);
$error=$\u POST['error'];
$sysadmin_message=$error;
$sysadmin\u至email@example.com';
$sysadmin_subject='Error Notification';
$sysadmin\u headers=“From:Site\r\n”;
$sysadmin_headers.=“MIME版本:1.0\r\n”;
$sysadmin_headers.=“内容类型:text/html;字符集=ISO-8859-1\r\n”;
邮件($sysadmin\u to、$sysadmin\u subject、$sysadmin\u message、$sysadmin\u headers);
显然,这只会发送报告的AJAX错误,但是如何将实际的PHP错误添加到通知中?您需要在error函数中进行第二次AJAX调用,以向PHP报告错误 从前端开始:
$.ajax ({
url: report,
cache: false,
success: function(html) {
// continue with event
},
error: function(x, status, error) {
// report error here
$.ajax ({
url: errorlogUrl,
data:{
message:'ajax error from [report]'
}
});
},
async:true
});
或者在后端使用try/catch语句:
try{
// code that might throw an error
}
catch(Exception $e){
// send notification based on the content of $e
}
这很好,但是,如果我将其设置为发送错误,它只报告发生了内部服务器错误。然后我仍然需要检查日志文件中的实际PHP错误。如果服务器返回HTTP 500,那么在AJAX错误时是否仍然可以获取PHP错误。您可以将php.ini文件更改为displayErrors=On,它将显示实际错误。不过,只能在开发环境中这样做,这对于生产来说不是一个好主意。为什么不直接使用php的错误日志呢?抱歉,请重新阅读您的问题。您还可以尝试使用try-catch块捕获php中的致命错误,然后在catch中向自己发送通知。更新了php.ini文件中的my answeris display_errors设置为“开”?如果不是,您可能希望将其设置为“开”,然后在每个非ajax页面上设置错误报告级别,以便不对用户显示错误。我仍然认为尝试/捕获是更好的解决方案