powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / php fread
2 сообщений из 2, страница 1 из 1
php fread
    #38323796
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос простой.

ктото может обяснить что написано в документации.

================

fread() читает до length байт из файлового указателя handle. Чтение останавливается как только было достигнуто одно из следующих условий:

было прочитано length байт
достигнут EOF (конец файла)
стал доступен пакет или произошел таймаут сокета (для сетевых потоков)
если читаемый поток является буферизованным и не представляет собой обычный файл, то за один раз максимум читается количество байт, равное размеру одной порции данных (обычно это 8192), однако, в зависимости от ранее буферизованных данных размер возвращаемых данных может быть больше размера одной порции данных.
============

интересует сторока
остановиться чтение если пакет стал доступен. Это как понимать?

и вопрос в догонку.
если читаеться файл (оба варианта - локальный/удалённый) на что может повлиять размер чтения.

ну скажем читаю по 4 байта? и вообще как узнать, какими порциями оптимальней читать.

Обработка скажем такая.
читаю из файла порцию, применяю к ней операцию побитовое отрицание, пишу в другой файл(локальный)

вот при каком размере блока для чтения будет оптимальная производительность?
...
Рейтинг: 0 / 0
php fread
    #38323853
anvano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При получение данных через сокет - данные буферизируются.
Пока сокет не забуферизирует н-ое количество байт, он не отдаст их функции fread() (пакет данных не доступен).
Как только сокет сочтет, что буфер заполнен - пакет данных в буфере становится доступным для вычитывания функцией fread().

Проблема в том, что если в буфер сокета пришло МЕНЬШЕ данных, чем указано во втором параметре fread() то функция не станет ждать и вычитывать остальные нехватающие данные. Именно это и означает, что функция fread() завершает чтение, как только "стал доступен пакет" независимо от объема этого пакета.

Поэтому при чтении из сокета принято вручную в цикле контролировать объем вычитанной информации и дочитывать, если пришло меньше, чем надо. Либо использовать специальные функции для работы с потоками типа http://www.php.net/manual/en/function.stream-get-meta-data.php
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / php fread
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]