PHP: Функция fseek()

Покончив с основами чтения и записи текстовых файлов, давайте теперь уделим немного внимания работе с бинарными файлами. Работать с бинарными файлами намного труднее, чем с текстовыми, поскольку они по своей природе являются нечитабельными, и доступны для чтения только компьютеру.

В РНР запись бинарных файлов осуществляется так же, как и запись текстовых файлов (посредством функции fputs ()) и поэтому не требует дополнительных разъяснений. Фактически, единственным отличием (которое уже упоминалось) является использование режима b при открытии файла функцией fopen ().

Поэтому текущий раздел посвящен в основном функциям, связанным с чтением из файла бинарных данных и преобразованием их к виду, используемому в РНР. А именно, мы попробуем написать функцию, которая читает заголовок Zip-файла и определяет минимальный номер версии программы Zip, необходимой для распаковки этого файла. Для этого мы сначала ознакомимся с функциями fseek(),fread( ) и unpack().

При работе с бинарными файлами часто возникает необходимость перехода в различные позиции (или смещения) файла. Этим она отличается от работы с текстовыми файлами, которые, как правило, читаются и пишутся последовательно. В РНР установка указателя файла по определенному смещению внутри открытого файла осуществляется с помощью функции fseek (), которая имеет следующий синтаксис:

fseek($file ref, $offset [, $reference]) ;

где $file_ref — это поток, a $offset указывает число байт смещения от позиции, определяемой третьим параметром Sreference, который принимает значение одной из следующих трех констант.

Константы позиционирования для функции fseek()

SEEK_SET (По умолчанию) начало файла.
SEEK_CUR Текущая позиция файла.
SEEK END Байт, следующий за концом файла.

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

Функция fseek () возвращает нуль в случае успешного завершения и -1 в случае, если указатель файла не может быть установлен. Обратите внимание также на то, что отсчет смещений указателя в fseek() начинается с нуля и, следовательно, это необходимо учитывать при передаче параметра $of f set . Чтобы установить указатель файла в позицию $offset, функции fseek() необходимо передать параметр $offset — 1

Использование функции fseek ()

<?php
$fr = fopenCmybinfile.dat', 'rb');
if(!Sfr) exit;
/* Установить указатель на 11-й байт файла */
fseek($fr, 10);
/* Установить указатель на 10 байт от конца файла */
fseek($fr, -10, SEEK_END);
/* Переместить указатель на 2 байта от текущей позиции */
fseek($fr, 2, SEEK_CUR);
?>

После установки указателя в нужную позицию чтение соответствующих бинарных данных осуществляется при помощи функции fread (), синтаксис которой показан ниже:

fread($file_ref, $length)

где $file_ref указывает на соответствующий поток, а $ length определяет количество байт, которые необходимо прочитать из файла. После завершения эта функция возвращает фактически прочитанное количество байт.

Рейтинг
( 1 оценка, среднее 5 из 5 )
Загрузка ...