m 维护一个项目,该项目必须从 PHP 4.X 兼容到 5.2。该项目有几个错误没有得到很好的处理。
我想做的是将用户重定向到一个“不错”的错误页面,并将错误记录在数据库中。为了跟踪用户、文件和错误消息。到目前为止,这是我尝试过的:
set_error_handler("myErrorHandler");
/**
*My function to handle errors
*/
function myErrorHandler( $errno , $errstr , $errfile="nofile" , $errline=0 , $errcontextArray=NULL ){
session_start();
if (!isset($errno)|!isset($errstr)) {
exit(0);
}
if (!mysql_ping()) {
require '../Connection/databaseinfo.php';
}
$id_user = $_SESSION['ident'];
$errstr = GetSQLValueString($errstr, "text");
$errfile = GetSQLValueString($errfile, "text");
$errline = GetSQLValueString($errline, "int");
$sql = "insert into error_history
(id_user, message, file, line)
values ($id_user, $errstr, $errfile, $errline)";
mysql_query($sql) or die (mysql_error());
// header("location:error.php"); ---> I can't (see comment below)
echo "<script type='text/javascript'> window.location.href='error.php';</script>";//Redirection dégueulasse //TODO: trouver mieux
return true;
}
为什么不用 header()
?因为可以在页面中的任何位置触发错误,因此已经发送了 header 。
为什么 header()
不与 obstart()、ob_flush()
一起使用?因为已经有很多页面在制作中,我无法全部修改。
我的问题是:
- 我做错了吗?
- 有没有更好的方法来处理 重定向?
最佳答案
这是在 php 5.2 中处理 fatal error 的方法:
<?php
register_shutdown_function('shutdownFunction');
function shutDownFunction() {
$error = error_get_last();
if($error['type'] >= 1){
mail('cc@cc.de', 'Error: XY',"Error msg:"."Server Error:".implode("\n", $error));
}
}
?>
关于php - 如何正确管理 PHP4 中的触发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11258989/