Использование 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 или аналогичную функцию, чтобы сохранить вывод в файл.

Другие вопросы по тегам