2016-05-02 17 views
1

ターミナルで "dmidecode -s processor-frequency"コマンドを実行すると、2000 MHzの情報が表示されます。 PHPスクリプトを実行したとき:execで使用するLinuxコマンドのdmidecodeが何も返さないのはなぜですか?

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

戻り値なし。

更新:
コマンドは1行を返します。この場合、execを使用することができます。
の代わりに、このアプリケーションパスを使用するdmidecode? パスは何ですか?

答えて

0

execさん$output結果から最後の行だけが含まれています

コマンドの結果から、最後の行を。コマンドを実行し、コマンドからのすべてのデータを干渉なく直接戻す必要がある場合は、passthru()関数を使用します。

フル出力をキャプチャする場合は、passthruまたはproc_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); 
+0

まず例エラー127 –

+0

@NazarVozniy、ウェル、コマンドリターン 'エラー127'文字列を返します。それがあなたが期待していたことでないなら、問題はコマンドそのものにあるべきです。私はちょうど 'stdout'と' stderr'をキャプチャする方法を示しました。 –

関連する問題