PHP — pg_connect() не может преобразовать имя хоста в адрес (через VPN)

#php #apache #postgresql

#php #apache #postgresql

Вопрос:

Я пытаюсь подключиться через PHP к удаленному серверу PgSQL внутри моей VPN.

Вот код (простой скрипт, который извлекает информацию из таблицы, содержащей список пользователей):

 $query = "SELECT name, surname FROM test_table WHERE id=$1";
$link   = pg_Connect("host=named.host.inside.my.VPN.network dbname=testdb user=username password=password") or die('DB Connection failed');
if ($link){
    $select = pg_prepare($link, "my_query", $query);
    $select = pg_execute($link, "my_query", array(1));  //retrieve user with id == 1
    if($select){
        while ($row = pg_fetch_row($select)){
            echo "User 1: " . $row[0] . " " . $row[1];
        }
    }
    else{
        echo "Select error! - " . pg_last_error($link);
    }
}
else{
    echo "Link error - " . pg_last_error($link);
}
  

Я запускаю этот скрипт внутри XAMPP (Windows 7 как ОС), а сервер PgSQL — это AmazonRDS, доступный через именованный хост, подобный named.host.inside.my.VPN.network .

Если я отправлю запрос на этот хост, cmd отобразит правильный IP-адрес сервера, и если я добавлю этот IP-адрес в файл «hosts», PHP правильно разрешит его и не умрет. Если не добавить строку «123.45.67.89 named.host.inside.my.VPN.network» в файл «hosts», выполнение скрипта выдает этот результат:

Предупреждение: pg_connect(): не удалось подключиться к серверу PostgreSQL: не удалось преобразовать имя хоста «named.host.inside.my.VPN.network» в адрес: ошибка неизвестного сервера в C:xampphtdocsfilename.php сбой подключения к базе данных по линии 6

Мой вопрос: есть ли способ разрешить pg_connect () разрешить домен «named.host.inside.my.VPN.network», НЕ добавляя его в файл «hosts» (учитывая, что он правильно переведен / доступен через ping)?

Комментарии:

1. Использовать IP-адрес в pg_connect вызове? Либо DNS-распознаватель вашей ОС должен быть в состоянии его найти, либо вы должны использовать IP. Если вы не можете добавить его в hosts, исправьте настройки VPN, чтобы он правильно экспортировал серверы внутренних имен. В любом случае, это просто материал системного администратора.

Ответ №1:

Вы можете попробовать перезапустить службу httpd (apache).

У меня те же проблемы, что и у вас, возможно, это та же причина. Каким-то образом плагин postgresql, похоже, запутался после запуска. Ввод IP-адреса в «hosts» работает, но поиск DNS — нет. Я запускаю Archlinux с php 5.5.16 / pgsql 9.3.5. Чтобы перезапустить, я делаю «systemctl restart httpd», но вам, вероятно, придется копаться в инструменте services.msc.