fgets is faster but stream_get_line is more useful in a tcp server scripts.
when fgets reads some bytes from socket, where EOF is reached, it returns bool(false) same as stream_get_line
BUT if remote client drops connection, and server script will try to read some data with function fgets, function will return bool(false), and stream_get_line will return string(0) ""
so you can detect remote client disconnection with stream_get_line, and cannot with fgetsstream_get_line
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
stream_get_line
Референца за `function.stream-get-line.php` со подобрена типографија и навигација.
stream_get_line
класата mysqli_driver
stream_get_line — Зема ред од ресурс на поток до даден разделувач
= NULL
Зема ред од дадениот рачка.
Читањето завршува кога length бајти се прочитани, кога непразната низа наведена со ending се најде (што е
not вклучено во вратената вредност), или на EOF
(што и да дојде прво).
Оваа функција е речиси идентична со fgets() освен што дозволува разграничувачи на крајот од редот различни од стандардните \n, \r и \r\n, и прави not го враќа самиот разграничувач.
Параметри
stream-
Валидна рачка на датотека.
length-
Максималниот број на бајти што треба да се прочитаат од рачката. Негативни вредности не се поддржани. Нула (
0) значи стандардна големина на парче сокет, т.е.8192bytes. ending-
Изборен разграничувач на низа.
Вратени вредности
Враќа стринг до length бајти прочитани од датотеката посочена од stream, или false при неуспех.
Белешки од корисници 2 забелешки
This function is very efficient to redirect streams. I have older scripts to compare, and recent versions of PHP are so fast, that sometimes 2 lines might get fed into one, and this happens only on PHP 8.3 and 8.4.
After digging, i found that throttling a bit is the best to do to maintain retro compatibility.
$line = stream_get_line($response, 1024, "\n");
usleep(10000);