首页  >  文章  >  后端开发  >  如何在 PHP 中测试 URL 是否出现 404 错误?

如何在 PHP 中测试 URL 是否出现 404 错误?

PHPz
PHPz原创
2024-08-28 11:33:53482浏览

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 错误

雷雷

在这种方法中,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。

如果在 headers 中没有找到 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) {
      // 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 作为参数。它使用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) {
      // 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 作为参数。它使用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