пытается реализовать eventSource на стороне сервера php следующим образом:
header("Content-Type: text/event-stream");
header('Cache-Control: no-cache');
Date_default_timezone_set('Asia/Tehran');
$path = '/home/bluhbluh/public_html/sign_in/folderName/';
while(true){
echo "retry: 1000" . PHP_EOL; // retry interval
ob_end_flush();
$files = array_diff(
scandir('folderName/'),
['.','..']
);
$phoneNumbers = array();
$p = '';
foreach($files as $file){
// read file
$p = preg_replace(
'/[^0-9]/',
'',
file_get_contents($path . $file, FILE_USE_INCLUDE_PATH)
);
$phoneNumbers[] = $p;
// remove file
unlink($path . $file);
// send event
// echo 'event: send' . PHP_EOL; // event type
echo 'data: ' . $p, "\n\n"; // phoneNumber
while (ob_get_level() > 0) {
ob_end_flush();
}
flush();
}
if ( connection_status() != CONNECTION_NORMAL or connection_aborted() ) break;
sleep(5);
}
if( ob_get_level() > 0 ) {
while (ob_get_level() > 0)
ob_flush();
ob_end_clean();
}
, но eventSource не отправляет события!
, если я удаляю функцию sleep (), это работает просто отлично.
что вызывает здесь проблему?
Я сказал « Отключение звука », потому что он выполняет работу (сканирует каталог и все ...), кроме части отправляющего события.
, что еще более странно в том, что это прекрасно работает при локальном запуске, но не на удаленном общем хосте
- = - = - = - = - [обновление]
сервер, похоже, буферизует вывод. отключение буферизации решает проблему.
- это работало локально, потому что удаленный сервер использовал mod_fastcgi и размер буферизации по умолчанию не равен 0 (как мой локальный сервер xampp apache)