PHP: количество байтов - PullRequest
2 голосов
/ 28 мая 2011

Скажем, я прочитал несколько байтов, таких как:

$data = fread($fp, 4096);

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


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

Ответы [ 2 ]

5 голосов
/ 28 мая 2011

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

3 голосов
/ 28 мая 2011

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

mb_strlen($data, '8bit')

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

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

...