In PHP verwende ich get_meta_tags()
und get_headers()
. Wenn jedoch ein 404-Fehler auftritt, geben diese beiden Funktionen eine Warnung aus. Gibt es eine Möglichkeit, diese zu erfassen? Vielen Dank!
Antworten
Zu viele Anzeigen?get_headers
wirft keine Warnung/Fehler bei 404, aber get_meta_tags
tut es.
Daher können Sie die Header-Antwort überprüfen und etwas tun, wenn sie nicht OK ist:
$url = 'http://www.example.com/';
$headers = array();
$metatags = array();
$validhost = filter_var(gethostbyname(parse_url($url,PHP_URL_HOST)), FILTER_VALIDATE_IP);
if($validhost){
// nur Header abrufen, wenn Domain gültig ist
$headers = get_headers($url, 1);
if(substr($headers[0], 9, 3) == '200'){
// Metatags nur lesen, wenn Statuscode OK ist
$metatags = get_meta_tags($url);
}
}
Diese beiden Funktionen werfen eine Warnung. Gibt es eine Möglichkeit, diese abzufangen?
Du solltest dich nicht darum kümmern. Natürlich ist eine E_WARNING-Meldung bei einem Fehlschlag während der Entwicklung in Ordnung; es ist sogar erwünscht, da du sofort siehst, dass etwas schief gelaufen ist. Ich kann mir jedoch vorstellen, dass du nicht möchtest, dass deine Kunden diese Warnungen sehen, aber du solltest das nicht für jede Funktion tun, sondern global: Schalte display_errors in der php.ini in der Produktionsumgebung aus, und deine Kunden werden solche Nachrichten nie sehen.
Wenn du jedoch nicht möchtest, dass sie in den Fehlerprotokollen erscheinen, musst du überprüfen, ob die Seite existiert, bevor du versuchst, die Meta-Tags abzurufen. get_headers scheint keine Warnung zu werfen, stattdessen gibt es ein Array zurück, dessen erstes Element den String "HTTP/1.1 404 Not Found" enthält. Du kannst das zu deinem Vorteil nutzen:
`
Wenn du diesen Code verwendest, beachte, dass 200 nicht die einzige Meldung eines erfolgreichen Requests ist; 304 Not Modified - zum Beispiel - ist genauso gültig.
`