CPanel 터미널에서 실행되지만 Ajax POST 호출에서는 실행되지 않는 PHP shell_exec() 스크립트

CPanel 터미널에서 실행되지만 Ajax POST 호출에서는 실행되지 않는 PHP shell_exec() 스크립트

내 웹 사이트에는 shell_exec()를 통해 Python 스크립트를 실행하고 출력을 반환하는 서버(CentOS 6을 실행하는 GoDaddy VPS)의 PHP 파일에 대한 POST ajax 호출이 있는 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")

CPanel의 bash 터미널에서 PHP 파일을 실행하려고 하면 문제가 없습니다. 여기에 표시된 대로. 그러나 javascript 함수를 실행하면 콘솔에는 빈 문자열만 출력됩니다. 왜 CPanel 터미널에서만 실행되는지는 잘 모르겠지만 어딘가에 권한 문제가 있을 수 있다고 생각됩니다. 이 문제를 어떻게 해결할 수 있나요?

참고: shell_exec()가 없으면 서버와 POST 호출 모두에서 제대로 작동합니다. shell_exec가 문제를 일으키는 것 같습니다.


편집: PHP 스크립트를 다음과 같이 변경하면:

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

이것출력입니다.

답변1

셸에 있는 웹 서버에서 Python을 호출할 때 환경 값이 누락되었습니다. 후보는 PATHPython 매뉴얼 페이지에 언급된 변수입니다.

이 시도:

env -i python3.6 test.py

문제를 가리키는 오류 메시지가 나타날 가능성이 높습니다. 그런 다음 다음과 같이 쉘 환경에 있는 변수를 사용해 보십시오.

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

필요한 모든 환경 변수를 추가합니다. 이것이 작동하면 스크립트 호출에 추가하십시오. 스크립트를 호출할 때 변수의 실제 값을 제공했지만 이를 $PYTHONHOME.

관련 정보