Heim  >  Artikel  >  Backend-Entwicklung  >  Wie teste ich eine URL auf 404-Fehler in PHP?

Wie teste ich eine URL auf 404-Fehler in PHP?

PHPz
PHPzOriginal
2024-08-28 11:33:53415Durchsuche

How to Test a URL for 404 error in PHP?

PHP: PHP (Hypertext Preprocessor) ist eine weit verbreitete serverseitige Open-Source-Skriptsprache, die speziell für die Webentwicklung entwickelt wurde. Sie wurde ursprünglich 1994 von Rasmus Lerdorf entwickelt und hat sich seitdem zu einer leistungsstarken Sprache entwickelt, die von Millionen Entwicklern weltweit verwendet wird.

PHP wird hauptsächlich zur Entwicklung dynamischer Webseiten und Webanwendungen verwendet. Es ermöglicht Entwicklern, PHP-Code in HTML einzubetten, wodurch es einfach wird, serverseitige Logik mit der Präsentationsebene zu kombinieren. PHP-Skripte werden auf dem Server ausgeführt und der resultierende HTML-Code an den Browser des Clients gesendet.

Um eine URL auf einen 404-Fehler in PHP zu testen, gibt es verschiedene Ansätze, die Sie wählen können. Hier sind einige alternative Methoden:

  • Mit file_get_contents

  • Verwenden von get_headers und strpos mit stream_context_create

  • Verwendung von curl_exec mit CURLOPT_NOBODY

Verwenden Sie file_get_contents, um eine URL auf einen 404-Fehler in PHP zu testen

<?php
   function isUrlValid($url) {
      // Disable error reporting for file_get_contents
      $context = stream_context_create(['http' => ['ignore_errors' => true]]);
      // Fetch the URL content
      $content = file_get_contents($url, false, $context);
      // Get the response headers
      $headers = $http_response_header;
      // Check if the response code contains "404"
      foreach ($headers as $header) {
         if (stripos($header, 'HTTP/1.1 404') !== false) {
            return false; // URL is invalid or returns a 404 error
         }
      }
      return true; // URL is valid
   }
   // Usage
   $url = "http://example.com";
   if (isUrlValid($url)) {
      echo "URL is valid.";
   } else {
      echo "URL is invalid or returns a 404 error.";
   }
?>

Bei diesem Ansatz verwendet die Funktion isUrlValid eine URL als Parameter. Es erstellt einen Stream-Kontext, bei dem „ignore_errors“ auf „true“ gesetzt ist, wodurch alle Fehler unterdrückt werden, die bei „file_get_contents“ beim Abrufen des URL-Inhalts auftreten können.

Die Funktion file_get_contents wird dann verwendet, um den Inhalt der URL abzurufen, wobei der Stream-Kontext als drittes Argument übergeben wird. Die Funktion gibt den Inhalt als String zurück.

Die Antwortheader werden in der Variablen $http_response_header gespeichert, die von file_get_contents automatisch mit den Headern der letzten HTTP-Anfrage gefüllt wird.

Die Funktion durchläuft dann die Header und prüft mithilfe von Stripos (Suche ohne Berücksichtigung der Groß- und Kleinschreibung), ob einer von ihnen die Zeichenfolge „HTTP/1.1 404“ enthält. Wenn ein Header mit einem 404-Antwortcode gefunden wird, bedeutet dies, dass die URL ungültig ist oder einen 404-Fehler zurückgibt, und die Funktion gibt „false“ zurück.

Wenn in den Headern kein 404-Antwortcode gefunden wird, gibt die Funktion „true“ zurück und gibt damit an, dass die URL gültig ist.

Sie können „http://example.com“ durch die URL ersetzen, die Sie testen möchten. Beachten Sie, dass „file_get_contents“ durch bestimmte Serverkonfigurationen eingeschränkt sein kann. Stellen Sie daher sicher, dass es in Ihrer Umgebung zulässig ist.

Verwenden von get_headers und strpos mit stream_context_create

Hier ist eine detaillierte Erklärung der Verwendung von get_headers und strpos mit stream_context_create, um eine URL auf einen 404-Fehler in PHP zu testen:

<?php
   function isUrlValid($url) {
      // Create a stream context with "ignore_errors" set to true
      $context = stream_context_create(['http' => ['ignore_errors' => true]]);
      // Fetch the URL headers
      $headers = get_headers($url, 0, $context);
      // Check if the response code contains "404"
      if (strpos($headers[0], '404') !== false) {
         return false; // URL is invalid or returns a 404 error
      }
      return true; // URL is valid
   }
   // Usage
   $url = "http://example.com";
   if (isUrlValid($url)) {
      echo "URL is valid.";
   } else {
      echo "URL is invalid or returns a 404 error.";
   }
?>

Bei diesem Ansatz verwendet die Funktion isUrlValid eine URL als Parameter. Mithilfe von stream_context_create wird ein Stream-Kontext erstellt, wobei die Option „ignore_errors“ auf „true“ gesetzt ist. Dieser Kontext wird verwendet, um alle Fehler zu ignorieren, die beim Abrufen der URL-Header auftreten.

Die Funktion get_headers wird dann mit der URL und dem Stream-Kontext als Parameter aufgerufen. Es gibt ein Array zurück, das die Antwortheader für die URL enthält.

Die Funktion prüft das erste Element des Header-Arrays ($headers[0]) und verwendet strpos, um im Header nach der Zeichenfolge „404“ zu suchen. Wenn die Zeichenfolge „404“ gefunden wird, bedeutet dies, dass die URL ungültig ist oder einen 404-Fehler zurückgibt und die Funktion „false“ zurückgibt.

Wenn die Zeichenfolge „404“ nicht im Header gefunden wird, gibt die Funktion „true“ zurück und gibt damit an, dass die URL gültig ist.

Sie können „http://example.com“ durch die URL ersetzen, die Sie testen möchten. Stellen Sie sicher, dass die Funktionen get_headers und stream_context_create in Ihrer PHP-Konfiguration aktiviert sind.

Verwendung von curl_exec mit CURLOPT_NOBODY

Hier ist eine detaillierte Erklärung der Verwendung von curl_exec mit der Option CURLOPT_NOBODY zum Testen einer URL auf einen 404-Fehler in PHP:

<?php
   function isUrlValid($url) {
      // Initialize cURL session
      $ch = curl_init($url);

      // Set the CURLOPT_NOBODY option to send a HEAD request
      curl_setopt($ch, CURLOPT_NOBODY, true);

      // Set CURLOPT_RETURNTRANSFER option to receive the response as a string
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

      // Execute the request
      curl_exec($ch);

      // Get the response code
      $responseCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

      // Close cURL session
      curl_close($ch);

      // Check if the response code is 404
      return $responseCode !== 404;
   }

   // Usage
   $url = "http://example.com";
   if (isUrlValid($url)) {
      echo "URL is valid.";
   } else {
      echo "URL is invalid or returns a 404 error.";
   }
?>

Bei diesem Ansatz verwendet die Funktion isUrlValid eine URL als Parameter. Es initialisiert eine cURL-Sitzung mithilfe von „curl_init“ mit der URL.

Mit der Funktion „curl_setopt“ wird die Option „CURLOPT_NOBODY“ auf „true“ gesetzt, wodurch eine HEAD-Anfrage anstelle einer GET-Anfrage gesendet wird. Auf diese Weise werden nur die Antwortheader abgerufen, nicht der gesamte Antworttext.

Die Option CURLOPT_RETURNTRANSFER ist auf true gesetzt, um sicherzustellen, dass die Antwort als Zeichenfolge zurückgegeben wird.

Als nächstes wird curl_exec aufgerufen, um die cURL-Anfrage auszuführen.

Nachdem die Anfrage ausgeführt wurde, wird curl_getinfo verwendet, um den HTTP-Antwortcode aus der cURL-Sitzung mithilfe der Option CURLINFO_HTTP_CODE abzurufen.

Abschließend wird curl_close aufgerufen, um die cURL-Sitzung zu schließen.

Die Funktion prüft dann, ob der Antwortcode nicht 404 ist. Wenn der Antwortcode nicht 404 ist, bedeutet dies, dass die URL gültig ist und die Funktion gibt true zurück. Andernfalls wird „false“ zurückgegeben, was darauf hinweist, dass die URL ungültig ist, oder es wird ein 404-Fehler zurückgegeben.

Sie können „http://example.com“ durch die URL ersetzen, die Sie testen möchten. Stellen Sie sicher, dass Sie die cURL-Erweiterung in Ihrer PHP-Konfiguration aktiviert haben, damit dieser Ansatz funktioniert.

Fazit

Alle drei Methoden bieten Möglichkeiten, eine URL auf einen 404-Fehler in PHP zu testen. Sie alle haben ihre Vor- und Nachteile und die Wahl hängt von Ihren spezifischen Anforderungen und den in Ihrem Projekt verfügbaren Bibliotheken ab. Sie können die Methode wählen, die Ihren Anforderungen am besten entspricht.

Das obige ist der detaillierte Inhalt vonWie teste ich eine URL auf 404-Fehler in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn