我们假设我的网址是 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);
curl_close($curl);
这些是我所知道的方法。第一种方法是精确检查文件是否存在,而不是URI是否存在。如果使用mod_rewrite
,则此方法非常不准确。
接下来的两种方法是准确的(即使使用mod_rewrite
)但由于它们对自己的站点执行远程GET请求,因此速度很慢。它们效率也很低,因为只要知道URI是否存在,mysite.com上的脚本就会不必要地执行它们。此外,它们会导致 mysql服务器不必要的流量。
来到我想要问的问题,我希望 mysite.com 上的PHP脚本使用更高效,更准确的方法检查URL mysite.com/myuri 是否存在比上述三种方法。
谢谢
和平...
答案 0 :(得分:1)
您可以使用GET
请求,而不是发送HEAD
请求,这将导致将uri的内容返回给您,而这取决于Web应用程序的实现,可能只是告诉你一些关于uri的信息,而不是试图归还它。
您可以使用以下代码修改第三个示例:
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'HEAD');
答案 1 :(得分:1)
如果您使用的是PHP和Apache,则根据SAPI,您可以使用apache_lookup_uri($ uri),这可能会稍微提高效率。