Есть ли способ сказать, что php перенаправляет на определенную страницу все неустранимые ошибки?
Скажем, у меня есть сайт со множеством разных файлов, и я хочу скрыть проблемы (при их регистрации) и отправить пользователя на ту же страницу ошибок, независимо от того, какая ошибка или на какой странице они находятся.
Позволяет просто притворяться ради аргумента, что я не хочу видеть ошибки, и страницы постоянно редактируются и обновляются роботами, которые вызывают ошибки каждые 23-е или 51-е страницы.
Я ищу что-то, что, возможно, связано с файлом php.ini или htaccess, что-то, что я могу сделать на сайте.
Вы можете изменить страницу ошибок 500 по умолчанию в Apache с помощью директивы 'ErrorDocument':
ErrorDocument 500 /500.html
Это перенаправляет ошибку внутреннего внутреннего сервера 500.html. Вы также можете использовать страницу PHP и отправить ссылку на страницу.
Чтобы поймать ошибки, вы можете зарегистрировать их в файле error.log. Используйте следующие две директивы в файле php.ini:
error_log = /var/log/httpd/error_php log_errors = On
Не забудьте перезапустить Apache.
См. set_error_handler
:
set_error_handler
– устанавливает пользовательскую функцию обработчика ошибок
Пример:
<?php function errorHandler($n, $m, $f, $l) { header('Location: http://example.com/error.php'); } set_error_handler('errorHandler'); ... ?>
Во-первых, измените ваш php.ini для подавления сообщений об ошибках и включения ведения журнала:
display_errors=Off log_errors=On error_log=whatever/path
Напишите обработчик ошибок (в отличие от set_error_handler
, этот тоже улавливает set_error_handler
)
register_shutdown_function('errorHandler'); function errorHandler() { $err = error_get_last(); if($err) include "error_page.php"; // your custom error page }
Поместите этот код в файл и скажите php, чтобы он включал его на каждом requrest (см. auto_prepend_file
@ http://php.net/manual/en/ini.core.php )