0

假设我的 URL 是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);

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

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

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

谢谢

和平...

4

2 回答 2

1

您可以使用请求,而不是发送GET请求,这将导致 uri 的内容返回给您HEAD,根据 web 应用程序的实现,它可能只是告诉您有关 uri 的一些信息,而不是尝试返回它.

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

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'HEAD');
于 2012-03-09T12:46:27.767 回答
1

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

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

于 2012-03-09T13:32:26.860 回答