t-alexashka
@t-alexashka
Сразу пишу legacy код

Как выводить результат php-cli скрипта по мере появления данных?

Привет друзья!

если выполнить файл test.php с таким содержимым для примера:

foreach(range(1, 10) as $iter) { 
    echo $iter . PHP_EOL; 
    sleep(1); 
}


вот таким образом:

$result = `php test.php`;

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

Вопрос: есть ли какой то способ из пхп вызывать скрипт и перехватывать данные по мере их поступления? (например для пересылки)

что-то типа (псевдокод) :

exec('php test.php', function($update) {
    Tranport::sendText($update); // 1...2...3...
})


Заранее спасибо за наводку!
  • Вопрос задан
  • 345 просмотров
Решения вопроса 2
DevMan
@DevMan
вы путаете пхп в целом и пхп, исполняемый веб-сервером в частности.
в вебе спокойно можно выводить данные практически риал-тайм. для этого есть множество техник, начиная от аякса/вебсокетов и заканчивая банальным флешем пхп-буфера.

как раз в консоли (коей php-cli и является) буфера нет, весь вывод сразу вываливается в stdout.
Ответ написан
@Vitsliputsli
exec работает синхронно, для обмена данными с другим процессом используйте:
1) конвейер (php test.php | php main.php);
2) сокеты (tcp, unix, web);
3) сторонние инструменты (файл, БД, брокер сообщений).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@inFureal
Тебе нужно смотреть в сторону "асинхронности". Например ReactPHP
Loop::addPeriodicTimer(1, function() {});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы