2010-11-22 10 views
0

Hallo, ich versuche, meinen Speicherverbrauch in PHP auszugeben.Probleme mit der Ausgabe von exec in PHP

Mein Code sieht wie folgt aus:

exec('free -m', $out); 
var_dump($out[1]); 
list($mem, $total, $used, $free, $shared, $buffers, $cached) = explode(" ", $out[1]); 
echo "Memory: " .$used. "/" . $total; 

Das Problem ist jetzt, dass die Text druckt

Memory:/

Und die var_bump gibt mir dies:

string(73) "Mem: 3024 1968 1055 0 159 608" 

Diese Zeichenfolge sollte nicht sei (73) aber (29). Wenn ich meine eigene Array es machen, ist keine Probleme überhaupt:

$out = array('','Mem: 3024 2020 1003 0 121 708',''); 
string(29) "Mem: 3024 1968 1055 0 159 608" 

Kann mir jemand eine Lösung geben, oder einen nächsten Schritt bei der Fehleranalyse?

Mit besten Grüßen, Allan

Antwort

1

Als ich free -m laufen, bekomme ich eigentlich über 73 Zeichen (viele Räume dort):

Mem:   2047   0  2047   0   0   0 

Ich glaube, du wirst das ist das finden, was verursacht hat Ihre leeren used und total Werte: explode nimmt die leeren Strings irgendwo in diesen Räumen zwischen Mem: und 2047.

Eine Lösung ist preg_split mit einem Separator "/\s+/" zu verwenden.

+0

Oh danke. Ich schaue hinein! PHP druckt nur ein Leerzeichen. –

1

die Räume entfernen wie:

explode(" ", preg_replace('/\s+/', ' ', $out[1]));