有没有办法告诉php在任何致命错误上重定向到某个页面?
假设我有一个包含许多不同文件的网站,我想隐藏问题(同时仍然记录它们)并将用户发送到同一个错误页面,无论错误是什么或它们在哪个页面上。
让我们假装为了争论,我不想看到错误,并且机器人会不断地编辑和更新页面,这些机器人会在第23或第51页编辑时导致错误。
我正在寻找可能涉及php.ini文件或htaccess的东西,这些东西我可以在网站范围内进行。
答案 0 :(得分:9)
set_error_handler
- 设置一个 用户定义的错误处理函数
基本的例子:
<?php
function errorHandler($n, $m, $f, $l) {
header('Location: http://example.com/error.php');
}
set_error_handler('errorHandler');
...
?>
答案 1 :(得分:5)
您可以使用'ErrorDocument'指令更改Apache中的默认500错误页面:
ErrorDocument 500 /500.html
这会将500内部服务器错误重定向到500.html。您也可以在那里使用PHP页面并邮寄推荐页面。
要捕获错误,您可以将它们记录到error.log文件中。在php.ini文件中使用以下两个指令:
error_log = /var/log/httpd/error_php
log_errors = On
不要忘记重启Apache。
答案 2 :(得分:5)
首先,更改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将其包含在每个请求中(请参阅auto_prepend_file
@ http://php.net/manual/en/ini.core.php)