如何在PHP客户端检查网站的URL是否有效?

时间:2011-04-27 07:58:58

标签: php validation url client-side

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

我的网络托管服务器不允许我这样做。我该怎么办?

请帮忙, 南。

注意

我需要从client/web-browser方面查看。

4 个答案:

答案 0 :(得分:2)

由于您无法使用ajax加载外部网页来检查页面是否响应,因此您可以执行以下操作:

  • 首先使用regexp检查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 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请求发送的数据进行卫生处理。

答案 1 :(得分:0)

您的主机是否允许使用curl或socket()函数?或者也许使用fopen命令进行远程包含?这可能是比使用系统(“ping”)命令更好的选择。

答案 2 :(得分:0)

在php中进行简单检查

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

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

或者你可以使用php-curl(如果已安装)。

答案 3 :(得分:0)

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

更快