PHP Bash脚本调用另一个Bash脚本

时间:2015-09-30 22:11:22

标签: php linux bash

我有一个bash脚本,它通过shell_exec(script.sh参数)在PHP中调用参数。基本上,我的目标是调用另一个不是apache的用户所拥有的脚本。

script.sh脚本是一个包含以下内容的文件(现在有一些错误处理命令):

#/bin/bash
whoami>>whoami
echo $1 >> parameter
while read f; do
env>>envoutput
sudo -i -u archivescriptowner /path/to/archivescript.sh -command archive >> output
done < $1

在我的/ etc / sudoers文件中,我有以下内容:

apache ALL=(archivescriptowner) NOPASSWD: /bin/bash -c /path/to/archivescript.sh  * 

当我通过运行su -s /bin/bash apache运行此脚本并传递参数时,它可以正常工作。

当我通过php中的按钮运行它时,archivescript.sh不会执行

whoami文件写有apache

参数文件写入了正确的文件

env显示以下内容

Term=xterm
LD_LIBRARY_PATH=/path/to/library
PATH=/sbin/:usr/sbin:/bin:/usr/bin
PWD=/var/www/html
LANG=C
SHLVL=4
=/bin/env

PWD输出正确,这是我的脚本现在的位置,它将来会被移动。

按钮单击运行时的输出文件为空白。

我不知道为什么这不起作用。任何见解都会有所帮助。如果我需要提供任何其他信息,请告诉我。

1 个答案:

答案 0 :(得分:1)

我最近发布了一个项目,允许PHP获取真正的Bash shell并与之交互。在此处获取:https://github.com/merlinthemagic/MTS

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

$shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);

$return1  = $shell->exeCmd('/path/to/archivescript.sh');

echo $return1; //return from your script