Cómo depurar problemas de shell_exec
OK, aquí tenemos un problema: algo funciona en la terminal y no funciona en shell_exec de php (o exec, spawn, lo que sea). Pensemos: ¿cuál es la diferencia entre You y php? Aquí hay tres:
PHP se ejecuta desde las reglas del servidor HTTP
De hecho, su terminal se ejecuta desde el yourname
usuario y se ejecuta php desde www-data
. Entonces, la primera idea es abrir la terminal del www-data
usuario e intentar el mismo comando. Entonces....
- Abra el
/etc/passwd
archivo, busque la línea con el www-data
usuario y cambie su shell de inicio de sesión (último) de /bin/false
(o lo que sea) a /bin/bash
.
- Abrir
www-data
terminal:su www-data
- Pruebe php -v o lo que no pueda ejecutar desde php. Si no funciona, verá buenos registros y podrá depurar el problema.
- No te olvides de reparar el
/etc/passwd
archivo mientras estás listo
PHP se ejecuta desde PHP .
PHP es paranoico enogh y hay muchas opciones en la configuración de apache / nginx y php.ini que pueden romper su intento.
Esto es un poco más complicado de depurar. Aquí hay dos opciones:
Habilite los registros en el navegador y vea el problema. Edite su php.ini
, encienda display_errors
y todos los demás indicadores para ver errores en el navegador. Pueden leerlos y depurarlos.
Obtenga www-data
el shell (vea la primera sección) y ejecute algo como
echo '<?php shell_exec("php -v"); ?>' | php
que ejecutará el mismo código php en la consola y podrás ver errores y depurar.
PHP se ejecuta desde SELinux / apparmor
Selinux y apparmor son elementos de seguridad que prohíben a las aplicaciones realizar acciones específicas (por ejemplo, generar otras aplicaciones o algunas otras aplicaciones específicas). Tal vez está habilitado en su servidor.
Para verificar, deshabilite selinux / apparmor y verifique si existe un problema.
Para arreglarlo, lea el manual apropiado y arregle las reglas permisivas para su caso.