2011-06-24 104 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来使脚本可执行。还没有运气,任何替代品? –