#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.