Использование php для потоковой передачи данных таких программ, как `htop`
Используя один из этих кодов
system("htop");
//or
exec('htop');
как сохранить данные из htop, записанные в файл или что-то еще (ограничение времени скрипта установлено в 0, не волнуйтесь)
4 ответа
htop - интерактивная программа, которая работает в цикле до выхода и, похоже, не предлагает никаких флагов для выполнения одной итерации, а затем выхода, что затрудняет захват выходных данных.
Вы рассматривали возможность использования top? Вы можете ограничить его до 1 итерации с -n 1:
$resp = system("top -n 1");
print $resp;
<?php
`screen -d -m -S htop_session htop`;
sleep(1);
`screen -p 0 -S htop_session -X hardcopy`;
`screen -p 0 -S htop_session -X quit`;
?>
<pre>
<?php print file_get_contents('hardcopy.0'); ?>
</pre>
Я согласен с ответом @d_g, top - это программа, предназначенная для запуска в терминале. Я бы предложил использовать AJAX для частого обновления выходных данных top.
Кроме того, я хочу добавить информацию о функции passthru()
, Функция печатает вывод команды оболочки непосредственно в стандартный вывод php. Вам не понадобится дополнительная печать, и вывод будет доступен до завершения внешней программы. Это важно, если обработка команды занимает много времени. Таким образом, вы можете заменить:
$resp = system("top -n 1");
print $resp;
от
passthru('top -n 1');
system
а также exec
вернуть результаты команды в виде строки. Используйте fwrite или аналогичную функцию, чтобы сохранить вывод в файл.