2012-03-09 55 views
0

讓我們假設我的網址是mysite.com/myuri。世界上有很多方法知道,要知道我的網站mysite.com上是否存在本地uri myuri如何知道本地URI/URL是否存在?

  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存在使用方法比上面三種方法更加高效和準確。

謝謝

和平...

+0

呃,糾正我,如果我錯了,但你不應該知道,如果在自己的網站存在的網址? ;)在文件系統或者你使用的框架(如果你是)上進行某種內省可能會更容易,而不是通過HTTP來解決它。 – enygma 2012-03-09 12:46:04

+0

感謝您的回覆....是的,我在問題中提到的第一種方法就是如此。但它很少檢查重寫的(mod_rewrite)URL ......希望你得到那個...... – 2012-03-09 12:49:24

+1

聽起來像你需要兩個檢查然後...一個文件系統,然後,如果失敗,通過HTTP檢查(到看看它是否被重寫)。我仍然對你爲什麼不知道你自己的網站上會有哪些網址感到困惑。 – enygma 2012-03-09 12:51:32

回答

1

而是發送GET請求,這將導致在具有URI的內容返回給你的,你可以使用一個HEAD要求,這取決於Web應用程序的實現,可能會告訴你一些關於uri的信息,而不是試圖返回它。

你可以使用下面的代碼修改你的第三個例子:

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

感謝您的回覆....但仍然執行遠程請求。該請求將再次創建一個額外的負載...糾正我,如果我錯了... – 2012-03-09 12:51:47

1

如果你正在使用PHP和Apache,取決於SAPI你也許可以使用函數apache_lookup_uri($ URI),這可能會稍高效。

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

+0

感謝您的答覆...我使用PHP和Apache ... apache_lookup_uri($ uri)返回狀態代碼200即使對於不存在的URL當使用mod_rewrite時。 – 2012-03-09 14:07:03

相關問題