2011-07-28 3 views
2

Tumbrl API를 사용하여 내 홈페이지에 몇 개의 게시물을로드하고 있습니다.simplexml_load_file에 대한 오류 검사를 수행하는 방법은 무엇입니까?

$xml = simplexml_load_file($request_url); 

때때로이로드 내가 대신이 출력을 얻을 미세하지만 다른 시간 :

Warning: simplexml_load_file(http://mysite.tumblr.com/api/read?type=post&start=0&num=10&type=photo) [function.simplexml-load-file]: failed to open stream: HTTP request failed! HTTP/1.1 503 Service Temporarily Unavailable in mysite.com/html/index.php on line 624 

Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "http://mysite.tumblr.com/api/read?type=post&start=0&num=10&type=photo" in mysite.com/html/index.php on line 624 

가 에러 체크의 어떤 종류 페이지에서 경고를 표시하지 않도록 구현해야을 나는 다음 호출을 ?

답변

5

이 함수의 실패를 확인하는 방법은 false 반환 값을 확인하는 것입니다.

simplexml_load_file 또한 실패 할 경우 구식 PHP 경고를 발생시킵니다. 당신이 경고가 설정되어 있지만 어떤 이유로 경고를 억제하려면 @을 사용할 수 그래서

, 당신은

$element = @simplexml_load_file($file); 
if ($element === false) { 
    // error! 
} 

참고 사용할 수있는 경고가 발생 가능한 문제의 지표가 될 수 있음 . 파일을 읽는 중 해당 파일이 있는지 확실하지 않은 경우 보안 문제가 발생하지 않도록주의하십시오. 예를 들어 사용자가 시스템의 모든 파일을 읽을 수 있습니까?

주의해야으로 업데이트 월 2014

, 내가 오류를 억제하기 위해 "@"연산자를 사용하는 것은 일반적으로 나쁜 생각입니다 추가해야합니다. 대안이있는 경우이를 사용해야합니다. 대안이 없다면, "@"로 덮여있는 부분을 가장 작은 부분으로 제한해야합니다.

"@"는 코드에서 error_reporting()을 설정하는 것과 같은 방식으로 전역 적으로 설정 한 오류 처리 설정보다 우선합니다. 예를 들어, PHP를 표시하지 않고 오류를 기록하도록 설정 한 경우이 오류는 기록되지 않습니다. 또한 잘못 알고 싶은 오류를 포함하여 "@"로 의도 한 것보다 실수로 많은 오류를 억제하는 것도 쉽습니다. 예를 들어, @myfunction($something)을 사용하면 해당 함수 내에서 또는 호출을 차례로 호출하는 함수에서 발생하는 오류를 억제 할 수 있습니다. 따라서 이것은 해당 운영자에 대해 염두에 두어야 할 것입니다.

이 경우 HTTP를 통해 원격 파일을 검사하기 때문에 "@"을 사용하는 일반적인 방법이 이상적이지 않습니다. 예 : 로컬 파일에 대해 당신이 피하기 위해 다음을 사용할 수 있습니다 "@"

if (file_exists($file)) { 
    $element = simplexml_load_file($file); 
} 
else { 
    // error! 
} 

그러나 귀하의 경우는 HTTP를 통해 원격 파일에 대한 호출이기 때문에, 위에서 언급 한 두 가지 요청 결과와 것이다 첫 번째 요청하는 경우 두 번째 오류가 발생하면 오류가 발생합니다. 귀하의 경우에는 특별히 "@"연산자가 simplexml_load_file()으로 제한되어 있습니다.

+0

"@"기호는 여기에 나를 위해 그것을했다! 감사!!! – anna

+0

그게 나를 위해 일했습니다. 감사! –

+0

오류 메시지를 처리하기 위해'@'기호를 사용하는 ** NOT **에 대한 환상적인 설명. 'file_exists ($ file)'는 완벽하게 작동합니다. 감사. –

관련 문제