首頁  >  文章  >  後端開發  >  如何在 PHP 中測試 URL 是否出現 404 錯誤?

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

PHPz
PHPz原創
2024-08-28 11:33:53481瀏覽

How to Test a URL for 404 error in PHP?

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一起使用

在 PHP 中使用 file_get_contents 測試 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結合

以下是在 PHP 中使用 get_headers 和 strpos 與stream_context_create 測試 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 標頭時遇到的任何錯誤。

然後使用 URL 和流上下文作為參數呼叫 get_headers 函數。它會傳回一個包含 URL 回應標頭的陣列。

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

如果在 header 中沒有找到字串“404”,函數會傳回 true,表示 URL 有效。

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

將curl_exec與CURLOPT_NOBODY一起使用

以下是在 PHP 中使用帶有 CURLOPT_NOBODY 選項的 curl_exec 來測試 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請求。

執行請求後,curl_getinfo 用於使用 CURLINFO_HTTP_CODE 選項從 cURL 會話中檢索 HTTP 回應代碼。

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

函數然後檢查回應碼是否不等於 404。如果回應代碼不是 404,則表示 URL 有效,函數傳回 true。否則,傳回 false,表示該 URL 無效或傳回 404 錯誤。

您可以將「http://example.com」替換為您要測試的URL。確保您在 PHP 配置中啟用了 cURL 擴展,才能使此方法發揮作用。

結論

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

以上是如何在 PHP 中測試 URL 是否出現 404 錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn