PHP предлагает гибкие настройки вывода ошибок, среди которых функия error_reporting($level)
– задает, какие ошибки PHP попадут в отчет, могут быть значения:
E_ALL
– все ошибки,E_ERROR
– критические ошибки,E_WARNING
– предупреждения,E_PARSE
– ошибки синтаксиса,E_NOTICE
– замечания,E_CORE_ERROR
– ошибки обработчика,E_CORE_WARNING
– предупреждения обработчика,E_COMPILE_ERROR
– ошибки компилятора,E_COMPILE_WARNING
– предупреждения компилятора,E_USER_ERROR
– ошибки пользователей,E_USER_WARNING
– предупреждения пользователей,E_USER_NOTICE
– уведомления пользователей.
В htaccess
На рабочем проекте вывод ошибок лучше сделать только у авторизированного пользователя или в крайнем случаи по IP.
error_reporting(E_ALL);
ini_set('display_errors', 'Off');
ini_set('log_errors', 'On');
ini_set('error_log', $_SERVER['DOCUMENT_ROOT'] . '/logs/php-errors.log');
Файлы логов также не должны быть доступны из браузера, храните их в закрытой директории с файлом .htaccess:
Или запретить доступ к файлам по расширению .log (заодно и другие системные файлы и исходники):
<FilesMatch ".(htaccess|htpasswd|bak|ini|log|sh|inc|config|psd|fla|ai)$">
Order Allow,Deny
Deny from all
</FilesMatch>
Ошибки можно отправлять на е-mail разработчика, но приведенные методы не работает при критических ошибках.
Первый – register_shutdown_function()
регистрирует функцию, которая выполнится при завершении работы скрипта, error_get_last()
получает последнюю ошибку.
register_shutdown_function('error_alert');
function error_alert()
{
$error = error_get_last();
if (!empty($error)) {
mail('mail@example.com', 'Ошибка на сайте example.com', print_r($error, true));
}
}
Стоит учесть что оператор управления ошибками (знак @) работать в данном случаи не будет и письмо будет отправляться при каждой ошибке.
Второй метод использует «пользовательский обработчик ошибок», поэтому в браузер ошибки выводится не будут.
PHP позволяет разработчику самому объявлять ошибки, которые выведутся в браузере или в логе. Для создания ошибки используется функция trigger_error()
:
Результат:
Fatal error: Пользовательская ошибка in /public_html/script.php on line 2
E_USER_ERROR
– критическая ошибка,E_USER_WARNING
– не критическая,E_USER_NOTICE
– сообщения которые не являются ошибками,E_USER_DEPRECATED
– сообщения о устаревшем коде.
Еще есть php файл ini. Вывод ошибок может блокировать файл php.ini. Там есть параметры, которые должны быть такие:
error_reporting = E_ALL, display_errors = On, display_startup_errors = On.
Если не знаешь где файл php.ini? Используйте php функцию phpinfo(). Откроется таблица. Там есть путь до php.ini. Найдите параметр “Loaded Configuration File” и “Configuration File (php.ini) Path”. Вот здесь я нашел об этом. http://profi.spage.me/php/show-php-file-errors-enable-php-error-display