无法从PHP执行Bash脚本

时间:2015-11-17 10:26:20

标签: php ajax html5 bash sudo

我正在尝试从Bash Script脚本执行一个简单的PHP。我从HTML5前端页面收集数据,通过ajax传递给PHP脚本,获取变量,然后将这些变量传递给.sh脚本,但我收到了类似的消息:

./test_bash.sh: line 13: ./test.txt: Permission denied

我尝试更改权限chmod 777 test_bash.sh,尝试修改sudoers.d文件,尝试过:shell_exec("echo password_for_the_user | sudo -S command_to_execute"); ...但Bash script无法写{ {1}}文件。

这是我的基本代码,首先是test.txt

PHP code

其次,<?php $var1 = json_decode($_POST['var1']); //from front-end html5 $var2 = json_decode($_POST['var2']); $var3 = json_decode($_POST['var3']); $response = shell_exec("./test_bash.sh $var1 $var2 $var3 2>&1"); echo "$response"; ?> 代码:

Bash

2 个答案:

答案 0 :(得分:2)

我相信您还必须更改txt文件的权限,以便apache(实际执行脚本的用户)能够写入。

使用public void DocumentCompleted(object sender, EventArgs e) { var browser = (sender as WebBrowser); if (browser != null && browser.Document != null && browser.Document.Body != null) { var documentHtml = browser.Document.Body.InnerHtml; browser.Document.Body.InnerHtml = Replacer.Replace(documentHtml); } } 并更改权限时要小心,传递不需要的变量很容易......

答案 1 :(得分:1)

当你说

echo $var1 $var2 $var3 > ./test.txt

您将{1}将var1,var2和var3 echo放入文件test.txt中,该文件与运行它的脚本位于同一目录中。

因此,如果您在/var/www,则echo $var1 $var2 $var3 > ./test.txtecho $var1 $var2 $var3 > /var/www/test.txt相同。

您遇到的问题包括以下错误:

  

./ test_bash.sh:line 13:./ test.txt:Permission denied

这告诉您不允许您写入文件/var/www/test.txt。为了能够这样做,请将写入权限更改为此文件,以便&#34;其他人&#34; (即用户wwwapache)可以写入其中:

chmod o+w /var/www/test.txt

或者,或许更好,写入另一个目录。例如/tmp

最后,请注意it is recommendable to quote your vars。所以说得好:

echo "$var1 $var2 $var3" > test.txt
#    ^                 ^