【问题标题】:How to know if a local URI/URL exists?如何知道本地 URI/URL 是否存在?
【发布时间】:2012-03-09 12:42:42
【问题描述】:

假设我的网址是 mysite.com/myuri。全世界都知道有很多方法可以知道我的网站 mysite.com 上是否存在本地 uri myuri

  1. 最简单最快的方法是:
    $uri_exists = file_exists($_SERVER['DOCUMENT_ROOT']."/myuri")
  2. 下一个方法是:
    $headers = @get_headers("http://mysite.com/myuri");
    $uri_exists = ($headers[0] == "HTTP/1.1 404 Not Found");
  3. 另一种(比上一种快一点)方法是:
    $curl = curl_init('http://mysite.com/myuri');
    curl_setopt($curl, CURLOPT_NOBODY, true);
    curl_exec($curl);
    $info = curl_getinfo($curl);
    $uri_exists = ($info['http_code'] == 200);
    @ 987654329@

这些是我知道的方法。第一种方法精确检查文件是否存在,而不是 URI 是否存在。如果使用mod_rewrite,则此方法非常不准确。

接下来的两种方法是准确的(即使使用mod_rewrite)但速度很慢,因为它们对自己的站点执行远程 GET 请求。它们也是低效的,因为只要知道 URI 是否存在,mysite.com 上的脚本就会不必要地执行它们自己。此外,它们会给 mysql 服务器带来不必要的流量。

谈到我要问的问题,我希望 mysite.com 上的 PHP 脚本使用更有效和准确的方法检查 URL mysite.com/myuri 是否存在比以上三种方法。

谢谢

和平...

【问题讨论】:

  • 呃,如果我错了,请纠正我,但您不应该知道您自己的网站上是否存在 URL 吗? ;) 对文件系统或您正在使用的框架(如果您是)进行某种内省可能比尝试通过 HTTP 找出它更容易。
  • 感谢您的回复....是的,我在问题中提到的第一种方法就是这样做的。但它很少检查 Rewritten(mod_rewrite) URLs....希望你明白....
  • 听起来你需要两次检查然后...一个用于文件系统然后,如果失败,通过HTTP检查(看看它是否被重写)。不过,我仍然对为什么您不知道自己网站上的 URL 是什么感到困惑。
  • 没有其他办法,因此减轻开销的唯一解决方案是将结果缓存 12 小时或其他时间。

标签: php mod-rewrite url-rewriting get-headers


【解决方案1】:

您可以使用HEAD 请求,而不是发送GET 请求,这将导致URI 的内容返回给您,这取决于Web 应用程序的实现,它可能只会告诉您一些信息关于 uri 而不是试图返回它。

您可以使用以下代码修改您的第三个示例:

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'HEAD');

【讨论】:

  • 感谢您的回复....但这仍然执行远程请求。该请求将再次产生额外的负载...如果我错了请纠正我...
【解决方案2】:

如果您使用的是 PHP 和 Apache,根据 SAPI,您可能可以使用 apache_lookup_uri($uri),这可能会更有效。

http://ca2.php.net/manual/en/function.apache-lookup-uri.php

【讨论】:

  • 感谢您的回复...我使用 PHP 和 Apache...apache_lookup_uri($uri) 在使用 mod_rewrite 时即使对于不存在的 URL 也返回状态代码 200。
猜你喜欢
  • 2015-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-06
  • 2019-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多