如何PHP客户端检查一个网站的url是否有效


How to PHP client-side check if a url of a web site is valid?

我已经搜索了我们的SO问题,但发现解决方案是基于使用system PHP函数调用ping命令执行。

我的主机服务器不允许我这样做。我该怎么办?

请帮忙,南。

注意

我需要从client/web-browser这边检查

因为你不能用ajax加载外部网页来检查页面是否响应,你可以做以下事情:

  • 首先检查url字符串是否有效,使用regexp:
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感兴趣,regexp: http://xregexp.com/plugins/

  • 如果是,则向后端发出ajax请求
  • 后端接收与ajax请求一起发送的url,并使用Flave给您的解决方案或加载url,并返回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));
}

注意:代码需要从ajax请求发送的数据的卫生。

您的主机是否允许使用curl或socket()函数?或者使用fopen命令执行远程包含?这可能比使用system("ping")命令要好得多。

在PHP中一个简单的检查是

if(strlen(file_get_contents('http://google.com')){ // do something }

客户端可能很棘手,因为大多数浏览器不允许跨端脚本编写

函数gethostbynamecheckdnsrr(这个在Windows上没有实现)将检查给定的主机名是否对应于DNS记录(因此基本上如果给定的主机名是公共的)。它应该比file_get_contentscurl更快;-)