usar una paso para listos ejemplos datos crear conexion conectar con como codigos archivo php mysql connection pdo

php - una - La conexión PDO funciona desde la línea de comandos, pero no a través de Apache.



conexion php mysqli (4)

Si se trata de una distribución derivada de Red Hat (RHEL, CentOS, Fedora, ScientificLinux) que ejecuta SELinux (o cualquier derivado que no sea de Red Hat utilizando SELinux), la configuración de política predeterminada en el momento de escribir esto es prohibir que Apache realice conexiones externas a otra servidores o bases de datos. Como root, debe habilitar los siguientes dos booleanos de SELinux. Use la opción -P para persistir el cambio durante un reinicio.

setsebool -P httpd_can_network_connect=1 setsebool -P httpd_can_network_connect_db=1

Tenga en cuenta que httpd_can_network_connect puede no ser necesario. Pruébelo primero solo encendiendo httpd_can_network_connect_db .

Tengo un script de prueba muy simple:

<?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 secuencia de comandos a través de mi navegador web, 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?


Tuve el mismo problema para PHP ftp ftp_connect y tuve que configurar el

setsebool -P httpd_can_network_connect=1

Es confuso porque otras cosas como fil_get_contents y curl funcionan bien con PHP y apache antes de configurar eso.


Mismo problema pero causa diferente aquí
Mi solución fue simplemente un sencillo apt-get install php-mysql away

Asegúrese de comprobar pdo_mysql en su phpinfo ()
Lo encontré en esta publicación: PDOException "no se pudo encontrar el controlador"

Me pregunto por qué CLI funcionó en tales condiciones O_o ¿Quizás algo se instaló incorrectamente, o se superó? Bueno, ahora, funciona bien!


Además de usar la respuesta aceptada anteriormente

setsebool -P httpd_can_network_connect=1 setsebool -P httpd_can_network_connect_db=1

También tuve que cambiar el contexto de seguridad de un archivo al que httpd intentaba acceder.

Un script php ejecutado a través de apache intentaba acceder a un archivo de certificado que estaba fuera de la raíz del documento normal de httpd . Cambiar los permisos del archivo para permitir el acceso httpd no fue suficiente para permitir el acceso httpd a ese archivo. Tuve que cambiar también al contexto de seguridad, así que antes del cambio:

[admin]$ ls -Z ../../certs/rds-ca-2015-root-us-east-1-BUNDLE.pem -rw-r--r--. admin apache unconfined_u:object_r:unlabeled_t:s0 ../../certs/rds-ca-2015-root-us-east-1-BUNDLE.pem

Cambiar contexto usando:

sudo chcon -v --type=httpd_sys_content_t ../../certs/rds-ca-2015-root-us-east-1-BUNDLE.pem```

Llegar:

[admin]$ ls -Z ../../certs/rds-ca-2015-root-us-east-1-BUNDLE.pem -rw-r--r--. admin apache unconfined_u:object_r:httpd_sys_content_t:s0 ../../certs/rds-ca-2015-root-us-east-1-BUNDLE.pem

Ahora todo está bien. Un buen recurso para mirar es /var/log/audit/audit.log y prestar mucha atención a los errores. En mi caso, el error que apuntaba a la dirección de una resolución era:

type=AVC msg=audit(1509047616.042:4049): avc: denied { read } for pid=17096 comm="httpd" name="rds-ca-2015-root-us-east-1-BUNDLE.pem" dev="xvdb" ino=262146 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:unlabeled_t:s0 tclass=file