2015-08-18 2 views
1

Я делаю вызов AJAX для PHP-скрипта , выводящего JSON. Когда PHP отображает фатальные ошибки, это делает недействительным мой прекрасный вывод JSON.Не показывать фатальные ошибки php - это бесполезно с моим JSON

JSON строка становится префиксом ↵Fatal error: Call to undefined function iDontExist() in /path/to/place/whereErrorOccured.php on line 80↵

Я пробовал все, что я могу возможно думать о ... увы, здесь мы:

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 - это метод POST. PHP $_SERVER['HTTP_ORIGIN'] настроен так, чтобы разрешить мне вызов.

ли .htaccess установить следующим образом, а

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

UPDATE:display_errors был быть сброшен включаемого сценария. Неустранимые ошибки по-прежнему приводят к тому, что вывод JSON имеет префикс с одним пробелом. В настоящее время используется trim(), чтобы избавиться от него, что является скорее взломом, чем полным исправлением. Любые предложения будут полезны.

С благодарностью @AzizSaleh за предложение phpinfo().

+6

Если вы не хотите Фатальная ошибка будет отображаться, исправить фатальную ошибку. –

+0

Не в этом дело ... Нет ошибки REAL. Я сделал ошибку специально (отсюда: iDontExist()), поэтому, если произошла настоящая фатальная ошибка, она будет выводиться внутри моего JSON, ожидаемого вызовом AJAX. Не снаружи, где он аннулировал мой JSON. –

ответ

0

Ошибки, которые происходят во время компиляции, не могут быть решены установкой display_errors и error_reporting в скрипте. Используйте файл .htaccess для этого:

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

Пробовал тоже. Все еще отображает ошибку ... –

+0

Возможно, ваше веб-пространство не настроено на интерпретацию '.htaccess'. – syck

+0

Нет, я все время использую '.htaccess'. –