Maison  >  Article  >  développement back-end  >  Comment tester une URL pour une erreur 404 en PHP ?

Comment tester une URL pour une erreur 404 en PHP ?

PHPz
PHPzoriginal
2024-08-28 11:33:53415parcourir

How to Test a URL for 404 error in PHP?

PHP : PHP (Hypertext Preprocessor) est un langage de script côté serveur open source largement utilisé, spécialement conçu pour le développement Web. Il a été créé à l'origine par Rasmus Lerdorf en 1994 et est depuis devenu un langage puissant utilisé par des millions de développeurs dans le monde.

PHP est principalement utilisé pour développer des pages Web dynamiques et des applications Web. Il permet aux développeurs d'intégrer du code PHP dans HTML, ce qui facilite le mélange de la logique côté serveur avec la couche de présentation. Les scripts PHP sont exécutés sur le serveur et le HTML résultant est envoyé au navigateur du client.

Pour tester une URL pour une erreur 404 en PHP, vous pouvez adopter différentes approches. Voici quelques méthodes alternatives :

  • Utilisation de file_get_contents

  • Utilisation de get_headers et strpos avec stream_context_create

  • Utilisation de curl_exec avec CURLOPT_NOBODY

Utiliser file_get_contents pour tester une URL pour une erreur 404 en PHP

<?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.";
   }
?>

Dans cette approche, la fonction isUrlValid prend une URL comme paramètre. Il crée un contexte de flux avec ignore_errors défini sur true, ce qui supprime toutes les erreurs que file_get_contents peut rencontrer lors de la récupération du contenu de l'URL.

La fonction file_get_contents est ensuite utilisée pour récupérer le contenu de l'URL, en passant le contexte du flux comme troisième argument. La fonction renvoie le contenu sous forme de chaîne.

Les en-têtes de réponse sont stockés dans la variable $http_response_header, qui est automatiquement renseignée par file_get_contents avec les en-têtes de la dernière requête HTTP.

La fonction parcourt ensuite les en-têtes et vérifie si l'un d'entre eux contient la chaîne "HTTP/1.1 404" à l'aide de stripos (recherche insensible à la casse). Si un en-tête avec un code de réponse 404 est trouvé, cela signifie que l'URL n'est pas valide ou renvoie une erreur 404, et la fonction renvoie false.

Si aucun code de réponse 404 n'est trouvé dans les en-têtes, la fonction renvoie true, indiquant que l'URL est valide.

Vous pouvez remplacer "http://example.com" par l'URL que vous souhaitez tester. Gardez à l'esprit que file_get_contents peut être restreint par certaines configurations de serveur, alors assurez-vous qu'il est autorisé dans votre environnement.

Utilisation de get_headers et strpos avec stream_context_create

Voici une explication détaillée de l'utilisation de get_headers et strpos avec stream_context_create pour tester une URL pour une erreur 404 en PHP :

<?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.";
   }
?>

Dans cette approche, la fonction isUrlValid prend une URL comme paramètre. Il crée un contexte de flux en utilisant stream_context_create avec l'option ignore_errors définie sur true. Ce contexte est utilisé pour ignorer les erreurs rencontrées lors de la récupération des en-têtes d'URL.

La fonction get_headers est ensuite appelée avec l'URL et le contexte du flux comme paramètres. Il renvoie un tableau contenant les en-têtes de réponse pour l'URL.

La fonction vérifie le premier élément du tableau d'en-têtes ($headers[0]) et utilise strpos pour rechercher la chaîne "404" dans l'en-tête. Si la chaîne « 404 » est trouvée, cela signifie que l'URL n'est pas valide ou renvoie une erreur 404, et la fonction renvoie false.

Si la chaîne "404" n'est pas trouvée dans l'en-tête, la fonction renvoie vrai, indiquant que l'URL est valide.

Vous pouvez remplacer "http://example.com" par l'URL que vous souhaitez tester. Assurez-vous que les fonctions get_headers et stream_context_create sont activées dans votre configuration PHP.

Utilisation de curl_exec avec CURLOPT_NOBODY

Voici une explication détaillée de l'utilisation de curl_exec avec l'option CURLOPT_NOBODY pour tester une URL pour une erreur 404 en 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.";
   }
?>

Dans cette approche, la fonction isUrlValid prend une URL comme paramètre. Il initialise une session cURL en utilisant curl_init avec l'URL.

La fonction curl_setopt est utilisée pour définir l'option CURLOPT_NOBODY sur true, qui envoie une requête HEAD au lieu d'une requête GET. De cette façon, seuls les en-têtes de réponse sont récupérés, et non l’intégralité du corps de la réponse.

L'option CURLOPT_RETURNTRANSFER est définie sur true pour garantir que la réponse est renvoyée sous forme de chaîne.

Ensuite, curl_exec est appelé pour exécuter la requête cURL.

Une fois la requête exécutée, curl_getinfo est utilisé pour récupérer le code de réponse HTTP de la session cURL à l'aide de l'option CURLINFO_HTTP_CODE.

Enfin, curl_close est appelé pour fermer la session cURL.

La fonction vérifie ensuite si le code de réponse n'est pas égal à 404. Si le code de réponse n'est pas 404, cela signifie que l'URL est valide et la fonction renvoie vrai. Sinon, il renvoie false, indiquant que l'URL n'est pas valide ou renvoie une erreur 404.

Vous pouvez remplacer "http://example.com" par l'URL que vous souhaitez tester. Assurez-vous que l'extension cURL est activée dans votre configuration PHP pour que cette approche fonctionne.

Conclusion

Les trois méthodes fournissent des moyens de tester une URL pour une erreur 404 en PHP. Ils ont tous leurs avantages et leurs inconvénients, et le choix dépend de vos besoins spécifiques et des bibliothèques disponibles dans votre projet. Vous pouvez choisir la méthode qui correspond le mieux à vos besoins.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn