PHP: Количество свободных байтов


Допустим, я прочитал такое количество байтов:

$data = fread($fp, 4096);

Поскольку fread прекратит чтение, если оно достигнет конца файла, как я могу точно узнать, сколько было прочитано? Будет ли strlen($data) работать? Или это может быть потенциально неправильно?


Чего я пытаюсь добиться, так это прочитать несколько байтов, а затем вернуться туда, где я был до того, как прочитал. И я стараюсь избегать использования арифметики (ftell, fread, ftell, сократить, fseek), так как файл потенциально может быть больше, чем PHP_INT_MAX и потенциально все испортит. Я бы хотел просто сделать fseek($fp, -$bytes_read, SEEK_CUR), но для этого мне нужно знать, сколько байтов я только что прочитал...

Author: Svish, 2011-05-28

2 answers

Проверьте это (непроверенное):

mb_strlen($data, '8bit')

Второй аргумент '8bit' заставляет функцию возвращать количество байтов.

Найдено в комментариях к руководство по php для mb_strlen.

 3
Author: Markus, 2011-05-28 08:38:20

После fread использовать ftell($fp) чтобы получить текущую позицию файла.

 5
Author: Midas, 2011-05-27 21:11:35