为什么Linux命令dmidecode在exec中使用时什么都不返回?

时间:2016-05-02 06:44:59

标签: php linux terminal debian exec

如果在终端中运行命令“dmidecode -s processor-frequency”,则显示信息:2000 MHz。 但是当我运行PHP脚本时:

exec("dmidecode -s processor-frequency", $output);
print_r($output);

它什么都不返回。

更新:
示例中的命令返回1行。在这种情况下,我们可以使用 exec 也许代替 dmidecode 来使用此应用程序路径? 但路径是什么?

1 个答案:

答案 0 :(得分:0)

exec' s $output仅包含结果中的最后一行:

  

命令结果的最后一行。如果您需要执行命令并将命令中的所有数据直接传回而不受任何干扰,请使用passthru()函数。

如果要捕获完整输出,请使用passthruproc_open

<强> passthru

$command = "dmidecode -s processor-frequency";
passthru($command, $output);
echo $output;

<强> proc_open

$command = "dmidecode -s processor-frequency";
$desc = [ 1 => ['pipe', 'w'], 2 => ['pipe', 'w'] ];
$proc = proc_open($command, $desc, $pipes);

if (!is_resource($proc)) {
  fprintf(STDERR, "command failed: $command\n");
  exit(1);
}

if ($output = stream_get_contents($pipes[1])) {
  fprintf(STDOUT, "STDOUT: %s\n", $output);
}

if ($error = stream_get_contents($pipes[2])) {
  fprintf(STDERR, "STDERR: %s\n", $error);
}

fclose($pipes[1]);
fclose($pipes[2]);

proc_close($proc);