如何使用php从Apache执行根文件夹中的脚本

时间:2016-03-21 21:50:48

标签: php python

我需要运行一个python脚本,在此之前我需要激活一个虚拟环境以便脚本运行并且它位于根文件夹中。这是执行此操作的命令(不使用源命令)

exec(root/Envs/ate/bin/python /var/www/cgi-bin/TStool/box_upgrade.py).

如何从apache执行。我在php中得到126错误。我已经给出了实际的路径。

  

126错误意味着 - “调用的命令无法执行。权限或命令不可执行问题。”。

我该怎么做实际路径位于根文件夹中,我无法将其移动到root之外。

<?php
  $op=exec('/root/Envs/ate/bin/python /var/www/cgi-bin/TStool     /box_upgrade.py',$output,$return);
  echo "Dir returned $return, and output:\n";
  var_dump($output);
  echo $return;  
  echo $op;
    ?>

有什么建议吗?感谢。

1 个答案:

答案 0 :(得分:1)

我最近发布了一个项目,允许PHP获取真正的Bash shell并与之交互(如果需要,可以作为root),它解决了exec()和shell_exec()的限制。在此处获取:https://github.com/merlinthemagic/MTS

下载后,您只需使用以下代码:

$shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1  = $shell->exeCmd('/root/Envs/ate/bin/python /var/www/cgi-bin/TStool/box_upgrade.py');
//the return will be a string containing the return of the command
echo $return1;

就安全性而言,它比以root身份运行apache要好得多。但让PHP靠近root,总是很棘手。

我构建的项目以两种方式之一实现了root bash shell:

1)你允许apache权限sudo python。

OR

2)每次需要具有root设置的shell时,都会将根凭据传递给对象。

选择你的毒药。 :)阅读文档。