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– уведомления пользователей.
Вывод ошибок в браузере
error_reporting(E_ALL); | 
		|
ini_set('display_errors', 'On');  | 
		
PHP
В htaccess
php_value error_reporting "E_ALL" | 
		|
php_flag display_errors On | 
		
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'); | 
		
PHP
Файлы логов также не должны быть доступны из браузера, храните их в закрытой директории с файлом .htaccess:
Order Allow,Deny | 
		|
Deny from all | 
		
htaccess
Или запретить доступ к файлам по расширению .log (заодно и другие системные файлы и исходники):
<FilesMatch ".(htaccess|htpasswd|bak|ini|log|sh|inc|config|psd|fla|ai)$"> | 
		|
Order Allow,Deny | 
		|
Deny from all | 
		|
</FilesMatch> | 
		
htaccess
Отправка ошибок на e-mail
Ошибки можно отправлять на е-mail разработчика, но приведенные методы не работает при критических ошибках.
Первый – register_shutdown_function() регистрирует функцию, которая выполнится при завершении работы скрипта, error_get_last() получает последнюю ошибку.
function error_alert()  | 
		|
{  | 
		|
$error = error_get_last(); | 
		|
if (!empty($error)) { | 
		|
mail('mail@example.com', 'Ошибка на сайте example.com', print_r($error, true));  | 
		|
} | 
		|
} | 
		|
register_shutdown_function('error_alert'); | 
		
PHP
Второй метод использует «пользовательский обработчик ошибок», поэтому в браузер ошибки выводится не будут.
function error_alert($type, $message, $file, $line, $vars) | 
		|
{ | 
		|
$error = array( | 
		|
'type' => $type, | 
		|
'message' => $message, | 
		|
'file' => $file, | 
		|
'line' => $line | 
		|
); | 
		|
error_log(print_r($error, true), 1, 'mail@example.com', 'From: mail@example.com'); | 
		|
} | 
		|
set_error_handler('error_alert'); | 
		
PHP
Пользовательские ошибки
PHP позволяет разработчику самому объявлять ошибки, которые выведутся в браузере или в логе. Для создания ошибки используется функция trigger_error():
trigger_error('Пользовательская ошибка', E_USER_ERROR);
PHP
Результат:
Fatal error: Пользовательская ошибка in /public_html/script.php on line 2
E_USER_ERROR– критическая ошибка,E_USER_WARNING– не критическая,E_USER_NOTICE– сообщения которые не являются ошибками,E_USER_DEPRECATED– сообщения о устаревшем коде.