2
프로젝트를 유지 관리하는 데 PHP 4.X에서 5.2로 호환되어야합니다. 프로젝트가 잘 처리되지 않은 몇 가지 오류가 있습니다.PHP4에서 트리거 된 오류를 올바르게 관리하는 방법
내가 원하는 것은 사용자를 "멋진"오류 페이지로 리디렉션하고 데이터베이스에 오류를 기록하는 것입니다. 사용자, 파일 및 오류 메시지를 추적합니다. 여기에 지금까지 시도했습니다 무엇 :
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()
과 함께 표시되지 않습니까? 이미 프로덕션에 많은 페이지가 있기 때문에 수정할 수는 없습니다.
내 질문은 :
- 오전 내가 잘못 그 일을?
- 리디렉션을 처리하는 더 좋은 방법이 있습니까?
내가 그 일을 더 좋은 방법을 볼 수 없습니다, 당신의 제한을 감안할 때. 당신은 명백히 심령술사가 될 수 없으며 실수 이전에 실패 할 수 있으므로 가능한 한 빨리 실패하는 것이 가장 좋습니다. 다른 옵션은 CSS를 통해 활성화 된 큰 주황색 오류 배너 또는 동일한 종류의 자바 스크립트를 통해 수정 된 페이지 로딩을 완료하는 것입니다. 그러나 페이지가 데이터베이스가 무거울 경우 크게 정의되지 않을 수 있습니다. – SilverbackNet
이러한 오류가 실제로 무엇인지 물어봐도 될까요? 나는 내가 항상 가능한 것은 아니지만 받아 들일 수 있다면 무엇이든 출력하기 전에 중단을 요구하기에 충분히 나쁜 오류를 유발할 수있는 모든 처리를 수행하는 방식으로 코드를 구성하는 것을 선호한다. 잘못된 질문 (어쩌면 질문은 "이 오류가 처음부터 발생하는 것을 어떻게 막을 수 있습니까?"). 위의 방법이 최선의 방법 일 수 있지만 그 앞에서 어느 쪽이든 의견을 제시하기 전에 어떤 오류가 있는지 알고 싶습니다. – DaveRandom
고마워, 나는'meta refresh = 0; url = error.php'에 대해서도 궁금해했다. 그러나 나는 확실하지 않다. –