【发布时间】:2012-03-09 12:42:42
【问题描述】:
假设我的网址是 mysite.com/myuri。全世界都知道有很多方法可以知道我的网站 mysite.com 上是否存在本地 uri myuri。
- 最简单最快的方法是:
$uri_exists = file_exists($_SERVER['DOCUMENT_ROOT']."/myuri")。 - 下一个方法是:
$headers = @get_headers("http://mysite.com/myuri");$uri_exists = ($headers[0] == "HTTP/1.1 404 Not Found"); - 另一种(比上一种快一点)方法是:
$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