Довольно часто я пытаюсь запустить PHP-скрипт и получаю пустой экран. Сообщение об ошибке отсутствует; просто пустой экран. Причиной могла быть простая синтаксическая ошибка (неправильная скобка, отсутствие точки с запятой), неудачный вызов функции или что-то еще.
Очень сложно понять, что пошло не так. Я обычно комментирую код, помещаю вызовы echo и т. д., пытаясь сузить проблему. Но ведь должен быть более лучший способ?
Есть ли способ заставить PHP выдавать полезные сообщения об ошибках, как это делается в других языках программирования?
Ответ 1
Для синтаксических ошибок вам необходимо включить отображение ошибок в php.ini. По соображениям безопасности они по умолчанию отключены. В документации PHP для получения информации используйте директивы: error_reporting и display_errors, возможно, это поможет. Если вы не можете изменить php.ini, можно добавить следующие строки в файл .htaccess:
php_flag display_errors on
php_value error_reporting 2039
Можно рассмотреть возможность использования значения E_ALL для вашей версии PHP в error_reporting, чтобы получать все ошибки.
Также есть несколько дополнительных вариантов:
Проверить файл журнала ошибок, так как он будет содержать все ошибки (если ведение журнала не было отключено).
Добавление следующих строк поможет вам отладить не синтаксические ошибки:
error_reporting(-1);
ini_set('display_errors', 'On');
Использовать редактор, который проверяет наличие ошибок при вводе кода, например, PhpEd. PhpEd также поставляется с отладчиком, который может предоставить более подробную информацию (отладчик PhpEd очень похож на xdebug и интегрируется непосредственно в редактор).
Ответ 2
Следующие строки разрешают все ошибки:
Ответ 3
Следующий код должен отображать все ошибки:
<?php
// Отображение ошибок
ini_set('display_errors', 'On');
ini_set('html_errors', 0);
// Отчеты об ошибках
error_reporting(-1);
// Обработчик завершения работы
function ShutdownHandler() {
if(@is_array($error = @error_get_last())) {
return(@call_user_func_array('ErrorHandler', $error));
};
return TRUE;
};
register_shutdown_function('ShutdownHandler');
// Обработчик ошибок
function ErrorHandler($type, $message, $file, $line) {
$_ERRORS = Array(
0x0001 => 'E_ERROR',
0x0002 => 'E_WARNING',
0x0004 => 'E_PARSE',
0x0008 => 'E_NOTICE',
0x0010 => 'E_CORE_ERROR',
0x0020 => 'E_CORE_WARNING',
0x0040 => 'E_COMPILE_ERROR',
0x0080 => 'E_COMPILE_WARNING',
0x0100 => 'E_USER_ERROR',
0x0200 => 'E_USER_WARNING',
0x0400 => 'E_USER_NOTICE',
0x0800 => 'E_STRICT',
0x1000 => 'E_RECOVERABLE_ERROR',
0x2000 => 'E_DEPRECATED',
0x4000 => 'E_USER_DEPRECATED'
);
if(!@is_string($name = @array_search($type, @array_flip($_ERRORS)))) {
$name = 'E_UNKNOWN';
};
return(print(@sprintf("%s Ошибка в файле \xBB%s\xAB в строке %d: %s\n", $name, @basename($file), $line, $message)));
};
$old_error_handler = set_error_handler("ErrorHandler");
// далее ваш код
?>
Единственный способ получить пустую страницу с этим кодом - это когда у вас есть ошибка в обработчике завершения работы.
Web