2010-11-22 31 views
0

Bonjour, J'essaie de sortir mon utilisation de la mémoire en PHP.Problèmes avec la sortie d'exec en PHP

Mon code ressemble à ceci:

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

Maintenant, le problème est que le texte se imprime

Memory:/

Et le var_bump me donne ceci:

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

Cette chaîne ne devrait pas être (73) mais (29). Si je fais mon propre tableau il n'y a aucun problème:

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

Quelqu'un peut-il me donner une solution ou une étape suivante dans le débogage cela?

Cordialement, Allan

Répondre

1

Quand je lance free -m, je reçois en fait environ 73 caractères (beaucoup d'espaces là-dedans):

Mem:   2047   0  2047   0   0   0 

Je pense que vous trouverez c'est ce qui cause vos valeurs vides used et total: explode ramasse les chaînes vides quelque part dans ces espaces entre Mem: et 2047.

Une solution consiste à utiliser preg_split avec un séparateur de "/\s+/".

+0

Oh merci. Je vais y regarder! PHP imprime seulement un espace. –

1

Retirez les espaces tels que:

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