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()
ですか?すでに制作中のページがたくさんあり、すべてを変更することはできません。
私の質問は次のとおりです。
- 私はそれを間違っていますか?
- リダイレクトを処理するより良い方法はありますか?