Script PHP shell_exec() em execução no terminal CPanel, mas não na chamada POST do ajax

Script PHP shell_exec() em execução no terminal CPanel, mas não na chamada POST do ajax

No meu site, tenho uma função javascript que possui uma chamada POST ajax para um arquivo PHP no servidor (um GoDaddy VPS rodando CentOS 6), que executa um script python via shell_exec() e retorna a saída.

Função Javascript:

function submitdivsheet()
{
    $.post("test.php", {}, function(data,status){
        console.log(data);
    }); 
}

Script PHP: teste.php

<?php
    $command = escapeshellcmd('python3.6 test.py');
    $output = shell_exec($command);
    echo $output;
?> 

Script Python: test.py

import sys
print("This is the output")

Quando tento executar o arquivo php do terminal bash no CPanel, não há problemas, como mostrado aqui. No entanto, ao executar a função javascript, apenas uma string vazia é enviada para o console. Não sei por que ele seria executado apenas no terminal CPanel, mas suspeito que possa ser um problema de permissão em algum lugar. Como posso corrigir esse problema?

NOTA: Isso funciona bem no servidor e na chamada POST se shell_exec() não estiver presente. Parece que shell_exec está causando o problema.


EDIT: Ao alterar o script PHP para:

<?php print shell_exec('echo $PATH'); ?>

Esseé a saída.

Responder1

Estão faltando valores de ambiente ao invocar python do servidor web que está presente em seu shell. Os candidatos são PATHe as variáveis ​​​​mencionadas na página de manual do python.

Experimente isto:

env -i python3.6 test.py

Você provavelmente receberá algumas mensagens de erro que apontarão para o problema. Em seguida, experimente variáveis ​​que estão presentes em seu ambiente shell, como:

env -i PYTHONHOME=$PYTHONHOME python3.6 test.py

Adicione todas as variáveis ​​de ambiente necessárias. Quando isso funcionar, adicione-os à chamada do script. Ao chamar o script, você fornece os valores reais para as variáveis, não pode referir-se a elas como $PYTHONHOME.

informação relacionada