2

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()一緒にしないのobstart(), ob_flush()ですか?すでに制作中のページがたくさんあり、すべてを変更することはできません。

私の質問は次のとおりです。

  1. 私はそれを間違っていますか?
  2. リダイレクトを処理するより良い方法はありますか?
4

1 に答える 1

0

これは、php 5.2 で致命的なエラーを処理する方法です。

<?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));
    }
}
?>
于 2012-07-01T21:18:22.707 に答える