2012-08-03 80 views
0

目的:使用PHP來輸入命令直接到的Minecraft服務器控制檯PHP來調用一個shell腳本

我試着使用PHP腳本(從瀏覽器中運行)給exec()的shell腳本。當我運行從終端的PHP它的作品!但在瀏覽器中,沒有任何反應。

exec('sudo -u root sh /home/minecraft/whitelist-reload.sh', $out, $ret_val); 

當從終端運行,我得到一個「陣列0」,但瀏覽器給了我一個「陣列1」

問題是什麼? 有一次,我運行的外殼,應該不是所有的後工作,就好像你在一個終端?(這是否重要什麼是在外殼腳本?)

外殼具有所有rx權限,並在sudoers文件作爲

www-data ALL = NOPASSWD: /home/minecraft/whitelist-reload.sh 
+0

make'/ home/minecraft/whitelist-reload.sh'可執行文件並嘗試''sudo -u root /home/minecraft/whitelist-reload.sh' ' – MarcDefiant 2012-08-03 11:31:50

+0

使用shell_exec ()而不是用於測試目的。它不會給你命令的返回值,而是它的輸出,所以你可能會看到發生了什麼問題。 – inVader 2012-08-03 11:42:47

回答

0

原來......,所有我:

我已經發布了幾個問題在這裏,也有可能證明信息需要做的是採取「-u root」之後

1

的問題是,你運行一個終端作爲可能有sudo權限的用戶上的腳本,而阿帕奇/ Web服務器用戶沒有,所以$ret_val(實際上只是一個狀態碼)設置爲1(表示錯誤)。

嘗試var_dump($out);在這兩種情況下查看您的exec調用的結果。要從瀏覽器中完成這種操作,您可能需要查看proc_open和家族,或者將腳本的chmod改爲777,這樣apache用戶也可以運行它。讓腳本調用實際的shell腳本並返回它的輸出。這是非常危險的,只能用於您自己機器上的測試環境。切勿在生產環境中這樣做!輸入WWW的數據到sudoers文件後

interaction over ssh

opening a second shell, and load profile variables AND call another script