Parece que era uma configuração de segurança, corrigida pela execução:
sudo setsebool -P httpd_can_network_connect_db on
Encontrou a resposta aqui: link
Eu posso me conectar ao meu banco de dados executando php através do bash:
php -r '$link=@pg_connect("host=fakehost.edu port=5432 dbname=db user=user password=totallynotthepassword");if($link){echo "connected";} else { echo "no dice";}'
Isso resulta em um muito feliz "conectado"
No entanto, quando eu tenho exatamente o mesmo PHP em um arquivo servido pelo Apache e vou para aquela página, fico muito triste: "no dice"
Aqui está o código do arquivo php:
<html>
<head>
<title>PHP Test</title>
</head>
<body>
<?php
$link=@pg_connect("host=fakehost.edu port=5432 dbname=db user=user password=totallynotthepassword");if($link){echo "connected";} else { echo "no dice";}
?>
</body>
</html>
Eu pensei que tinha a ver com o usuário do apache, mas eu apenas testei o mesmo código enviado para aquele usuário e ele conectado.
Parece que era uma configuração de segurança, corrigida pela execução:
sudo setsebool -P httpd_can_network_connect_db on
Encontrou a resposta aqui: link
Tags php postgresql centos apache-httpd