PHP shell_exec() 脚本从 CPanel 终端运行,但不从 ajax POST 调用运行

PHP shell_exec() 脚本从 CPanel 终端运行,但不从 ajax POST 调用运行

在我的网站上,我有一个 javascript 函数,它对服务器上的 PHP 文件(运行 CentOS 6 的 GoDaddy VPS)进行 POST ajax 调用,该函数通过 shell_exec() 执行 python 脚本并返回输出。

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

从 Web 服务器调用 Python 时,缺少 shell 中存在的环境值。候选值包括PATHPython 手册页中提到的变量。

尝试这个:

env -i python3.6 test.py

您可能会收到一些错误消息,希望这些消息能够指出问题所在。然后尝试使用 shell 环境中存在的变量,例如:

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

添加所有必要的环境变量。如果此操作有效,请将它们添加到对脚本的调用中。调用脚本时,您必须提供变量的实际值,不能将它们引用为$PYTHONHOME

相关内容