如何在PHP中測試URL是否存在404錯誤?


PHP:PHP(超文字預處理器)是一種廣泛使用的開源伺服器端指令碼語言,專門用於Web開發。它最初由Rasmus Lerdorf於1994年建立,此後發展成為一種強大的語言,被全球數百萬開發人員使用。

PHP主要用於開發動態網頁和Web應用程式。它允許開發人員將PHP程式碼嵌入HTML中,從而可以輕鬆地將伺服器端邏輯與表示層混合使用。PHP指令碼在伺服器上執行,生成的HTML傳送到客戶端的瀏覽器。

為了在PHP中測試URL是否存在404錯誤,您可以採用不同的方法。以下是一些替代方法

  • 使用file_get_contents

  • 使用get_headers和strpos結合stream_context_create

  • 使用curl_exec和CURLOPT_NOBODY

使用file_get_contents在PHP中測試URL是否存在404錯誤

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

在這種方法中,isUrlValid函式將URL作為引數。它建立一個流上下文,並將ignore_errors設定為true,這將抑制file_get_contents在獲取URL內容時可能遇到的任何錯誤。

然後使用file_get_contents函式獲取URL的內容,並將流上下文作為第三個引數傳遞。該函式將內容作為字串返回。

響應頭儲存在$http_response_header變數中,file_get_contents會自動使用最後一次HTTP請求的頭資訊填充該變數。

該函式然後迭代頭資訊,並使用stripos(不區分大小寫的搜尋)檢查其中任何一個是否包含字串“HTTP/1.1 404”。如果找到具有404響應程式碼的頭資訊,則表示URL無效或返回404錯誤,函式返回false。

如果在頭資訊中找不到404響應程式碼,則函式返回true,表示URL有效。

您可以將“http://example.com”替換為您想要測試的URL。請記住,file_get_contents可能會受到某些伺服器配置的限制,因此請確保在您的環境中允許使用它。

使用get_headers和strpos結合stream_context_create

以下是使用get_headers和strpos結合stream_context_create在PHP中測試URL是否存在404錯誤的詳細說明

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

在這種方法中,isUrlValid函式將URL作為引數。它使用stream_context_create建立流上下文,並將ignore_errors選項設定為true。此上下文用於忽略在檢索URL頭時遇到的任何錯誤。

然後呼叫get_headers函式,並使用URL和流上下文作為引數。它返回一個包含URL響應頭的陣列。

該函式檢查頭陣列的第一個元素($headers[0]),並使用strpos在頭資訊中搜索字串“404”。如果找到字串“404”,則表示URL無效或返回404錯誤,函式返回false。

如果在頭資訊中找不到字串“404”,則函式返回true,表示URL有效。

您可以將“http://example.com”替換為您想要測試的URL。確保在您的PHP配置中啟用了get_headers函式和stream_context_create函式。

使用curl_exec和CURLOPT_NOBODY

以下是使用curl_exec和CURLOPT_NOBODY選項在PHP中測試URL是否存在404錯誤的詳細說明

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

在這種方法中,isUrlValid函式將URL作為引數。它使用curl_init和URL初始化cURL會話。

curl_setopt函式用於將CURLOPT_NOBODY選項設定為true,這將傳送HEAD請求而不是GET請求。這樣,只有響應頭會被檢索,而不是整個響應體。

CURLOPT_RETURNTRANSFER選項設定為true,以確保響應作為字串返回。

接下來,呼叫curl_exec執行cURL請求。

請求執行後,使用CURLINFO_HTTP_CODE選項使用curl_getinfo從cURL會話中檢索HTTP響應程式碼。

最後,呼叫curl_close關閉cURL會話。

然後,該函式檢查響應程式碼是否不等於404。如果響應程式碼不等於404,則表示URL有效,函式返回true。否則,它返回false,表示URL無效或返回404錯誤。

您可以將“http://example.com”替換為您想要測試的URL。確保在您的PHP配置中啟用了cURL擴充套件,此方法才能正常工作。

結論

所有三種方法都提供了在PHP中測試URL是否存在404錯誤的方法。它們各有優缺點,選擇取決於您的具體要求和專案中可用的庫。您可以選擇最適合您需求的方法。

更新於:2023年8月17日

2K+ 瀏覽量

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告