如何在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+ 浏览量

启动您的职业生涯

完成课程获得认证

开始学习
广告