miércoles, 20 de agosto de 2008

Problema al ejecutar comando externos en PHP.

Puede ser que al intentar ejecutar un comando externo del sistema desde PHP (por ejemplo con el comando system ) nos produzca algún error y este no sea ejecutado.

Hay varias posibles razones:
El fichero no tiene permisos de ejecución correctos.
Para solucionarlo debemos poner permisos de ejecución que permitan al usuario PHP ejecutar este comando. O bien cambiando el propietario y/o cambiando los permisos de ejecución 'x'.
El sistema tiene safe_mode activado.
Para solucionarlo no podemos recurrir a ini_set ya que no cambiará ningún valor relacionado con el safe_mode, tendremos que modificar o solicitar que nos modifiquen la condiguración del sistema. Y como poner safe_mode a off es muy peligroso debemos modificar el valor de safe_mode_exec_dir.
Este comando nos permitirá ejecutar todo lo que exista en ese directorio por lo cual deberá ser manejado con mucho cuidado.
La configuración de php se encuentra en el fichero php.ini para localizarlo ejecutaremos en php el comando php_info() y la línea Configuration File (php.ini) Path nos dirá donde se encuentra ese fichero.
Después de reiniciar el servicio httpd no hay cambios es muy posible que nuestro site esté virtualizado con lo que el cambio en php.ini no tenga efecto. Si miramos la información de php_info() y la información de las columnas 'Local Value' y 'Master Value' es diferente podremos ver las diferencias entre la configuración del php.ini volcada en el 'Master Value' y la información virtualizada volcada en el 'Local Value'. Si vemos que esta es la situación deberemos buscar el fichero con configuración de la virtualización y añadir o cambiar la línea 'php_admin_value safe_mode_exec_dir'