2011-04-21 46 views
1

我已經有了這個小小的CMS,並且用戶可以在提交之前預覽帖子。我想要一個功能來檢查輸入的URL是否有效(I.E.指向存在的資源,而不是它是否是正確的格式)。最好,我想用JavaScript來做(我不必使用AJAX和PHP),但PHP很好。確保URL指向真實位置?

有人能指點我嗎?以防萬一,我想要一個yes/no的響應,例如運行UNIX ping命令。我不關心URL的另一端是什麼,只是它是否指向某種可導航的內容。

感謝,

詹姆斯

+0

使用捲曲發送HEAD請求。你需要設置激進的超時。 – 2011-04-21 19:53:12

回答

2

你可以簡單地使用fopen來查看url是否會工作......當然,這可能是資源矯枉過正,這取決於你做這件事的頻率。

http://php.net/manual/en/function.fopen.php

或者,你可以使用jQuery插件:

http://binarykitten.me.uk/dev/jq-plugins/88-jquery-plugin-ajax-head-request.html

的替代,而且很可能這是無法生存的最簡單的方法...但你可以使用jQuery調用另一個PHP腳本,實現它:

http://php.net/manual/en/function.get-headers.php

+0

感謝sdolgy的迴應。我選擇了jQuery路徑,但是您會介意告訴我如何讓該插件返回true/false值,以便我可以選擇是否顯示消息?非常感謝。 – Bojangles 2011-04-21 20:25:57

+0

如果你遍歷頭文件並尋找特定的http狀態代碼200 = OK,304 =緩存等,這裏是一個代碼列表:http://en.wikipedia.org/wiki/List_of_HTTP_status_codes – sdolgy 2011-04-21 20:32:12

+0

感謝你的,但是,我得到的唯一標題返回了這些:Date: - :Thu,21 Apr 2011 20:33:09 GMT 服務器: - :Apache/2.2.17(Ubuntu) X-Powered-By: - :PHP/5.3.5-1ubuntu7 Expires: - :Thu,19 Nov 1981 08:52:00 GMT Cache-Control: - :no-store,no-cache,must-revalidate,post-check = 0 ,:pre-check = 0 Pragma: - :no-cache Vary: - :Accept-Encoding 內容編碼: - :gzip Content-Length: - :2860 Keep-Alive: - : timeout = 15,max = 95 連接: - :K eep-Alive 內容類型: - :text/html 請原諒缺少換行符:-( – Bojangles 2011-04-21 20:36:52

1

加載到一個新的img對象,並查看響應是什麼。由於您實際上沒有顯示圖像,因此您可能正在加載純文本或其他非圖像數據的事實大多不相關,您只需查看圖像請求的HTTP狀態代碼是什麼。

好處是,如果惡意用戶試圖加載一個指向淫穢大文件的URL,他們只會自行拒絕服務,因爲請求會從瀏覽器發出,而不是您的服務器。反過來說,沒有什麼會阻止他們欺騙一個正確的迴應,並仍然放入這個大尺寸資源並提交表單。

+0

我喜歡這個解決方案! – 2011-04-21 19:56:06