3 Stimmen

Ausnahmeverarbeitung mit get_meta_tags() & get_headers()?

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!

6voto

Floern Punkte 32839

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);
    }
}

2voto

Berry Langerak Punkte 17907

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.

`

-2voto

johndodo Punkte 15249

Sie können es zum Schweigen bringen, indem Sie sie so aufrufen:

@get_meta_tags();

Sie können es nicht "fangen" (einfach), aber Sie können die Rückgabewerte überprüfen.

Sie können auch Warnungen deaktivieren oder umleiten, siehe error_reporting() und ini-Direktiven "display_errors" & ähnlich.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X