PHP не должно ждать первой команды; перед сном (), как это сделать? - PullRequest
0 голосов
/ 23 февраля 2020

Сначала мне нужно выполнить какую-то работу и написать «результат эха», затем подождать 10 секунд , затем сделать что-то.

Basi c пример:

// Now
echo date('h:i:s') . "\n";

// wait for 2 sec.
sleep(2);

echo date('h:i:s') . "\n";

PHP ждет около 2 секунд для записи всех команд эха. Но он должен написать первую эхо-печать; затем подождите 2 сек c. а затем напишите вторую дату. Как это решить? Я не прав?

Как этого добиться?

Ответы [ 2 ]

0 голосов
/ 23 февраля 2020

спасибо, что ответили на вопросы внутри комментариев. Итак, насколько я понимаю, вы управляете своей скирп за веб-сервером.

Я хотел бы отметить, что это возможно. Ключом magi c здесь является HTTP-заголовок Transfer-Encoding: chunked. Когда Apache не знает Content-Length, он начнет потоковую передачу ответа по частям клиенту / браузеру. Имея это в виду, должно быть возможно настроить Apache и PHP для поддержки этого.

Вот справочный вопрос, который стоит прочитать, чтобы понять топи c: Как сделать PHP генерирует ответ Chunked

Другое решение может состоять в том, чтобы взглянуть на что-то вроде https://reactphp.org. Я использовал его в прошлом, внес вклад в него и знаю, что он также решит вашу задачу, но это приведет к изменениям инфраструктуры.

Надеюсь, это поможет вам. Пожалуйста, дайте мне знать, если у вас есть дополнительные вопросы по этой теме c.

0 голосов
/ 23 февраля 2020

Если PHP запущен через веб-сервер, то, что вы просите, невозможно. PHP не контролирует, как веб-сервер буферизует данные. Грипп sh () влияет только на буферы PHP - решение о том, отправляет ли веб-сервер содержимое по HTTP,

Кроме того, даже если веб-сервер отправляет содержимое, браузер затем решает, когда сделать это. Логика c вокруг прогрессивного рендеринга в браузерах довольно сложна.

OTOH CLI SAPI отправит контент сразу после flu sh ()

...