Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по PHP.doc
Скачиваний:
198
Добавлен:
04.06.2015
Размер:
2.76 Mб
Скачать

Бинарные файлы

Бинарные файлы представляют собой последовательность символов длиной один байт, нумерация которых начинается снуля. В конце файла стоит метка EOFEnd Of File.

Объявляется бинарный файл так же, как и текстовый:

($fp = fopen(“D:/User/my_file.dat”, “wb”)) //открыт для записи

or die(“Невозможно открыть файл”);

где $fдескрипторфайла,

wb– режим открытия бинарного файла – для записи.

Таким образом, расширение имени бинарного файла - .dat,в режиме его открытия используется букваb (binary):

rb– чтение,

wb– запись,

ab – добавление в конец файла,

r+b- чтение с обновлением(rb + wb),

w+b- запись с обновлением,

a+b- добавление с обновлением.

Внимание!В бинарных файлах отсутствует понятиестроки(ESC-последовательность/nне интерпретируется). Запись и чтение из них осуществляетсяпобайтно(посимвольно):

($fp = fopen("C:/User/my_bin_file.dat", "wb")) //открыт для записи

or die("Невозможно открыть файл");

$str="abcdefghijklmnopqrstu";

fwrite($fp, $str);

$str="0123456789";

fwrite($fp, $str);

$str="абвгдежзиклмн";

fwrite($fp, $str);

fclose($fp); // закрытие файла

Структура созданного файла:

abcdefghijklmnopqrstu0123456789абвгдежзиклмн

Бинарный файл читается или посимвольно fgetc(), или поблочно fgets(), fread(), или целиком file_get_contents():

посимвольноечтение из файла:

($fp = fopen(“D:/User/my_bin_file.dat”, “rb”)) //открыт для чтения

or die(“Невозможно открыть файл”);

while (!feof($fp))

{

$chr=fgetc($fp); //посимвольное чтение из файла

echo $chr;

}

echo “<BR>”;

fclose($fp); // закрытие файла

поблочноечтение из файла:

($fp = fopen(“D:/User/my_bin_file.dat”, “rb”)) //открыт для чтения

or die(“Невозможно открыть файл”);

while (!feof($fp))

{

$str=fread($fp, 8); //чтение блоками по 8 байтов

echo $str;

}

echo “<BR>”;

fclose($fp); // закрытие файла

чтение файла целиком:

$str=file_get_contents(“D:/User/my_bin_file.dat”);

echo $str;

echo “<BR>”;

Во всех трех случаях на экране появится:

abcdefghijklmnopqrstu0123456789абвгдежзиклмн

Над бинарными файлами определены следующие операции:

a) перемещениеуказателя файла в заданную позицию

fseek(дескриптор файла, позиция, параметр)

где позиция- количество байтов (символов), отстоящих от заданного места,параметр - SEEK_SET- начало файла,

- SEEK_CUR- текущая позиция файла,

- SEEK_END- конец файла.

Пример 1: прочитать символ из бинарного файла, отстоящий от начала файла на9байтов:

($fp = fopen(“D:/User/my_bin_file.dat”, “rb”)) //открыт для чтения

or die(“Невозможно открыть файл”);

fseek($fp, 9, SEEK_SET);

$chr=fgetc($fp);

echo $chr;

На экран будет выведено:

j

Пример 2: прочитать символ из бинарного файла, отстоящий от конца файла на6байтов:

($fp = fopen(“D:/User/my_bin_file.dat”, “rb”)) //открыт для чтения

or die(“Невозможно открыть файл”);

fseek($fp, -6, SEEK_END); // отрицательное число!

$chr=fgetc($fp);

echo $chr;

На экран будет выведено:

з

б) определениеномера текущей позиции, занимаемой указателем файла (нумерация позиций начинается снуля)

ftell(дескриптор файла)

Пример: определить номера позиций начального и конечного символов файла:

($fp = fopen("D:/User/my_bin_file.dat", "rb")) //открыт для чтения

or die("Невозможно открыть файл"); // указатель – в начало файла

$n=ftell($fp);

echo “начало = $n”;

echo "<BR>";

fseek($fp, 0, SEEK_END);

$n=ftell($fp);

echo “конец = $n”;

echo "<BR>";

fclose($fp);

На экран будет выведено:

начало = 0

конец = 44

в) усечениефайла до заданного размера (в байтах):

ftruncate(дескриптор файла, новый размер)

При этом файл должен быть открыт в режиме, разрешающем запись:

($fp = fopen("D:/User/my_bin_file.dat", "wb")) //открыт для записи

or die("Невозможно открыть файл");

ftruncate($fp, 10);

fseek($fp, 0, SEEK_SET); // обязательно – в начало файла!

fclose($fp);

$str=file_get_contents(“D:/User/my_bin_file.dat”);

echo $str;

На экран будет выведено:

abcdefghij