将AJAX错误报告到php脚本

将AJAX错误报告到php脚本,php,jquery,ajax,error-reporting,Php,Jquery,Ajax,Error Reporting,我在应用程序中使用了几个jqueryajax调用,有时在这些AJAX调用过程中会遇到错误,例如500内部服务器错误。为了弄清错误的根源,我登录到服务器并检查错误日志,它向我提供了PHP错误 我正在寻找一种在这些错误发生时获取通知的方法,以及是什么PHP错误导致了错误。至少是一种获得通知的方式,而不必先收到用户的电子邮件,然后再进去查看日志 我查看了本教程,但不确定如何将其集成到AJAX错误中:而且我也不确定这是否会返回PHP错误或仅返回500内部服务器错误 非常感谢您的任何想法、现有服务或解决方

我在应用程序中使用了几个jqueryajax调用,有时在这些AJAX调用过程中会遇到错误,例如500内部服务器错误。为了弄清错误的根源,我登录到服务器并检查错误日志,它向我提供了PHP错误

我正在寻找一种在这些错误发生时获取通知的方法,以及是什么PHP错误导致了错误。至少是一种获得通知的方式,而不必先收到用户的电子邮件,然后再进去查看日志

我查看了本教程,但不确定如何将其集成到AJAX错误中:而且我也不确定这是否会返回PHP错误或仅返回500内部服务器错误

非常感谢您的任何想法、现有服务或解决方案!下面是我的一个AJAX调用示例:

$.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页面上设置错误报告级别,以便不对用户显示错误。我仍然认为尝试/捕获是更好的解决方案