Всегда ли PHP fread () читает по крайней мере 4096 байт? - PullRequest
1 голос
/ 28 ноября 2010

Согласно файлу начальной загрузки Drupal 7:

// PHP only performs buffered reads, so in reality it will always read
// at least 4096 bytes. Thus, it costs nothing extra to read and store
// much so as to speed any additional invocations.

PHP всегда будет читать 4096 независимо от того, указали ли вы меньшее значение для параметра length. Это правда? Если да, то нет ли способа сделать небуферизованные операции чтения?

Редактировать: Я хотел бы прочитать /dev/urandom без необходимости потреблять энтропию.

Ответы [ 3 ]

3 голосов
/ 28 ноября 2010

Если у вас файл размером менее 4096 байт, он будет меньше или дополнен нулевыми значениями.

Что не так с буфером длиной 4096 байт в любом случае - он слишком мал, чтобы влиять на потребление памяти каким-либо существенным образом, если только здесь что-то не хватает.

1 голос
/ 28 ноября 2010

Здесь я получил для вас функцию в PHP - stream_set_read_buffer ():

int stream_set_read_buffer ( resource $stream , int $buffer )

buffer: количество байтов для буферизации.Если буфер равен 0, то операции чтения не буферизируются.Это гарантирует, что все операции чтения с использованием fread () будут завершены, прежде чем другим процессам будет разрешено выполнять запись в этот выходной поток.

Итак, если вы хотите изменить поведение по умолчанию, тогда эта функция должна быть полезна для экспериментов.

0 голосов
/ 02 июля 2011

Казалось бы, возможный обходной путь для PHP <5.3 - использовать file_get_contents (): </p>

$output = file_get_contents('/dev/urandom', FALSE, NULL, -1, $bytes);

Это немного уродливо. Не уверен, как подтвердить, что он небуферизован, кроме чтения источника C.

http://svn.php.net/viewvc/php/php-src/branches/PHP_5_2/ext/standard/file.c?revision=298881&view=markup

http://svn.php.net/viewvc/php/php-src/branches/PHP_5_2/main/streams/streams.c?revision=293175&view=markup

Не похоже, что входной поток помечен как небуферизованный, поэтому кажется, что он также считывает минимальный размер буфера из него в PHP 5.2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...