Запись в файл
Для записи в файл используют функцию 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
Место | Имя | Записано | Баллы | Результат |
---|---|---|---|---|
Таблица загружается |