【问题标题】:shell_exec returns empty stringshell_exec 返回空字符串
【发布时间】:2011-06-24 13:19:06
【问题描述】:

当我在 PHP 中使用 shell_exec 执行命令时,它总是返回一个空字符串。我试过shell_exec('ls -l'); 并且它有效。我把命令作为一个单独的文件,结果还是一样。

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

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

【问题讨论】:

  • 如手册中提到的exec() 返回执行命令输出的最后一行。您确定您的命令会产生任何输出,还是最后不会输出空行?
  • 嗯,这是我在命令行中执行时没有空行。 risto@risto-desktop:/var/www/PulseAudioVolumeControl$ ./volume 24%
  • 试试shell_exec("which pacmd")看看你的程序是否包含在PHP使用的$PATH
  • pacmd list-sinks 之后添加2>&1 或查看error.log 中的消息。这是最常见的命令未找到。
  • 你的意思是这个 $shellOutput = ("pacmd list-sinks 2>&1 | grep 'volume: 0:' | tail -1 | awk '{ print $3 }'");并且此命令没有错误,我厌倦了执行 ll 命令,然后在 error.log 中列出了错误,但在 pacmd 上没有错误。 sh: ll: 未找到

标签: php shell-exec


【解决方案1】:

我将 sudoers 更改为 ALL ALL = (ALL) :NOPASSWD ALL (非常不安全,但只是为了找到一些可以正常工作的东西),

然后我做了一个

sudo -u myusername /path/to/script.sh

在哪里 script.sh 拥有 导出 VAR=值 导出 VAR=值

对于所有必要的环境变量(您可以从可以正确 pacmd 的用户执行 printenv 以查看您需要的内容。可能是一个好的 HOME,也可能是 XAUTHORITY)。

希望对你有帮助

【讨论】:

  • 您可以尝试的另一件事是使用 --system 标签运行脉冲。我还没有尝试过,但它在我的待办事项清单上。它使它不特定于登录用户。
  • 您能否回复this??
【解决方案2】:

大多数时候 php 脚本是由 Apache 运行的,如果你的脚本是这种情况,那么 Apache 用户可能没有足够的权限来运行这个命令。先检查一下。如果它作为 CLI 脚本运行,则检查 PHP 用户是否可以运行该脚本。

【讨论】:

  • 在 php CLI 上,该命令完全按照需要运行。所以问题可能出在 Apache 的网页端设置上?
  • 这样就清除了,Linux有用户/组权限系统,现在你只需要检查Apache用户是否有权限运行这个命令
  • 嗯,是的,这可能是问题所在,但我不知道如何解决这个问题,我尝试通过添加组 SGID 4711 并将组用户更改为 root:root 来使脚本可执行。仍然没有运气,还有其他选择吗?
  • 你需要让Apache用户运行命令,在我的Debian机器上Apache用户是www-data所以我会让www-data运行pacmd,怎么办这个,将www-data添加到当前可以运行pacmd的同一个用户组,在/etc/sudoers中添加这个www-data ALL=(ALL) NOPASSWD:ALL并尝试su www-data然后运行pacmd
【解决方案3】:

您可能想在命令末尾尝试“ > file.txt 2>&1”。它会将输出重定向到一个单独的文件。

$command = "cmd command > outputs.txt 2>&1";
shell_execute($command);

你最终会得到一个看起来像这样的文件:

b'cmd command output contents\r\n'

【讨论】:

    【解决方案4】:

    也许这就是为什么

    尝试使用system

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-18
      • 1970-01-01
      • 1970-01-01
      • 2016-04-10
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      • 2020-01-27
      相关资源
      最近更新 更多