如何检查PHP是否可以访问数据库主机名3306
我正在研究如何检查指向数据库(可能在端口3306上)的特定主机名是否可以访问 在php中,我让用户填写他们的数据库详细信息,在ajax中,我运行一个脚本,ping提供的主机名,但我似乎无法得到我想要的结果 使用我当前的脚本:如何检查PHP是否可以访问数据库主机名3306,php,ping,Php,Ping,我正在研究如何检查指向数据库(可能在端口3306上)的特定主机名是否可以访问 在php中,我让用户填写他们的数据库详细信息,在ajax中,我运行一个脚本,ping提供的主机名,但我似乎无法得到我想要的结果 使用我当前的脚本: if (fsockopen($host, $port, $errno, $errstr, $timeout)) { $return[$host]['message'] = "{$host} was reached"; $return[$host]['sta
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
}
});
}
}
}
});
});
你可以这样试试
<?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";
}
?>
如果您的主机允许您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());
}
我考虑过这一点,但我的ajax调用的本质是在输入框失去焦点时立即检查主机名。你能发布你的ajax脚本吗?即使尝试mysql\u connect
而没有用户名或密码(它将使用php.ini中的默认值),你也会得到一个超时(无法访问)或者,无法使用提供的用户名/密码登录
来自MySQL的消息(可以访问)我查看了第一个选项,但由于我计划让其他人在他们的服务器上使用我的代码,所以我不想包含执行时存在安全风险或每个人都可以使用的代码。Ping不是一种方法。系统响应ping并不意味着MySQL正在运行。仅仅因为MySQL正在运行并有响应并不意味着系统会响应ping。你知道一种检查服务器是否正在运行的方法吗?@Brad他说,检查服务器是否正在运行,除了这样做或使用curl获取页面之外,我真的想不出一种方法来查看服务器是否正在运行。如果你只是想看看mysql是否正在运行,那么在我看来,尝试连接将是最直接和最简单的