我正在研究如何检查是否可以访问指向数据库的特定主机名(可能是在端口3306上)。
在php中我有一个用户填写他们的数据库详细信息,并且使用ajax我正在运行一个脚本来ping所提供的主机名但我似乎无法得到我想要的结果。
使用我当前的脚本:
if (fsockopen($host, $port, $errno, $errstr, $timeout)) {
$return[$host]['message'] = "{$host} was reached";
$return[$host]['status'] = true;
} else {
$return[$host]['message'] = "{$host} is unreachable";
$return[$host]['status'] = false;
}
我知道主机是可以访问的,这在我的一些测试中是正确的,但在其他测试中它是假的。
作为我的最终结果,我想告诉用户提供的主机名不正确或无法访问。
编辑:
这是我对那些感兴趣的人的ajax电话。
$('#db_host').focusout(function () {
$.ajax({
url:'/json/auth/ping/' + $(this).val(),
dataType:'json',
success:function (data) {
if ($('#db_host').val() !== '') {
if (data.status === false) {
$('#db_host').qtip({
content:data.message,
position : {
my :'left center',
at :'right center'
},
effect:function () {
$(this).slideUp(500);
},
style : {
classes : 'ui-tooltip-red'
},
show : {
ready : true
}
});
}
}
}
});
});
答案 0 :(得分:2)
如果您的主机允许您ping:
<?php
exec("ping -n 4 $host 2>&1", $output, $retval);
if ($retval != 0) {
echo "Host Unreachable";
}
else {
echo "Host Reachable";
} ?>
但我觉得这是不必要的,而不是快速或可靠的。
否则,fsockopen是最好的方法:如果你想确保你可以连接到他们的数据库,为什么不看看你是否可以连接到他们的数据库?
<?php
$link = mysql_connect($host.':'.$port, $dbUsername, $dbPassword);
if (!$link) {
die('Could not connect: ' . mysql_error());
}
答案 1 :(得分:1)
你可以这样试试。
<?php
$conn = mysql_connect('localhost','user','pass');
mysql_select_db('db',$conn);
if (!mysql_ping ($conn)) {
mysql_close($conn);
$conn = mysql_connect('localhost','user','pass');
mysql_select_db('db',$conn);
echo "connected again";
}
?>