2010-11-22 2 views
0

Здравствуйте, я пытаюсь вывести использование моей памяти в PHP.Проблемы с выходом из exec в PHP

Мой код выглядит следующим образом:

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

Теперь проблема заключается в том, что текст печатается

Memory:/

И var_bump дает мне это:

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

Эта строка не должна (73), но (29). Если я сделать свой собственный массив не существует никаких проблем:

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

Может кто-нибудь дать мне решение или следующий шаг в отладке это?

С наилучшими пожеланиями, Allan

ответ

1

Когда я бегу free -m, я на самом деле получить около 73 символов (много пространства есть):

Mem:   2047   0  2047   0   0   0 

Я думаю, вы обнаружите, что это то, что вызывает ваши пустые значения used и total: explode подбирает пустые строки где-то в этих промежутках между Mem: и 2047.

Одним из решений является использование preg_split с сепаратором "/\s+/".

+0

Ой спасибо. Я займусь этим! PHP печатает только одно пространство. –

1

Удалите пробелы, такие как:

explode(" ", preg_replace('/\s+/', ' ', $out[1])); 
Смежные вопросы