Как проверить, доступно ли имя хоста базы данных: 3306 с помощью PHP - PullRequest
1 голос
/ 03 февраля 2012

Я изучаю, как я могу проверить, является ли доступным конкретное имя хоста, указывающее на базу данных (предположительно, на порту 3306).

В php у меня есть пользователь, чтобы заполнить его данные базы данных, ис ajax я запускаю скрипт, который проверяет имя хоста, но я не могу получить желаемые результаты.

С моим текущим скриптом:

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 ]

2 голосов
/ 03 февраля 2012

Если ваш хост разрешит вам пинговать:

<?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 голос
/ 03 февраля 2012

Вы можете попробовать это так.

<?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";
}

?>
...