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 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 可能會受到某些伺服器配置的限制,因此請確保您的環境允許它。
以下是在 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 函數。
以下是在 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中文網其他相關文章!