2009-08-31 2 views
1

기본적으로 여러 개의 XML 파일을 연결하는 데 사용되는 페이지가 있습니다. 페이지를 함께 바인딩하는 접착제 역할을합니다. 사용자가 액세스 할 수 있기 때문에 조합되는 XML 파일이 제대로 형성되지 않을 가능성이 적습니다.PHP - 표현식 집합에서 오류/경고가 발생하지 않는 경우 수행합니다.

특정 코드 집합에 경고/오류가 발생하면 기본적으로 라이브 파일을 다시 작성하려고합니다.

지금까지 내가 가지고 :

try { 
    $first = simplexml_load_file('file.xml'); 
} catch (Exception $e) { 
    $write = false; 
} 

if (!$write) { 
// write to live file. 
} 

이 분명히 오류 예외지만을 잡는다 때때로 함수 호출이 반환 할 수 있습니다 경고가 아니라 내가 기본적으로 쓰기 전용, 오류를 잡기 위해 사용할 수있는 자체 오류, 경우 경고없이 및 try 블록에 오류가 발생 했습니까? 경고의

예가 발생되고 :

Warning: simplexml_load_file() parser error : Start tag expected, '<' 

답변

4

실패한 읽기의 다른 "증상"을 찾으십시오. simplexml_load_file 수동 입력에서 :

돌아

는 XML 문서 내에있는 데이터를 포함하는 속성을 가진 클래스 SimpleXMLElement의 객체를 반환 값. 오류가 발생하면 FALSE를 반환합니다.

그래서, 다음과 같이 사용 :

$first = simplexml_load_file('file.xml'); 

if ($first == false) { 
    echo "File couldn't be loaded"; 
    exit(); // abort normal program execution, redirect or what have you 
} 

// continue as normal 

거의 모든 기능은 오류의 경우 false의 일종을 반환합니다. 매우 특별한 경우를 제외하고 수동 "오류 파싱"을 사용하면 안됩니다. 이것은 그들 중 하나가 아닙니다.

+0

네,하지만 인스턴스가 많으면 지루해집니다. 모든 검사를 하나의 표현식으로 결합하는 경우에도 마찬가지입니다. 나는 성능 문제에 대해서도 걱정하지 않는다. –

+0

+1 좋은 답변입니다. –

+1

'if ($ var == false)'가 예외 처리 나 출력 버퍼링 및 문자열 구문 분석보다 지루한가요? 함수가 유용하게'false'를 반환한다면 이것은 가장 간단한 방법입니다. 이 작업을 여러 번 수행하는 경우 모든 결과를 배열로 모으고 배열에'false' 항목이 한 번 끝에 있는지 확인하십시오. 또는 루프에서 수행하십시오. – deceze

3

몇 가지가이 상황에 마음에 온다. 당신은 항상 경고 (프로덕션 서버에없는 좋은 생각)을 활성화한다면 텍스트가

ob_start(); 
... //code 
$str = ob_get_contents(); 
if (! empty($string)) 
{ 
    // a warning was thrown. 
} 

더 좋은 방법은 경고를 define an error handler로하고을 보내이 있다면 당신은 항상 확인하기 위해 출력 버퍼링 기능을 사용할 수 있습니다

set_error_handler("my_warning_handler", E_WARNING); 

function my_warning_handler($errno, $errstr) { 
    // do something 
} 
1

오류 처리기를 설정하고 거기에서 예외를 발생시킵니다. 평소와 같이 잡으십시오.