我搜索了我们的SO问题,但发现解决方案基于使用ping
PHP函数执行的调用system
命令。
我的网络托管服务器不允许我这样做。我该怎么办?
请帮忙, 南。
注意的
我需要从client/web-browser
方面查看。
答案 0 :(得分:2)
由于您无法使用ajax加载外部网页来检查页面是否响应,因此您可以执行以下操作:
的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/
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)
函数gethostbyname
和checkdnsrr
(这个未在Windows上实现)将检查给定的主机名是否对应于DNS记录(因此,如果给定的主机名是公共的,则基本上如此)。它应该比file_get_contents
和curl
; - )