Читання і запис в бінарному режимі
Ми вже уміємо відкривати файли. Тепер поговоримо про їх обробку, тобто читанні і записі. На мал. 11.1 і 11.2 показано, як відбувається читання і запис бінарних файлів.
Для кожного відкритого файлу система зберігає величину, яка називається покажчиком поточної позиції файлу. При відкритті файлу цей покажчик встановлюється на початок файлу. З кожним викликом функції читання файлу покажчик поточної позиції зрушується на певну кількість байтів (див. мал. 11.1).
Line1\nLine2\Line3<- Line1\nLine2\Line3<- Line1\nLine2\Line3<-
Л Л Л
після відкриття читаємо 7 байтів досягнутий кінець файлу
fread(Sf. 7)
Мал. 11.1. Читання бінарного файлу
Line1\nLine2MJne3<- Line1\nBYTe2\Line3<- Нагадаю, що \n — один
символ. Запис даних в
зрушуємо покажчик на Записуємо три байти
7 байтів вут фаил починається з позиції
на яку указує покажчик (див. мал. 11.2).
Мал. 11.2. Запис бінарного файлу тт 1Г
і ^ Читання двійкового (бинарно-
го) файлу здійснюється
функцією fread(). Даній функції потрібно передати всього два параметри -идентификатор файлу і кількість символів, яку потрібно прочитати. Функція повертає рядок, в якому будуть прочитані символи. Якщо
як параметр функції буде вказано більше число символів, чим є у файлі насправді, то помилки не буде — просто буде виведено все, що є.
Приклад читання двійкового файлу приведений в лістингу 11.1. Лістинг 11.1. Читання двійкового (бінарного) файлу
$f = fopen("/home/den/lines.txt","r") or die("0um6Ka при відкритті файла\ п"); $s = fread($f, 4); echo $s;

Мал. 11.3. Чтенієдвоїчного(бінарного) файлу
Ми відкрили файл в бінарному режимі "тільки читання". Потім ми прочитали 4 байти і записали їх в рядок $s, яка була виведена на екран. На мал. ll.3 ми бачимо сам файл lines.txt, а також виведення сценарію — рядок Line.
Для запису символів у файл використовується функція fwrite(), якою потрібно передати два параметри — ідентифікатор файлу і рядок, який буде записаний у файл.
У приведеному вище прикладі після читання чотирьох байтів покажчик зупинився на п'ятому байті: наступна операція читання або запису почнеться з п'ятої позиції. Це означає, що якщо нам потрібно записати що-небудь після символів Line, ми можемо відразу після операції читання записати потрібні нам дані. Але адже ми відкрили файл в режимі
читання, тому зараз запис неможливий. Виправимо це упущення. Напишемо сценарій, який працюватиме так:
Відкриває файл в режимі запису.
«Перемотує» файл на п'яту позицію, тобто встановлюєпокажчик поточної позиції.
Записує інформацію у файл.
| Зберігає зміни у файлі.Текст сценарію приведений в лістингу 11.2.
Лістинг 11.2. Запис в бінарний файл
<?
$f = fopen("/home/den/lines.txt","r+") or с11е("0шибка при відкритті файла\ п"); fseek($f, 4, SEEK_SET); fwr.ite ($f, "BYTE") ; fflush($f); ?>