如何PHP客户端检查网站的网址是否有效?
我搜索了我们的SO问题,但发现解决方案是基于使用system
PHP函数执行命令ping
执行的。如何PHP客户端检查网站的网址是否有效?
我的网站主机服务器不允许我这样做。我该怎么办?
请帮忙, 南。
注
我需要从client/web-browser
侧检查。
您的主机允许使用curl或socket()函数吗?或者也许用远程命令包含fopen命令?这可能比使用系统(“ping”)命令更好一些。
在PHP一个简单的检查将是
if(strlen(file_get_contents('http://google.com')){ // do something }
客户端可能会非常棘手,因为大多数浏览器犯规允许跨端脚本
另外,如果安装了,你可以使用PHP的卷曲。
函数gethostbyname
和checkdnsrr
(这个不在Windows上实现)将检查给定的主机名是否对应于DNS记录(所以基本上如果给定的主机名是公共的)。它应该是更加快速的然后file_get_contents
和curl
;-)
既然你不能加载与阿贾克斯一外部网页,以检查页面响应,你可以做到以下几点:
- 首先检查是否URL字符串是即使使用正则表达式有效:
的javascript:
编辑成很多更宽容。由于JavaScript不支持Unicode字符匹配,没有任何第三方库,这是我选择的办法:
function Validate(url){
var pattern = /(https?:\/\/)?.+\.[a-z]{2,4}/i
return pattern.test(url);
}
alert(Validate("http://abcü好le2.com/?query=test&test=1")); //true
alert(Validate("https://hurmårdu.se/blog/?test=1")); //true
alert(Validate("abcü好le2.com/?query=test&test=1")); //true
alert(Validate("hurmårduse/blog/?test=1")); //false
alert(Validate("hurmårduse")); //false
注:为了使这个功能更好,我们可以添加支持添加http://在开始的字符串,如果它不包含它。此外,如果你有兴趣的Unicode正则表达式:http://xregexp.com/plugins/
- 如果是,则使一个Ajax请求后端
- 后端需要用Ajax请求发送的网址,并用该解决方案Flave给加载的网址你或和返回URL是否响应与否:
PHP:
$url = $_POST["url"];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
if(strlen($output)){
return json_encode(array("is_valid" => true, "value" => $url));
}else{
return json_encode(array("is_valid" => false, "value" => $url));
}
注:代码需要来回传送的数据卫生m ajax请求。
正则表达式对于验证URL太容易出错。例如,你的模式不支持元音变音。我劝阻使用正则表达式。除此之外,你不知道该URL是否在使用中。 – 2011-04-27 13:29:03
好吧,我们并不依赖于这里的正则表达式,它只是用来排除无效的URL而不是花费资源来实际加载URL。此外,我们可以调整正则表达式以使其更加宽容,因此我们只需对其中存在重大错误的网址进行排序即可。 – rzetterberg 2011-04-27 13:33:03
定义“有效”。 – 2011-04-27 08:01:49
您对网址的客户端检查意味着什么? – JohnP 2011-04-27 08:02:16