Я новичок в PHP, и у меня есть вопрос о буферизации вывода. У меня есть этот код, который я нашел в сети:
ob_start();
system('ipconfig /all');
$contents = ob_get_contents();
ob_end_clean();
$searchFor = "Physical";
$pmac = strpos($contents, $searchFor);
$mac = substr($contents, ($pmac + 36), 17);
return $mac;
Это все работает нормально, но я не понимаю использование буфера вывода здесь. Если я изменю его на:
$contents = system('ipconfig /all');
$searchFor = "Physical";
$pmac = strpos($contents, $searchFor);
$mac = substr($contents, ($pmac + 36), 17);
return $mac;
Кажется, что он не может отфильтровать содержимое $ content, чтобы найти mac-адрес. Так что же для этого делает выходная буферизация?
Из того, что я понимаю о буферизации вывода, она загружает всю страницу в одну переменную, а затем возвращает все сразу, так что страница загружается сразу и быстрее. Я не могу понять, как это изменило бы вывод так резко в эта ситуация.
system()
Вызов не только запустит команду, но и отобразит вывод. По крайней мере, ваш пример кода должен был присвоить возвращаемое значение.
Кроме того, необходима выходная буферизация, так как system
call будет сбрасывать результаты команды непосредственно на веб-сервер (если нет явного выходного буфера).
То, что просто должно было быть использовано здесь, это exec()
— с присвоением результата & $contents
сразу.
Других решений пока нет …