从php运行Shell脚本

时间:2017-05-17 22:09:30

标签: php linux apache shell docker

我有一个问题,已经多次通过网络问过,但没有一个解决方案可以帮助我解决问题。

我需要一个带有单个按钮的非常简单的网站,通过该按钮,执行单个shell命令以部署docker容器。

为此我有3个文件都位于/ var / www / html /:

1- Depl-Script(一个简单的Linux文件,由chmod + x和chmod 777生成,并且没有.sh扩展名,包括一个命令:

docker run -it -p 8080:8080 surrogate

2-一个DepGUI.php

<?php
// $output=shell-exec("/var/www/html/Depl-Script"); //didn't work
$output=shell_exec("./Depl-Script"); //this doesn't work neither
echo $output; //prints 0
$output1=shell_exec("whoami"); //prints www-data
echo $output1;
?>

3- a Main.html,包括:

<form action="DepGUI.php">
    <input type="submit" value="Open Script">
</form>

Shell-exec不能用于运行shell脚本。 我怎么知道它不起作用?我检查了泊坞容器,没有创建任何东西。

我尝试了哪些解决方案:

1)我从CLI用户运行shell脚本(Dep-Script)时工作正常。

2)为了确保,我更改了etc / passwd文件,找到了带有www-data用户的行并将其登录shell改为/ bin / bash,然后通过www-data(apache)用户,我执行了相同的shell脚本,它的工作原理。 (我将/ etc / passwd文件返回到原始形状)

3)我检查了/etc/php5/apache2/php.ini和/etc/php5/cli/php.ini和exec,并且没有禁用shell_exec。

4)我用“sh”参数检查了shell-exec和exec命令,但是没有用。

提前感谢任何帮助/评论。 感谢

更新

我将错误重定向到输出

$output=shell_exec("./Depl-Script 2>&1");

我注意到错误与docker有关,“输入设备不是TTY”,然后我在脚本(Dep-Script)中的docker命令中删除了-t,错误消失了。我收到了与docker权限相关的新错误,并使用以下链接解决了它:

https://techoverflow.net/2017/03/01/solving-docker-permission-denied-while-trying-to-connect-to-the-docker-daemon-socket/

0 个答案:

没有答案