php - 如何正确管理 PHP4 中的触发错误

标签 php mysql error-handling php4

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() 一起使用?因为已经有很多页面在制作中,我无法全部修改。

我的问题是:

  1. 我做错了吗?
  2. 有没有更好的方法来处理 重定向?

最佳答案

这是在 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/

相关文章:

php - 服务器端问题 : PHP Push message to Blackberry

mysql - 如何将此 MySQL SELECT 查询转换为 DELETE 查询?

angular - 在 Angular 自定义错误处理程序中使用服务

php - 在 laravel 5.0 中创建图像缩略图

php - Prestashop blocklayered + 无限滚动问题

mysql - 使用 Ubuntu Server 14.04 从我的 PC 远程访问安装在 VPS 上的 MySQL 5.6

c# - 使用自定义错误页面维护错误信息

error-handling - 如何使错误链错误与失败错误兼容?

php - 我想检查如何通过排除空格、数字和符号来避免重复标题?

mysql - 对几个查询的结果求和,然后在 SQL 中找到前 5 个