2016-05-02 12 views
1

Wenn der Befehl "dmidecode -s prozessorfrequenz" im Terminal ausgeführt wird, werden Informationen angezeigt: 2000 MHz. Aber wenn ich eine PHP-Skript auszuführen:Warum Linux Befehl dmidecode, wenn die Verwendung in exec nichts zurückgibt?

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

Es gibt nichts zurück.

Aktualisierung:
Befehl im Beispiel gibt 1 Zeile zurück. In diesem Fall können wir exec verwenden.
Vielleicht anstelle von dmidecode diesen Anwendungspfad zu verwenden? Aber was ist der Weg?

Antwort

0

exec ‚s $output enthält nur die letzte Zeile aus dem Ergebnis:

die letzte Zeile aus dem Ergebnis des Befehls. Wenn Sie einen Befehl ausführen müssen und alle Daten aus dem Befehl ohne Interferenz direkt zurückgeliefert werden, verwenden Sie die Funktion passthru().

Wenn Sie die volle Ausgabe erfassen möchten, verwenden Sie oder 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

Erstes Beispiel gibt Fehler 127 –

+0

@NazarVozniy, na ja, dann der Befehl zurück: 'Fehler 127' String. Wenn Sie das nicht erwartet haben, sollte das Problem im Befehl selbst auftreten. Ich habe gerade gezeigt, wie man 'stdout' und' stderr' einfängt. –