После изучения темы пройдите тестирование

Запись в файл

Для записи в файл используют функцию fwrite($handler, $data), в которую необходимо передать указатель $handler (который был получен от fopen) и сами данные для записи. При этом необходимо чтоб режим работы с файлом допускал запись данных в него.

Рассмотрим пример с текстовым файлом. Пусть у нас еще его нету, но мы хотим создать его и записать в него несколько строк. Для этого необходимо открыть файл в режиме w — т.е., создать его. Далее воспользоваться функцией fclose и закрыть его.

<?php
$f = fopen('test.txt', 'w');
fwrite($f, 'Hello worrld' . PHP_EOL . 'This is new string');
fclose($f);
// check the file!

В данном примере мы записали две строки в файл test.txt, предварительно создав его. При этом переход на новую строку осуществляется при помощи специальной константы PHP_EOL. Этот файл можно открыть при помощи текстового редактора и прочитать его содержимое.

Замечание. Обязательно закрывайте файл при помощи fclose() во избежании потери информации.

Допишем этот скрипт, чтобы мы могли дописать в существующий файл еще пару строк. Для этого понадобится режим a

<?php
$f = fopen('test.txt', 'w');
fwrite($f, 'Hello worrld' . PHP_EOL . 'This is new string');
fclose($f);

$f = fopen('test.txt', 'a');
fwrite($f, 'String added' . PHP_EOL . 'And another one');
fclose($f);
// check the file

В данном случае мы получим следующее содержимое нашего файла:

Hello worrld
This is new stringString added
And another one

Во второй строке добавленная информация склеилась, т.к. мы не печатали PHP_EOL перед текстом String added.

Замечание. Функция fwrite может быть использована и для записи бинарной информации

Чтение данных из файла

Для чтения из файла используется функция fread($handle, $length) в которую необходимо передать указатель на файл $handle и максимальное количество байт $length которое необходимо прочитать из файла. Эта функция возвращает полученные данные, либо false в случае ошибки.

Для того, чтобы читать из файла, необходимо открыть его в режиме, который это позволяет. Рассмотрим пример: пусть дан текстовый файл test.txt, в котором записана строка

Follow the white rabbit

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

<?php
$h = fopen('test.txt', 'r');
$text = fread($h, 6);
echo $text;

Этот скрипт выведет на экран первое слово — Follow. Если же нам требуется получить все содержимое файла, то вторым аргументом можно передавать результат функции filesize(), которая возвращает размер файла в байтах:

$text = fread($h, filesize('test.txt'))

Замечание. Также для чтения текстовых файлов можно использовать функцию file_get_contents($filename), которая возвращает содержимое текстового файла

$text = file_get_contents('test.txt');
echo $text;

Блокировка и удаление файлов

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

Блокировка осуществляется при помощи функции flock($handler, $action). Параметр $hadler — это указатель на файл, который можно получить при помощи fopen(). В качестве $action указывают одно из допустимых значений (констант):

LOCK_SH — разделяемая блокировка (для чтения). Эта блокировка позволяет читать файл нескольким процессам. При этом, если необходима запись в файл, то это осуществляется последовательно.

LOCK_EX — эксклюзивная блокировки (для записи). Эта блокировка допускает лишь один процесс к записи в файл и предотвратит ошибки при попытке одновременной записи в файл разными процессами.

LOCK_UN — снятие блокировки

Рассмотрим пример с эксклюзивной блокировкой:

<?php
$f = fopen("test.txt", "w");
flock($f, LOCK_EX); // lock
fwrite($f, "Yo, lock me");
flock($f, LOCK_UN); // unlock
fclose($f);

Замечание. Блокировку необходимо осуществлять после открытия файла, а снятие блокировки — перед его закрытием.

Удаление файлов осуществляется при помощи функции unlink($filename). В качестве параметра подставляется путь к файлу.

unlink('test.txt'); // delete

Замечание. При попытке удалить заблокированный файл, интерпретатор выведет замечание и файл удален не будет.

Таблица лучших: 3. Работа с файлами в PHP

максимум из 8 баллов
Место Имя Записано Баллы Результат
Таблица загружается
Нет данных
0