2009-01-13 7 views
7

estoy usando el código php:código de error de comando ilegal 127 en función de php exec

exec("unrar e file.rar",$ret,$code); 

y conseguir un código de error de comando ilegal es decir, 127 ... pero cuando estoy usando este comando ssh a través de su trabajo ... porque unrar está instalado en el servidor ... ¿alguien puede adivinar por qué el ejecutivo no está haciendo lo correcto?

+0

solo un pensamiento: ¿está file.rar definitivamente en el mismo directorio en el que se ejecuta el script php? ¿Y está unrar en un directorio que está en la RUTA? – Ben

+0

sí, el archivo.rar está en el mismo directorio ... unrar está instalado en el sistema ... ¿hay algún aspecto específico que deba ser ejecutado por php exec? – Intellex

+0

Dije que funciona bien en el terminal que estoy usando a través de ssh – Intellex

Respuesta

21

Intente utilizar la ruta directa de la aplicación (/ usr/bin/unrar de lo que sea), parece que php no puede encontrar la aplicación.

+0

Tengo que decir que parece que el directorio que contiene el binario unrar no está incluido en la varilla PATH, por lo que usar una ruta directa debería ayudar o simplemente agregar el binario al directorio si la ruta no puede ser encontrada – UnkwnTech

3

gracias a todos por su respuesta!

yo probamos este

 
//somedir is inside the directory where php file is 
chdir("somedir"); 
exec("/home/username/bin/unrar e /home/path/to/dir/file.rar"); 

y ahora no hay ningún código de salida ... oher comandos están haciendo archivo .. He intentado mkdir etc ..: s

+0

por cierto, este comando se ejecutaba directamente en shell – Intellex

1

ohkiee Gracias guyz .. . y sí que podría haber algunos errores con $ PATH ... pero con determinada ruta completa su trabajo :)

 
exec("/home/user/bin/unrar e /home/user/xxx/yyy/file.rar"); 

7

Si ha usado apache y php, también querrá poner/bin/sh en el entorno chroot. De lo contrario, exec() o passthru() no funcionarán correctamente y producirán el código de error 127, archivo no encontrado.

+0

Esto me solucionó el problema. ¡Gracias! –

1

Por si acaso alguien todavía recibe este problema, echar un vistazo a la post aquí:

http://gallery.menalto.com/node/2639#comment-8638

Cita:

He encontrado el problema. El problema fue mi seguridad paranoica en OpenBSD. Al actualizar de 3.1 a 3.2, agregaron:

  • Apache ejecuta chroot'd de forma predeterminada. Para desactivar esto, vea la nueva opción -u.

El chroot impidió que Apache accediera a algo fuera de un directorio, así que moví todo al directorio de apache, incluido netpbm. Todo era accesible y ejecutable, pero supongo que todavía estaba en una especie de "modo seguro" porque el ejecutor() siempre devolvía 127.

De todos modos, ejecutar httpd con la opción -u regresaba al menos seguro no chroot 'd apache startup, que permitió al exec() trabajar de nuevo.

4

Dado que este surge como una respuesta superior en Google, que quería compartir mi dosis:

La solución simple que tenía era desactivar safe_mode en el archivo php.ini

; Safe Mode 
; http://www.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode 
safe_mode = Off 
+0

El modo seguro se ha eliminado de PHP a partir de la versión 5.4.0. http://php.net/manual/en/features.safe-mode.php – Nick

Cuestiones relacionadas