捕获所有错误并使用php重定向到页面

时间:2009-11-22 11:20:47

标签: php error-handling

有没有办法告诉php在任何致命错误上重定向到某个页面?

假设我有一个包含许多不同文件的网站,我想隐藏问题(同时仍然记录它们)并将用户发送到同一个错误页面,无论错误是什么或它们在哪个页面上。

让我们假装为了争论,我不想看到错误,并且机器人会不断地编辑和更新页面,这些机器人会在第23或第51页编辑时导致错误。

我正在寻找可能涉及php.ini文件或htaccess的东西,这些东西我可以在网站范围内进行。

3 个答案:

答案 0 :(得分:9)

请参阅set_error_handler

  

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