Tengo una muy simple script de prueba:La conexión de PDO funciona desde la línea de comandos, pero no a través de Apache.
<?php
$DSN = "mysql:host=db.example.edu;port=3306;dbname=search_data";
try {
$DB = new PDO($DSN, "username", "super-secret-password!");
} catch (PDOException $e) {
header('Content-Type: text/plain');
print "Could not connect to database, rawr. :-(";
exit;
}
$SQL = "SELECT phrase FROM search ORDER BY RAND() LIMIT 10";
foreach($DB->query($SQL) as $row){
print $row['phrase']."\n";
}
?>
Cuando ejecuto este script desde la línea de comandos, funciona perfectamente:
$ php test.php
corporal punishment
Stretches
voluntary agencies and the resettlement of refugees
music and learning
Nike Tiger Woods Scandal
Hermeneia
PSYCHINFO
anthony bourdain
Black-White Couples and their Social Worlds
colonization, hodge
Pero cuando accedo a la misma escritura exacta a través de mi navegador web , que dice:
Could not connect to database, rawr. :-(
he intentado var_dump
en el error, y el mensaje es: "SQLSTATE [HY000] [2003] no se puede conectar al servidor MySQL en ' db.example.edu '(13) ".
Esto es desconcertante. Es exactamente la misma secuencia de comandos en el mismo servidor exacto: ¿por qué funciona cuando lo ejecuto desde la línea de comandos, pero falla cuando Apache lo ejecuta?
¿Se trata de un servidor Linux? ¿Red Hat o CentOS ejecutan SELinux? Si es así, puede necesitar habilitar los booleanos de SELinux 'httpd_can_network_connect' y' httpd_can_network_connect_db' para permitir que Apache establezca conexiones con un host de base de datos remota. –
más información sobre este error (13 = permiso denegado) está aquí: http://www.filonov.com/blog/2009/08/07/sqlstatehy000-2003-cant-connect-to-mysql-server-on-xxx -xxx-xxx-xxx-13/ – thetaiko
@Michael Sí, es un servidor RHEL 6.1, y uno brillante nuevo en eso. Además, @thetaiko - ¡funcionó! Fue SELinux bloqueando la conexión, y ejecutando 'setsebool -P httpd_can_network_connect = 1' como root lo arregló. Si quieres publicar eso como respuesta, aceptaré y votaré felizmente. –