2011-07-16 9 views

Odpowiedz

2

Zamiast tego należy użyć cURL. Pozwala to na znacznie większą kontrolę i umożliwia odczytanie wszelkich pobranych treści i kodu statusu.

61

Trzeba configure the stream wrapper ignorować błędy:

ignore_errorsboolean Fetch zawartość nawet kodów stanu awarii. Domyślnie FALSE

Innymi słowy, czy

echo file_get_contents(
    'http://stackoverflow.com/foo/bar', 
    false, 
    stream_context_create(
     array(
      'http' => array(
       'ignore_errors' => true 
      ) 
     ) 
    ) 
); 

a dostaniesz stronę 404.

Jeśli chcesz to za zachowanie domyślne dla strumieni HTTP, należy

stream_context_set_default(
    array('http' => array(
     'ignore_errors' => true) 
    ) 
); 

żadnych połączeń przy użyciu otoki strumienia HTTP użyje tych ustawień, a następnie, na przykład można po prostu zrobić

echo file_get_contents('http://stackoverflow.com/foo/bar'); 

Jeśli chcesz także uzyskać response header, zrób

print_r($http_response_header); 

po wywołaniu. Zmienna jest (ponownie) zapełniana po każdym wywołaniu za pomocą owijki strumienia http.

+0

interesujące podejście - ale czy możesz powiedzieć, czy masz błąd, czy udaną odpowiedź? – sagi

+0

@sagi kod odpowiedzi będzie w '$ http_reponse_header' – Gordon

+1

+1 Gordon ma rację, zmienna $ http_response_header zawiera dokładnie to, co napisano na puszce, która oczywiście zawiera kod statusu. –

0

Etap 1: sprawdzić kod zwrotny: $content = file_get_contents("websitelink"); if($content === FALSE) { // handle error here... }

Krok 2: tłumienia ostrzeżenie umieszczając operatorowi kontroli błędów (np @) przed wywołaniem file_get_contents(): $content = @file_get_contents($site);