![CPanel 터미널에서 실행되지만 Ajax POST 호출에서는 실행되지 않는 PHP shell_exec() 스크립트](https://rvso.com/image/1601162/CPanel%20%ED%84%B0%EB%AF%B8%EB%84%90%EC%97%90%EC%84%9C%20%EC%8B%A4%ED%96%89%EB%90%98%EC%A7%80%EB%A7%8C%20Ajax%20POST%20%ED%98%B8%EC%B6%9C%EC%97%90%EC%84%9C%EB%8A%94%20%EC%8B%A4%ED%96%89%EB%90%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20PHP%20shell_exec()%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8.png)
내 웹 사이트에는 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을 호출할 때 환경 값이 누락되었습니다. 후보는 PATH
Python 매뉴얼 페이지에 언급된 변수입니다.
이 시도:
env -i python3.6 test.py
문제를 가리키는 오류 메시지가 나타날 가능성이 높습니다. 그런 다음 다음과 같이 쉘 환경에 있는 변수를 사용해 보십시오.
env -i PYTHONHOME=$PYTHONHOME python3.6 test.py
필요한 모든 환경 변수를 추가합니다. 이것이 작동하면 스크립트 호출에 추가하십시오. 스크립트를 호출할 때 변수의 실제 값을 제공했지만 이를 $PYTHONHOME
.