Chcę pobrać zawartość adresu URL za pomocą PHP, nawet jeśli kod odpowiedzi HTTP to 404. file_get_contents
będzie błąd, a ja nie mogłem znajdź odpowiedź za pomocą Google. Jak mogę to zrobić?Pobierz zawartość adresu URL w PHP, nawet jeśli zwraca 404
Odpowiedz
Domyślnie file_get_contents zwraca tylko zawartość odpowiedzi HTTP 200.
With curl you get the headers and the content separately.
Począwszy od PHP 5.0, można również określić kontekst dla file_get_contents
, dzięki czemu można zrobić bez polegania na url (Patrz odpowiedź Gordona).
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.
Trzeba configure the stream wrapper ignorować błędy:
ignore_errors
boolean
Fetch zawartość nawet kodów stanu awarii. DomyślnieFALSE
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.
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);
interesujące podejście - ale czy możesz powiedzieć, czy masz błąd, czy udaną odpowiedź? – sagi
@sagi kod odpowiedzi będzie w '$ http_reponse_header' – Gordon
+1 Gordon ma rację, zmienna $ http_response_header zawiera dokładnie to, co napisano na puszce, która oczywiście zawiera kod statusu. –