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');
В htaccess
php_value error_reporting "E_ALL"
php_flag display_errors On
На рабочем проекте вывод ошибок лучше сделать только у авторизированного пользователя или в крайнем случаи по 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:
Order Allow,Deny
Deny from all
Или запретить доступ к файлам по расширению .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));
}
}
Стоит учесть что оператор управления ошибками (знак @) работать в данном случаи не будет и письмо будет отправляться при каждой ошибке.
Второй метод использует «пользовательский обработчик ошибок», поэтому в браузер ошибки выводится не будут.
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 позволяет разработчику самому объявлять ошибки, которые выведутся в браузере или в логе. Для создания ошибки используется функция trigger_error():
trigger_error('Пользовательская ошибка', E_USER_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