2011-04-21 48 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