我已经搜索了我们的SO问题,但发现解决方案是基于使用system
PHP函数调用ping
命令执行。
我的主机服务器不允许我这样做。我该怎么办?
请帮忙,南。
注意
我需要从client/web-browser
这边检查
因为你不能用ajax加载外部网页来检查页面是否响应,你可以做以下事情:
- 首先检查url字符串是否有效,使用regexp:
编辑得更宽容。由于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是否响应:
$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 }
客户端可能很棘手,因为大多数浏览器不允许跨端脚本编写
函数gethostbyname
和checkdnsrr
(这个在Windows上没有实现)将检查给定的主机名是否对应于DNS记录(因此基本上如果给定的主机名是公共的)。它应该比file_get_contents
和curl
更快;-)