Don';t显示php致命错误-它会弄乱我的JSON

Don';t显示php致命错误-它会弄乱我的JSON,php,ajax,json,Php,Ajax,Json,我正在对输出JSON的PHP脚本进行AJAX调用。当PHP显示致命错误时,它会使我漂亮的JSON输出无效 JSON字符串的前缀为↵致命错误:在第80行的/path/to/place/whereErrorOccurrend.php中调用未定义的函数iDontExist()↵ 我已经尝试了我能想到的一切。。。唉,我们到了: error_reporting(0); ini_set('html_errors', false); ini_set('display_errors', false); fu

我正在对输出JSON的PHP脚本进行AJAX调用。当PHP显示致命错误时,它会使我漂亮的JSON输出无效

JSON字符串的前缀为
↵致命错误:在第80行的/path/to/place/whereErrorOccurrend.php中调用未定义的函数iDontExist()↵

我已经尝试了我能想到的一切。。。唉,我们到了:

error_reporting(0);
ini_set('html_errors', false);
ini_set('display_errors', false);


function errorHandler($errno, $errstr, $errfile = '', $errline = 0, $errcontext = array()) {


    global result;

    // do stuff... 

    http_response_code(200);
    $json = json_encode($result);
    echo $json;
    exit;

}

function fatalHandler() {
 $error = error_get_last();
 if($error) errorHandler($error["type"], $error["message"], $error["file"], $error["line"]);
}

set_error_handler("errorHandler");
register_shutdown_function("fatalHandler");
有一点可能有用,也可能没用:AJAX调用是methodpost。PHP
$\u服务器['HTTP\u ORIGIN']
设置为允许对我进行调用

将.htaccess也设置为如下所示

php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value error_reporting 0
更新:
显示错误
被包含的脚本重置。致命错误仍然会导致JSON输出以单个空格作为前缀。目前正在使用
trim()
来摆脱它,这与其说是完全修复,不如说是一种黑客行为。任何建议都会有帮助


感谢您的
phpinfo()
建议。

在编译时发生的错误无法通过在脚本中设置“显示错误”和“错误报告”来捕获。使用
.htaccess
文件:

php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value error_reporting 0

通过在脚本中设置“显示错误”和“错误报告”,无法捕获编译时发生的错误。使用
.htaccess
文件:

php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value error_reporting 0

如果不想显示致命错误,请修复致命错误。这不是重点。。。没有真正的错误。我故意犯了这个错误(因此:iDontExist()),因此如果发生了真正的致命错误,它将在AJAX调用所期望的JSON中输出。不是在它使我的JSON无效的地方。如果你不想显示致命错误,请修复致命错误。这不是重点。。。没有真正的错误。我故意犯了这个错误(因此:iDontExist()),因此如果发生了真正的致命错误,它将在AJAX调用所期望的JSON中输出。不是在它使我的JSON无效的外部。可能您的Web空间没有配置为解释
.htaccess
。不是,我一直使用
.htaccess
。也许PHP是通过cgi运行的,而不是作为apache模块运行的(这意味着您必须编辑PHP.ini).为了完整起见,添加了
php\u值错误\u报告0
。@Siguza,我刚刚编辑了php.ini文件。仍然不走运。可能您的Web空间没有配置为解释
.htaccess
。没有,我一直在使用
.htaccess
。可能PHP是通过cgi运行的,而不是作为apache模块运行的(这意味着您必须编辑PHP.ini)。为了完整起见,添加了
PHP\u值错误报告0
。@Siguza,我刚刚还编辑了php.ini文件。还是不走运。