2009-11-22 92 views
10

有没有说方式普遍告诉PHP重定向到任何致命错误的某个页面?捕捉所有的错误,并重定向到页面用PHP

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

让我们只是为了论证而假装我不想看到错误,并且页面正在被机器人不断编辑和更新,这些机器人每23或51页编辑就会导致错误。

我正在寻找一些可能涉及php.ini文件或htaccess的东西,我可以在网站上做些什么。

+0

当我终于得到它的工作,我张贴我的解决方案在这里:http ://stackoverflow.com/a/19263800/1993494 – relipse 2013-10-09 05:31:28

回答

5

您可以更改的Apache默认的500错误页面与'ErrorDocument'指令:

ErrorDocument 500 /500.html 

这会将500内部服务器错误重定向到500.html。你也可以在那里使用一个PHP页面并邮寄引用页面。

要捕获错误,您可以将这些错误记录到error.log文件中。在你的php.ini文件中使用以下两个指令:

error_log = /var/log/httpd/error_php 
log_errors = On 

不要忘记重新启动Apache。

+4

这不适用于PHP错误。 – Cybot 2013-07-17 07:27:29

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'); 
... 
?> 
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

+0

Ref:http://stackoverflow.com/questions/2171055/register-shutdown-function-registered-function-cannot-include-files-if-terminat 如果您遇到语法分析错误,此代码将不起作用。这些包含会使你的脚本默默地失败,并没有留下太多痕迹。 如果有人对此有任何意见,我是全部耳朵。 – 2010-01-31 16:48:16

+0

这实际上有点接近为我工作的答案。 http://stackoverflow.com/a/19263800/1993494 – relipse 2013-10-09 05:31:06