2012-06-29 4 views
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()과 함께 표시되지 않습니까? 이미 프로덕션에 많은 페이지가 있기 때문에 수정할 수는 없습니다.

내 질문은 :

  1. 오전 내가 잘못 그 일을?
  2. 리디렉션을 처리하는 더 좋은 방법이 있습니까?
+0

내가 그 일을 더 좋은 방법을 볼 수 없습니다, 당신의 제한을 감안할 때. 당신은 명백히 심령술사가 될 수 없으며 실수 이전에 실패 할 수 있으므로 가능한 한 빨리 실패하는 것이 가장 좋습니다. 다른 옵션은 CSS를 통해 활성화 된 큰 주황색 오류 배너 또는 동일한 종류의 자바 스크립트를 통해 수정 된 페이지 로딩을 완료하는 것입니다. 그러나 페이지가 데이터베이스가 무거울 경우 크게 정의되지 않을 수 있습니다. – SilverbackNet

+0

이러한 오류가 실제로 무엇인지 물어봐도 될까요? 나는 내가 항상 가능한 것은 아니지만 받아 들일 수 있다면 무엇이든 출력하기 전에 중단을 요구하기에 충분히 나쁜 오류를 유발할 수있는 모든 처리를 수행하는 방식으로 코드를 구성하는 것을 선호한다. 잘못된 질문 (어쩌면 질문은 "이 오류가 처음부터 발생하는 것을 어떻게 막을 수 있습니까?"). 위의 방법이 최선의 방법 일 수 있지만 그 앞에서 어느 쪽이든 의견을 제시하기 전에 어떤 오류가 있는지 알고 싶습니다. – DaveRandom

+0

고마워, 나는'meta refresh = 0; url = error.php'에 대해서도 궁금해했다. 그러나 나는 확실하지 않다. –

답변

0

이 PHP 5.2에서 치명적인 오류를 처리하는 방법은 다음과 같습니다

<?php 
register_shutdown_function('shutdownFunction'); 
function shutDownFunction() { 
    $error = error_get_last(); 
    if($error['type'] >= 1){ 
     mail('[email protected]', 'Error: XY',"Error msg:"."Server Error:".implode("\n", $error)); 
    } 
} 
?> 
관련 문제