Вывод fgets не соответствует форматированию файла

Я пытаюсь сохранить вывод команды linux ifconfig в переменную и показать его в моем HTML. У меня две страницы, одна test.html и один ajax.php, Если я нажму на ссылку на test.html Затем выполняется запрос AJAX ajax.phpкоторый выполняет ifconfig и отправляет результат обратно test.html где весь html тега body заменяется выводом.

У меня есть этот код в моем ajax.php, Как видите, я пишу вывод ifconfig в файл, так что я могу прочитать каждую строку из файлового потока и вывести их.

shell_exec ("/sbin/ifconfig > /tmp/ifconfig 2>&1");
$ifconfig = fopen("/tmp/ifconfig","r") or die ("Unable to open file '/tmp/ifconfig'");

while(!feof($ifconfig))
{
echo fgets($ifconfig). "<br>";
}

fclose($ifconfig);

Но вместо вывода вроде этого:

 eth0      Link encap:Ethernet  HWaddr 0A:58:C2:71:7A:90
inet addr:172.15.47.121  Bcast:172.25.255.255  Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:238319 errors:0 dropped:0 overruns:0 frame:0
TX packets:122439 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:21355179 (20.3 MiB)  TX bytes:19679738 (18.7 MiB)

Я получаю этот вывод:

eth0 Link encap:Ethernet HWaddr 0A:58:C2:71:7A:905
inet addr:172.15.47.121 Bcast:172.15.255.223 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:23405 errors:0 dropped:14 overruns:0 frame:0
TX packets:16390 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1613474 (1.5 MiB) TX bytes:19949404 (19.0 MiB)

Может кто-нибудь сказать мне, как я могу получить вывод в том же формате, что и на самом деле?
Заметка: адреса не настоящие, я их поменял.

2

Решение

Если ваш вывод должен быть для сайта, просто оберните его в <pre></pre> теги:

echo "<pre>";
while(!feof($ifconfig))
{
echo fgets($ifconfig). "<br>";
}
echo "</pre>";

В pre теги, которые используют большинство браузеров monospace как шрифт, так что это больше похоже на прямой вывод на консоль.

2

Другие решения

Вывод искажен, потому что пробелы обрабатываются на странице html по-разному (они не отображаются, хотя они здесь, посмотрите исходный код вашей страницы).

Вас может заинтересовать свойство CSS white-space применяется к родительскому тегу html, чтобы изменить это поведение:

<body style="white-space:pre-wrap">
Your php here
</body>
1

По вопросам рекламы [email protected]