2011-06-24 110 views
3

當我在PHP執行與shell_exec我的命令,它總是返回一個空字符串。我試過shell_exec('ls -l');,它工作。我把這個命令作爲一個單獨的文件並且仍然是相同的結果。了shell_exec返回空字符串

$shellOutput = shell_exec("pacmd list-sinks | grep 'volume: 0:' | tail -1 | awk '{ print $3 }'"); 

//return execute status; 
echo trim($shellOutput); 
+0

如在手冊'EXEC提及()'返回執行命令的輸出的最後一行。你確定,你的命令產生任何輸出,或者它最後不輸出空行? – KingCrunch

+0

以及這是當我在命令行中執行沒有空行。里斯託@里斯託桌面:在/ var/WWW/PulseAudioVolumeControl $ ./volume 24% –

+0

嘗試'了shell_exec( 「這pacmd」)',看看你的程序包含在由PHP使用'$ PATH' –

回答

1

我改變了sudoers文件到 ALL ALL =(ALL):ALL NOPASSWD(非常聯合國的安全,但只是爲了找東西一定要工作),

然後我做了

須藤-u名爲myUsername /path/to/script.sh

其中script.sh 有 出口VAR =價值 出口VAR =價值

所有的環境變量是NE子宮頸(你可以做一個printenv從一個用戶誰可以正確pacmd看到你需要什麼。可能是一個好的主頁,也可能是一個XAUTHORITY)。

希望幫助

+1

你可以嘗試的另一件事是用--system標籤運行脈衝。我還沒有嘗試過,但它在我的待辦事項清單上。它使它不特定於登錄的用戶。 – cyrusv

+0

你可以有任何機會[這個]的答案(http://stackoverflow.com/questions/33974037/shell-exec-empty-response-for-nslookup-query)?? –

1

大多數的PHP腳本由Apache的運行時間,如果那是你的腳本的話,那麼Apache用戶可能沒有足夠的權限運行這個命令。先檢查一下。如果它作爲CLI腳本運行,那麼檢查PHP用戶是否可以運行該腳本。

+0

正是CLI的命令運行需要。所以這個問題可能出現在Apache的網頁設置上? –

+0

這將清除它,Linux有一個用戶/組權限系統,現在你只需要檢查,如果Apache用戶必須運行此命令或者不 – Kumar

+0

好是這可能是問題的權限,但我沒有任何線索如何解決這,我試圖通過添加組SGID 4711並將組用戶改爲root:root來使腳本可執行。還沒有運氣,任何替代品? –