базовый курс

ГРУППА КУРСА

Чтение и запись данных в файле

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

Чтение из файла

Функцию fread() можно использовать для получения определённого количества данных из файла.

fread (файл, длина)

Параметры:

файл - дескриптор файла

длина - размер данных в байтах

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

При указании длины строки и при перемещении указателя нужно учитывать, что русские буквы имеют размер не один байт, а больше. Подробнее об этом сказано в теме "Работа со строками". Также не забудте, что в начале файла в кодировке UTF-8 есть несколько байт. В кодировке UTF-8 без BOM эти байты отсутствуют.

Прочитаем перыве 10 байт из файла myfile.txt. Откроем его в режиме 'r+'. Указатель будет находится в начале.

+
1
2
<?php
header('Content-type: text/html; charset=utf-8');
3
4
5
$file = fopen('myfile.txt', 'r+');
$take = fread($file, 10);
echo $take;

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

Функция fgets() возвращает одну строку, начиная от указателя до конца строки.

fgets (файл, длина)

Параметры:

файл - дескриптор файла

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

Если длина не указана, то в старых версиях PHP максимальная длина возвращаемой строки была ограничена. В более новых версиях этого ограничения нет.

Запуск функции в цикле позволяет произвести чтение файла построчно.

Прочитаем одну строку строку из файла myfile.txt. Так как указатель уже перемещён, то будет прочитана не вся строка, а от указателя.

6
7
$take = fgets($file);
echo '<br>'.$take;

Функция fgetss() также возвращает одну строку, но удаляет из неё HTML теги. Если в коде присутствует PHP скрипт, то он тоже будет удалён.

fgetss (файл, длина, нужные тэги)

Параметры:

файл - дескриптор файла

длина - размер строки в байтах. Необязательный параметр.

нужные теги - позволяет указать тэги, которые не будут удалены.

Существует функция fgetc(), которая возвращает один символ из файла.

Функция file() читает весь файл и помещает данные в массив. Каждая строка помещается в элемент массива. Для работы этой функции не требуется открывать файл. Расположение указателя не учитывается.

file (путь к файлу, флаги, контекст)

Параметры:

путь к файлу - абсолютный или относительный путь к файлу

флаги - флаги, определяющие работу функции. Необязательный параметр.

контекст - позволяет указать ресурс контекста

Можно указать такие флаги:

FILE_USE_INCLUDE_PATH - позволяет искать файл в папках include path.

FILE_IGNORE_NEW_LINES - удаляет символ конца строки. Если этот флаг не установлен, то в каждой строке будет символ конца строки.

FILE_SKIP_EMPTY_LINES - не добавляет в массив пустые строки.

Если указывается несколько флагов, то они разделяются оператором "|".

Выведем файл myfile.txt на страницу.

8
9
10
$ar = file('myfile.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
echo '<br>';
print_r($ar);

Запись в файл

Функция fwrite() записывает данные в файл.

fwrite (файл, данные, длина)

Параметры:

файл - дескриптор файла

данные - данные, которые записываются

длина - максимальный размер записываемых данных в байтах. Может быть записана не вся строка, а только указанное количество байт. Необязательный параметр.

Если указатель находится в начале или середине файла, функция заменяет символы, находящиеся в файле, на новые. То есть, если записывается 5 символов, то из файла удаляются 5 символов и на их место добавляются новые.

Когда вы записываете русские буквы, то кодировка скрипта должна соответствовать кодировке файла.

Запишем в файл строку "текст из скрипта". В нашем примере дескрептор находится в середине файла и строка запишется туда. Когда нужно добавить данные в конец файла, то его можно открыть в режиме 'a'. А когда нужно перезаписать файл, его открывают в режиме 'w'. Мы не будем передвигать указатель, запишем данные туда, где он находится.

11
12
$text = 'текст из скрипта';
fwrite($file, $text);