Como depurar problemas do shell_exec
OK, aqui temos um problema: alguma coisa funciona no terminal e não funciona no shell_exec do php (ou exec, spawn, qualquer que seja). Vamos pensar: qual é a diferença entre você e php? Aqui estão três:
PHP é executado a partir de regras do servidor HTTP
De fato, seu terminal está sendo executado pelo yourname
usuário e o php é executado a partir www-data
. Portanto, a primeira idéia é abrir o terminal do www-data
usuário e tentar o mesmo comando. Então....
- Abra o
/etc/passwd
arquivo, encontre a linha com o www-data
usuário e altere seu shell de login (o último) de /bin/false
(ou o que for) para /bin/bash
.
www-data
Terminal da Open :su www-data
- Tente php -v ou o que você não puder executar a partir do php. Se não funcionar - você verá bons logs e poderá depurar o problema.
- Não se esqueça de corrigir o
/etc/passwd
arquivo enquanto estiver pronto
O PHP é executado a partir do PHP .
O PHP é paranóico e há muitas opções na configuração do apache / nginx e php.ini que podem interromper sua tentativa.
Isso é um pouco mais complicado para depurar. Existem duas opções aqui:
Ative os logs no navegador e veja o problema. Edite seu php.ini
, ative display_errors
e todos os outros sinalizadores para ver erros no navegador. Eles Você pode lê-los e depurá-los.
Obtenha www-data
o shell (veja a primeira seção) e execute algo como
echo '<?php shell_exec("php -v"); ?>' | php
que executará o mesmo código php no console e você poderá ver erros e depuração.
PHP é executado a partir do SELinux / apparmor
Selinux e apparmor são itens de segurança que proíbem aplicativos de executar ações específicas (por exemplo, gerando outros aplicativos ou alguns outros aplicativos específicos). Talvez esteja ativado no seu servidor.
Para verificar - desative o selinux / apparmor e verifique se existe algum problema.
Para corrigir - leia o manual apropriado e corrija as regras permissivas de gravação para o seu caso.