如何知道本地URI / URL是否存在?

时间:2012-03-09 12:42:42

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

我们假设我的网址是 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);
    curl_close($curl);
  4. 这些是我所知道的方法。第一种方法是精确检查文件是否存在,而不是URI是否存在。如果使用mod_rewrite,则此方法非常不准确。

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

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

    谢谢

    和平...

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

如果您使用的是PHP和Apache,则根据SAPI,您可以使用apache_lookup_uri($ uri),这可能会稍微提高效率。

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