如何检查PHP是否可以访问数据库主机名3306

如何检查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

我正在研究如何检查指向数据库(可能在端口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
                        }
                    });
                }
            }
        }

    });
});

你可以这样试试

<?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是否正在运行,那么在我看来,尝试连接将是最直接和最简单的