Preciso obter informações básicas sobre o sistema operacional em PHP:
$p = shell_exec('cat /etc/*-release 2>&1');
Isso retorna:
cat: '/etc/*-release': No such file or directory
O comando funciona bem no terminal/CLI via PuTTY.
Minha melhor interpretação atual é que o PHP requer que um caminho seja definido. Então eu tentei isso:
$p = shell_exec('echo $PATH');
O que retorna:
/bin:/usr/bin
Quando executo echo $PATH
diretamente no terminal, recebo uma :
lista delimitada. Então peguei tudo isso e coloquei no arquivo PHP diretamente da seguinte forma:
putenv('/etc');
//plus others
Ainda sem resultado. Eu sei que shell_exec()
funciona bem com outros comandos shell_exec('whoami');
. No terminal/CLI estou logado exatamente como o mesmo usuário do PHP 8.3.
O que mais estou perdendo?
Existem vários problemas aqui.
fopen
.*-release
é um nome de arquivo válido ./etc
, mas...cat
comando não foi encontrado, é que o arquivo que você fornece como parâmetro não foi encontrado... Um entendimento geral do plataforma é um bom ponto de partida para programação.putenv('/etc');
não é assim queputenv
funciona . Variáveis de ambiente são geralmentekey=value
-pares.O problema era que o PHP foi configurado para rodar na
chroot
prisão. Eu havia esgotado todas as outras possibilidades. Só descobri graças ao comentário do @vidarlo.Consegui resolver o problema no WHM através do plugin CageFS. O usuário Linux que o PHP usa foi configurado para executar e eu o removi da associação.