2010-01-21 4 views
1

잡을 simplexml_load_file :PHP는 나는 다음과 같은 PHP를 사용하고 403

$xml = simplexml_load_file($request_url) or die("url not loading"); 

내가 사용

$status = $xml->Response->Status->code; 

응답의 상태를 확인하려면. 200 모든 것은 괜찮습니다. 계속하십시오.

그러나 403 액세스 거부 오류가 발생하는 경우 사용자 친화적 인 경고를 반환 할 수 있도록 PHP에서 어떻게 catch합니까?

답변

8

simplexml_load_file()에 대한 호출에서 HTTP 응답 코드를 검색하려면 알고있는 유일한 방법은 PHP의 조금 알려진 $http_response_header을 사용하는 것입니다. 이 변수는 HTTP 래퍼를 통해 HTTP 요청을 할 때마다 자동으로 각 응답 헤더가 포함 된 배열로 만들어집니다. 즉, 매번 당신이로 시작하는 URL로 simplexml_load_file() 또는 file_get_contents()를 사용하여 "HTTP : //"는

당신은, 그러나, 귀하의 경우에 print_r()

같은
$xml = @simplexml_load_file($request_url); 
print_r($http_response_header); 

당신을 그 내용을 검사 할 수 있습니다 file_get_contents()을 사용하여 XML을 개별적으로 검색하려는 경우 4xx 응답을 받았는지 테스트하고, 그렇지 않으면 본문을 simplexml_load_string()으로 전달하십시오. 예를 들면 다음과 같습니다.

$response = @file_get_contents($request_url); 
if (preg_match('#^HTTP/... 4..#', $http_response_header[0])) 
{ 
    // received a 4xx response 
} 

$xml = simplexml_load_string($response); 
+0

이 작업은 가능하지만 오류를 포착하고 스크립트가 더 많은 작업을 수행하는 것을 막을 수 있어야합니다. 여전히 기본 경고 메시지가 표시됩니다. 경고 : file_get_contents (http://domain.com) [function.file-get-contents] : 스트림 열기 실패 : HTTP 요청 실패! HTTP/1.0 403 Forbidden 잡기위한 이유는 몇 가지 요청을하고 있으며, 오류가 발생했을 때 오류를 잡아 내고 기본값 대신 사용자에게 경고를주고 싶습니다. – Scoobler

+1

그런 다음 업데이트 된 스 니펫에 나와있는 것처럼 음소거 연산자 @를 사용합니다. http://docs.php.net/manual/en/language.operators.errorcontrol.php –

관련 문제