2009-11-24 14 views
8

Quiero usar la función de php's exec() en un servidor ubuntu. El problema es que siempre obtengo un error, que el comando no se encuentra. Por ejemplo, usandoCómo cambio el shell para php's exec()

exec("echo 123"); 

impresiones

sh:/echo: No se ha encontrado

Para mí, parece que PHP está utilizando el shell sh, cuando quiero estar usando fiesta . Intenté cambiar el shell para www-data en/etc/passwd, que tampoco ayudó.

¿Alguien tiene una idea de dónde más podría estar el problema o cómo puedo cambiar el shell para el usuario de ubuntu de php?

Gracias, Timo


[EDIT]

Tal vez esto ayuda:

que llamo una escritura del golpe de ssh como timo, este script llama a un script php, que utiliza Exec. Lo sé, suena raro, pero es parte de un entorno de desarrollo más grande ...

El punto es, no estoy seguro, como qué usuario se ejecuta el script dentro de exec.


[EDIT]

Por ahora me di cuenta de que tiene que haber otro problema de los derechos en cuestión. Incluso si intento llamar a un script bash test.sh (¡por su ruta completa!) Desde dentro de exec, php test.php simplemente dirá.

sh: /test.sh: No se ha encontrado

Respuesta

0

Creo que el problema es que no hay ninguna configuración $ PATH. Trate de usar rutas completas a los binarios, es decir /bin/echo

+0

Gracias por su respuesta súper rápida. Desafortunadamente, eso no resolvió el problema./bin/echo tampoco funciona. Lo que en realidad quería hacer es este /usr/bin/mysql user = asdf asdf --password = mibd <./dump.sql Como se puede ver, que incluso se utiliza la ruta absoluta.El eco fue solo un ejemplo para hacerlo más simple ... ¿Alguna otra idea tal vez? – Timo

0

Si lo que quieres hacer es:

/usr/bin/mysql --user=asdf --password=asdf mydb < ./dump.sql

Entonces me imagino que esto funcionaría (independientemente de la shell):

/usr/bin/mysql --user=asdf --password=asdf mydb < /full/path/to/dir/dump.sql

+0

Ah, y no estoy seguro de cómo configurar el shell en PHP, pero podrías llamar un script de sh con "#!/Bin/bash" como primera línea, si realmente necesitas bash (y puedes ' t encontrar otra manera de hacerlo). –

+0

el problema no es que mi volcado no se puede encontrar, sino que no se puede encontrar mysql ... – Timo

+0

Si realmente hay un binario instalado en/usr/bin/mysql, entonces sh lo encontrará y el problema es otra cosa - como quizás el modo seguro está habilitado (revise los documentos para safe-mode-exec-dir y similar). Otra cosa que debes verificar es open_basedir, que también puede limitar el acceso del ejecutivo. –

8

Pruebe shell_exec() en su lugar. El ejecutivo no debe invocar CUALQUIER shell para ejecutar su programa. Alternativamente, puede invocar bash con exec como

exec("/bin/bash -c \"echo $foo > bar.txt'\"") 
+0

esto solo dirá "sh:/bash: no encontrado". parece que php busca todos los binarios en /. en php.ini safe_mode_exec_dir está configurado en nada, así que supongo que eso significa que no hay restricciones. (Cambiarlo no parece ayudar) – Timo

+2

No tengo experiencia con el modo seguro así que tal vez ese sea su problema. Intenta apagarlo? No deberías usarlo de todos modos, se va a ir y fue una mala idea desde el principio (enumera la mayoría de las características del lenguaje PHP) http://php.net/manual/en/features.safe-mode.php – Trey

+0

Didn Notar que alguien había mencionado esto: el modo seguro acordado es considerado dañino. Con respecto a safe_mode_exec_dir, si el modo seguro está activado y está configurado como vacío, eso lo explicaría (si quieres ejecutar algo, necesitaría establecerlo en /). Sugiero que intentes configurarlo para algo significativo e invocar algo en ese camino. –

Cuestiones relacionadas