2011-05-30 115 views
2

嗯,我有這個程序,我需要運行任何功能,但它位於我的dekstop(這個Ubuntu的11.04)。問題與執行()在PHP

我將它移動到/ home/Username,但沒有骰子。

我跑

$blah = exec('sudo | echo mypassword | /home/server1/program commandhere', $test); 
var_dump($test); 
var_dump($blah); ?> 

輸出是什麼。

我被告知如果我想通過sudo運行它,我需要將www-data的Apache用戶添加到sudoers列表中,我添加了它,但沒有再次運氣。 基本上,我已經嘗試了很多東西,它只是不會運行。爲什麼?

編輯: 如果我把它粘貼到終端,它工作得很好,只是不與exec,系統或passtrhu。

+0

你爲什麼管道'sudo'到'echo'的輸出? – 2011-05-30 01:24:31

+0

因爲當你做sudo程序時會要求你輸入密碼,所以在做sudo之前你不要輸入密碼。 – dikidera 2011-05-30 02:03:41

+0

你調用'sudo'的方式確實不起作用。爲了測試,試試這個:'sudo | echo mypassword |回聲測試>/test.txt'。它會顯示一個'Permission denied'錯誤。儘管如此,確保你最近沒有使用'sudo',因爲這會緩存你的憑證並且會改變測試結果。 – rid 2011-05-30 02:26:37

回答

2

使用echo mypassword | sudo -S代替註釋掉以下行。

這也取決於哪個用戶具有sudo權限。如果您想從apache進程運行此操作,則還需要授予apache用戶sudo的權限。

而且,我只想澄清,命令應該是:

echo mypassword | sudo -S /home/server1/program commandhere 
+0

即使如此,該程序不會執行..或至少沒有打印任何內容,因爲它應該是。還有很多要打印的數據。 – dikidera 2011-05-30 02:02:12

+0

更新了答案。 – rid 2011-05-30 02:05:32

+0

對不起,它不工作。程序應該打印大量的數據,根據exec它應該存儲打印在變量中的每一行,但沒有任何內容。所以我假設程序從未被執行過。 – dikidera 2011-05-30 02:11:14

0

查看您的安全日誌。不知道它在Ubuntu上的位置,可能是/ var/log/secure或/ var/log/messages。我敢打賭,你會發現類似於sudo requires a TTYsorry, you must have a TTY to run sudo的消息,表明sudo被配置爲在沒有真正的交互式shell的情況下無法工作。也就是說,sudo將不允許您在腳本中使用它或被外部程序調用。

我最近在嘗試將Gnome鍵盤快捷鍵綁定到sudo命令時自己處理了此問題。

如果是這樣的話,你需要在/etc/sudoers

#Defaults requiretty 
+0

不,我只有env_reset。它只是沒有工作...程序沒​​有被執行。 – dikidera 2011-05-30 02:00:50