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

时间:2012-02-03 18:08:37

标签: php ping

我正在研究如何检查是否可以访问指向数据库的特定主机名(可能是在端口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
                        }
                    });
                }
            }
        }

    });
});

2 个答案:

答案 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";
}

?>