Скрипт PHP shell_exec() запускается из терминала CPanel, но не из вызова ajax POST

Скрипт PHP shell_exec() запускается из терминала CPanel, но не из вызова ajax POST

На моем веб-сайте есть функция JavaScript, которая выполняет вызов POST ajax к PHP-файлу на сервере (GoDaddy VPS под управлением CentOS 6), который выполняет скрипт Python через shell_exec() и возвращает вывод.

Функция Javascript:

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

PHP-скрипт: test.php

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

Скрипт Python: test.py

import sys
print("This is the output")

Когда я пытаюсь запустить php-файл из терминала bash на CPanel, проблем не возникает, как показано здесь. Однако при запуске функции javascript на консоль выводится только пустая строка. Я не уверен, почему она запускается только на терминале CPanel, но подозреваю, что это может быть проблема с разрешениями. Как исправить эту проблему?

ПРИМЕЧАНИЕ: Это прекрасно работает как на сервере, так и из вызова POST, если shell_exec() отсутствует. Похоже, что проблема вызвана shell_exec.


EDIT: После изменения PHP-скрипта на:

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

Этотэто выход.

решение1

При вызове python с веб-сервера отсутствуют значения окружения, которые присутствуют в вашей оболочке. Кандидатами являются PATHи переменные, упомянутые на странице руководства python.

Попробуй это:

env -i python3.6 test.py

Вы, вероятно, получите некоторые сообщения об ошибках, которые, как мы надеемся, укажут на проблему. Затем попробуйте переменные, которые присутствуют в вашей оболочке, например:

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

Добавьте все необходимые переменные окружения. Когда это сработает, добавьте их в вызов скрипта. При вызове скрипта вы должны предоставить фактические значения для переменных, вы не можете ссылаться на них как на $PYTHONHOME.

Связанный контент