working passthru not from example ejecutar desde php exec

not - php exec vs passthru



código de error de comando ilegal 127 en la función de php exec (6)

Estoy usando este código php:

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

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


Gracias a todos por su respuesta!

Intenté esto

//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 devolvió ningún código de salida ... mis comandos están haciendo archivo ... probé mkdir etc. ..: s


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


ohkiee guyz thanx ... y sí, puede haber algunos errores con $ PATH ... pero con el camino completo dado está funcionando :)

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


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


Por si acaso alguien más sigue teniendo este problema, eche un vistazo a la publicación aquí:

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

Citar:

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

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

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

De todos modos, la ejecución de httpd con la opción -u se remonta al inicio de Apache no chroot''d menos seguro, lo que permitió que el ejecutor () volviera a funcionar.


Dado que esto aparece como una de las principales respuestas en Google, quería compartir mi solución:

La solución simple que tuve fue 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