Ловить все ошибки и перенаправлять на страницу с помощью php
Можно ли сказать, что универсальный метод php перенаправляет на определенную страницу какие-либо фатальные ошибки?
Скажем, у меня есть сайт со многими разными файлами, и я хочу скрыть проблемы (при их регистрации) и отправить пользователя на ту же страницу ошибок, независимо от того, что такое ошибка или на какой странице они находятся.
Позволяет просто притворяться ради аргумента, что я не хочу видеть ошибки, и страницы постоянно редактируются и обновляются роботами, которые вызывают ошибки, каждые 23-е или 51-е страницы редактируют.
Im ищет что-то, что, возможно, связано с файлом php.ini или htaccess, что-то, что я могу сделать на сайте.
Ответы
Ответ 1
Вы можете изменить страницу ошибок 500 по умолчанию в Apache с помощью директивы 'ErrorDocument':
ErrorDocument 500 /500.html
Это перенаправляет ошибку 500 Internal Server на 500.html. Вы также можете использовать страницу PHP и отправить ссылку на страницу.
Чтобы уловить ошибки, вы можете записать их в файл error.log. Используйте следующие две директивы в файле php.ini:
error_log = /var/log/httpd/error_php
log_errors = On
Не забудьте перезапустить Apache.
Ответ 2
См. set_error_handler
:
set_error_handler
- Устанавливает пользовательская функция обработчика ошибок
Простейший пример:
<?php
function errorHandler($n, $m, $f, $l) {
header('Location: http://example.com/error.php');
}
set_error_handler('errorHandler');
...
?>
Ответ 3
Сначала измените ваш php.ini, чтобы подавить сообщения об ошибках и включить ведение журнала:
display_errors=Off
log_errors=On
error_log=whatever/path
Записать обработчик ошибок (в отличие от 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)