2015-11-17 213 views
7

我试图从PHP脚本执行简单的Bash Script。我收集来自HTML5前端页面数据,通过ajax PHP脚本,把变量,然后,通过这些给.sh剧本,但我已经得到了消息,如:无法从PHP执行Bash脚本

./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不能写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代码:

#!/bin/bash 

var1=$1; 
var2=$2; 
var3=$3; 

echo "$var1"; 
echo "$var2"; 
echo "$var3"; 

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

如果你说'echo $ var1 $ var2 $ var3>/tmp/test.txt',它能工作吗?看起来你不能在'test.txt'所在的目录中写入。 – fedorqui

+0

是的,现在它工作。谢谢! – Sergi

回答

2

我相信你必须改变对txt文件还权限,以便apache(实际执行脚本的用户)能够写入它。使用shell_exec()和更改权限还是比较容易通过不必要的变量时

不过要小心......

+0

它工作!非常感谢你:) – Sergi

+0

不客气:) @Sergi – orestiss

+1

要小心''var ='hello; rm -rf。'或类似的东西@Sergi – orestiss

1

当你说

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

echo荷兰国际集团VAR1,VAR2和VAR3进入文件test.txt位于与运行它的脚本相同的目录中。

因此,如果你在/var/www,那么echo $var1 $var2 $var3 > ./test.txt将与echo $var1 $var2 $var3 > /var/www/test.txt相同。

你所面临的问题在于这样的错误:

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

这是告诉你,你不能写入到文件/var/www/test.txt。为了能够做到这一点,更改写权限,这个文件让“别人”(即,用户wwwapache)可以写进去:

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

或者,可能会更好,写入到另一个目录。例如/tmp

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

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

感谢回复@fedorqui!它也有帮助! – Sergi