2015-11-17 262 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