我需要找到最好的方式(就性能而言)來查找給定的字符串是否爲URL。
REGEXP不起作用,因爲www.eeeeeeeeeeeeeeeee.bbbbbbbbbbbbbbbbb.com是一個有效的url名稱,但不在任何人所知的網絡中。
我想使用CURL,看看我是否得到狀態200或只是file_get_contents並分析結果。
有沒有更好的方法?如何驗證給定的字符串是一個真正的URL,在PHP中?
1
A
回答
7
不要獲取整個內容 - 這可能是巨大的。改爲發出HEAD請求。
當然,你可以先做一些驗證 - 刪除那些無效的URL,而不僅僅是目前沒有任何服務的URL。之後,發出一個HEAD請求就像它獲得的一樣好。話雖如此,它變成了一個灰色區域......那麼返回「需要授權」的URL呢?這可能是一個密碼保護目錄,但如果你知道密碼,你最好然後拿回404,因爲文件本身不存在...
0
$host != gethostbyname($host)
檢查主機。
4
This文章概述瞭如何從php執行DNS請求。這可能是最快的選擇,雖然它不會告訴你任何事情,如服務器是否在線,找到文件等。但它會告訴你,該網址已註冊到IP。這取決於你是否會適合你的「有效」
1
定義你不是說一個URL,你的意思是一個域名
0
我會使用curl只是頭,不獲取任何內容的強烈建議。
這裏是函數,我用來驗證給定的URL是否有效並找到。
function __checkUrl($url)
{
//First checking with pattern whether it is proper or not
$pattern = '/^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)[email protected])?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/';
if (preg_match($pattern, $url))
{
$ch = curl_init();
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_FORBID_REUSE, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 4);
curl_setopt($ch, CURLOPT_TIMEOUT, 4);
// grab URL
$output = curl_exec($ch);
// Get response code
$response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$newurl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
// Not found?
if ($response_code == '404') {
return false;
} else {
return $newurl;
}
}
else
{
return false;
}
}
有了這個函數,我首先檢查URL實際上是否與Regex有效。之後,蜷縮着。通過將CURLOPT_FOLLOWLOCATION設置爲true,我們正在處理301和類似的重定向,但限制了no。重定向到3. 最後我們在所有重定向之後返回有效URL。
希望這會有所幫助。
相關問題
- 1. 驗證在PHP中的字符串,如果只有子字符串爲真
- 2. 如何驗證字符串是否是Clojure中的有效URL
- 3. Php如何驗證字符串是用於安全驗證的特定函數
- 4. 我如何確保一個空字符串是PHP真的空
- 5. 驗證字符串對給定的正則表達式模式?
- 6. 驗證一個列表的元素是在一個字符串
- 7. 如何搜索一個給定的字符串的對象php
- 8. Clojure正則表達式:給定一個字符串,如何返回該字符串中的有效URL?
- 9. 如何知道給定的字符串是否是來自Java中另一個字符串的子字符串
- 10. 只驗證字符串php中的選定字符(電話號碼驗證)
- 11. 如何生成和驗證節點JS中給定字符串的校驗和
- 12. 如何驗證在PHP中只包含空格的字符串?
- 13. 如何驗證JavaScript中的字符串?
- 14. PHP字符串驗證
- 15. 如何檢查給定的Python字符串是否是另一個字符串的子字符串?
- 16. 如何在Java中驗證字符串?
- 17. 如何在NSUserdefaults中驗證字符串
- 18. 給定一個字符串,如何檢查前幾個字符是否是另一個字符串? C++
- 19. 驗證字符串是PHP中的二進制數字
- 20. Javascript驗證字符串是一個字符後跟數字
- 21. 如何在PHP中創建一個包含給定數組鍵的字符串?
- 22. 如何使用jquery驗證php md5字符串驗證
- 23. 如何從一個字符串的URL
- 24. 如何驗證字符串是否包含列表中的任何字符串?
- 25. 檢測一個字符串是否包含「真正的句子」?
- 26. 使用PHP查詢字符串驗證的URL
- 27. 在asp.net驗證一個字符串是否是json
- 28. PHP - 剝開一個特定的字符串一個字符串
- 29. 如何獲得非數字字符的ASCII一個給定的字符串中
- 30. 如何驗證字符串中的第一個字符是字母還是數字?
你可能會得到301,302和其他一些有效的代碼,所以不要只檢查200. – 2009-08-19 20:45:10
我很想註冊和託管該域名,只是爲了證明你錯了:p – jason 2009-08-19 20:50:18
不這樣做,我的意思是www.eeeeeeeeeeeeeeeeee.bbbbbbbbbbbbbb.com而不是www.eeeeeeeeeeeeeeee.bbbbbbbbbbbbbbbbb.com – 2009-08-20 00:45:58