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

PHP Bash脚本调用另一个Bash脚本,php,linux,bash,Php,Linux,Bash,我有一个bash脚本,它接受一个参数,这个参数在PHP中由shell_exec(script.sh parameter)调用。基本上,我的目标是调用另一个非apache用户拥有的脚本 script.sh脚本是一个包含以下内容的文件(目前有一些错误处理命令): 当我通过运行su-s/bin/bashapache运行这个脚本并传递一个参数时,它就工作了 当我通过php中的按钮运行它时,archivescript.sh不会执行 whoami文件中写入了apache 参数文件中写入了正确的文件 env显

我有一个bash脚本,它接受一个参数,这个参数在PHP中由shell_exec(script.sh parameter)调用。基本上,我的目标是调用另一个非apache用户拥有的脚本

script.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输出正确,这就是我的脚本现在所在的位置,它将在将来移动

通过单击按钮运行的输出文件为空


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

我最近发布了一个项目,该项目允许PHP获取真实的Bash shell并与之交互。在这里获取:

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

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

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

echo $return1; //return from your script

我认为
sudoers
条目应该只说
/path/to/archivescript.sh
,前面没有
/bin/bash-c
。不,这不太可能与问题有关。这里有很多内容非常详细-我要检查的最重要的事情是“-i”标志是否会导致复杂性,以及Web服务器是否正在运行chroot。@Barmar Taking away/bin/bash-c在以apache用户身份登录时提示输入密码,并且对php也不起作用。这就是说,如果我删除sudo-I,去掉/bin/bash-c对apache用户有效,但对php无效。@symcbean我不确定你所说的“这里有很多东西,这是非常复杂的”,但如果你说有很多东西是奇怪的,你能详细说明一下,这样我就可以正常运行了吗?Web服务器未运行chroot。如果我删除sudo-I,那么去掉/bin/bash-c对apache用户有效,但对php无效。
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
$shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);

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

echo $return1; //return from your script