我正在尝试获取一段脚本,可用于测试网站是否可访问,并显示此结果。我有一个私人服务器,我也可以测试。但就目前而言,我们只想说谷歌。
我尝试了很多方法:
首次尝试使用Javascript - https://gist.github.com/jerone/3487795
/*
Ping
*/
$.extend($, {
Ping: function Ping(url, timeout) {
timeout = timeout || 1500;
var timer = null;
return $.Deferred(function deferred(defer) {
var img = new Image();
img.onload = function () { success("onload"); };
img.onerror = function () { success("onerror"); }; // onerror is also success, because this means the domain/ip is found, only the image not;
var start = new Date();
img.src = url += ("?cache=" + +start);
timer = window.setTimeout(function timer() { fail(); }, timeout);
function cleanup() {
window.clearTimeout(timer);
timer = img = null;
}
function success(on) {
cleanup();
defer.resolve(true, url, new Date() - start, on);
}
function fail() {
cleanup();
defer.reject(false, url, new Date() - start, "timeout");
}
}).promise();
}
});
/* example */
$.Ping("http://google.com" /*, optional timeout */).done(function (success, url, time, on) {
console.log("ping done", arguments);
}).fail(function (failure, url, time, on) {
console.log("ping fail", arguments);
});
但无论如何都表现出来。
下一个例子是PHP:
function pingAddress($ip) {
$pingresult = exec("/bin/ping -c2 -w2 $ip", $outcome, $status);
if ($status==0) {
$status = "alive";
} else {
$status = "dead";
}
$message .= '<div id="dialog-block-left">';
$message .= '<div id="ip-status">The IP address, '.$ip.', is '.$status.'</div><div style="clear:both"></div>';
return $message;
}
// Some IP Address
pingAddress("192.168.1.1");
但是,再一次,总是显示为活着。 我试图访问我无法访问的私人服务器。所以这意味着我不能ping这个。
任何想法/建议/改进都非常受欢迎。
答案 0 :(得分:1)
发现这个 - 完美的工作。很抱歉在这么短的时间内回答,但只是试了一下,看起来很完美。
答案 1 :(得分:0)
您也可以尝试
$fp = fSockOpen($ip,80,$errno,$errstr,1);
if($fp) { $status=0; fclose($fp); } else { $status=1; }
摘自here。
答案 2 :(得分:0)
$status
只会返回已执行命令的状态
你应该解析你的$output
,而不是$status
,以了解远程服务器是否还活着
使用此正则表达式获取丢失的软件包的值,然后确定状态:
"#\(([0-9]{1,3})% loss\)#"