我正在开发一个应用程序,该应用程序可以在Google Cloud的计算机引擎中的虚拟机上分三步进行操作:
$_POST[]
将输入传递到.php文件,然后运行shell_exec命令(通过escapecmd()
检查之后)以运行python脚本(命令为sudo python3 A1.py I1 I2 ... IN
),其中I1, I2, ... IN
是来自表单的输入。所以现在我的问题是从终端运行sudo python3 A1.py I1 I2 ... IN
可以正常工作,因为它更新了在PHP文件上更新的tmp.txt文件,并显示正确的输出。但是,转到应用程序本身,如果我将表单中的值更改为I1 I2 ... IN
,则将显示与之前相同的输出,即在步骤2中,shell_exec()
命令不起作用。
因此,该命令从终端运行,而不是从PHP的shell_exec()
命令内部运行。进行$output = shell_exec($cmd); var_dump($output);
仅返回NULL值。我已经检查了其余的代码,所有命令似乎都能正常工作,并且$ cmd的值与我在终端中键入的值相同。我认为这与权限有关,因为我在Compute Engine实例上使用PHP7.0运行Apache2。
PHP脚本:
<?php
...
$path ="sudo python3 A1.py ".$I1." ".$I2." ".$I3." ".$I4;
$command = escapeshellcmd($path);
$output = shell_exec($command);
var_dump($output);//Shows NULL
echo $output;//shows nothing
echo $command."\n";//Shows sudo python3 A1.py I1 I2 I3 I4
$file = file_get_contents('tmp.txt');
echo $file;
...
?>
预期结果-输出值应随输入形式的变化而变化
实际结果-该命令随输入格式值的变化而变化,但结果与上一次终端计算的结果相同,并且不随输入值的变化而变化。因此shell_exec()
似乎执行不正确。
有人可以告诉我如何在Linux VM实例中解决此问题吗?