2011-04-27 59 views
1

我搜索了我们的SO问题,但发现解决方案是基于使用system PHP函数执行命令ping执行的。如何PHP客户端检查网站的网址是否有效?

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

请帮忙, 南。

我需要从client/web-browser侧检查。

+0

定义“有效”。 – 2011-04-27 08:01:49

+2

您对网址的客户端检查意味着什么? – JohnP 2011-04-27 08:02:16

回答

0

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

0

在PHP一个简单的检查将是

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

客户端可能会非常棘手,因为大多数浏览器犯规允许跨端脚本

另外,如果安装了,你可以使用PHP的卷曲。

0

函数gethostbynamecheckdnsrr(这个不在Windows上实现)将检查给定的主机名是否对应于DNS记录(所以基本上如果给定的主机名是公共的)。它应该是更加快速的然后file_get_contentscurl ;-)

2

既然你不能加载与阿贾克斯一外部网页,以检查页面响应,你可以做到以下几点:

  • 首先检查是否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请求。

+0

正则表达式对于验证URL太容易出错。例如,你的模式不支持元音变音。我劝阻使用正则表达式。除此之外,你不知道该URL是否在使用中。 – 2011-04-27 13:29:03

+0

好吧,我们并不依赖于这里的正则表达式,它只是用来排除无效的URL而不是花费资源来实际加载URL。此外,我们可以调整正则表达式以使其更加宽容,因此我们只需对其中存在重大错误的网址进行排序即可。 – rzetterberg 2011-04-27 13:33:03