Атрибуты файла PHP. Работа с файлами PHP
2026-03-10 01:27 Diff

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

Открытие и закрытие файлов в PHP

Чтобы открыть файл в PHP, используют функцию fopen(). Она определяется следующим образом:

resource fopen(string $filename, string $mode)

Первый атрибут $filename служит для предоставления пути к файлу, а второй параметр обеспечивает его открытие. В зависимости от того, каковы цели открытия и какой тип файла, параметр может принимать несколько значений: – 'r': файл открывается лишь для чтения. Если файл отсутствует, возвращается false; — 'r+': файл открывается лишь для чтения, но есть возможность записи. Если файла нет, возвращается false; — 'w': файл открывается для записи. Когда такой файл уже есть, он перезаписывается, когда нет — создаётся; — 'w+': файл открывается для записи, но есть возможность чтения. Если файл существует, происходит перезапись, если нет — создание; — 'a': файл открывается для записи. При его существовании информация записывается в конец файла, при этом старые данные сохраняются. Если файла нет, происходит его создание; — 'a+': файл открывается и для чтения, и для записи. Когда файл существует, данные дописываются в конец файла. Если файл отсутствует, он создаётся.

Результат функции fopenдескриптор файла. Этот дескриптор применяется для выполнения операций с файлом, а также для его закрытия.

После окончания работы файл закрываем функцией fclose(), принимающей в качестве параметра дескриптор файла. К примеру, следующий PHP-код откроет и закроет файл:

$fd = fopen("form.php", 'r') or die("файл открыть не удалось"); fclose($fd);

Если fopen не сможет открыть наш файл, конструкция or die позволит прекратить работу скрипта и вывести сообщение об ошибке.

Чтение файла в PHP

Для чтения файла используют разные функции. Чтобы выполнить чтение построчно, подходит fgets() — функция, получающая дескриптор файла и возвращающая одну считанную строку:

<?php $fd = fopen("form.php", 'r') or die("файл открыть не удалось"); while(!feof($fd)) { $str = htmlentities(fgets($fd)); echo $str; } fclose($fd); ?>

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

Полное чтение файла в PHP

Если хотите полностью прочитать файл, применяют file_get_contents():

<?php $str = htmlentities(file_get_contents("form.php")); echo $str; ?>

В данном случае нам не нужно явно открывать файл, получать дескриптор, а потом закрывать файл.

Поблочное считывание в PHP

Мы можем выполнить поблочное считывание, то есть считывать лишь определённое число байт из файла посредством fread():

<?php $fd = fopen("form.php", 'r') or die("файл открыть не удалось"); while(!feof($fd)) { $str = htmlentities(fread($fd, 600)); echo $str; } fclose($fd); ?>

Функция fread() принимает 2 атрибута: число считываемых байтов и дескриптор считываемого файла. Если считывается блок, указатель в файле помещается в конец блока. Кроме того, функция feof() позволяет отслеживать завершение файла.

Запись файла в PHP

Чтобы выполнить запись файла, используем функцию fwrite(), записывающую в файл строку:

<?php $fd = fopen("hello.txt", 'w') or die("не удалось создать файл"); $str = "Всем привет!"; fwrite($fd, $str); fclose($fd); ?>

Аналогичным образом в случае записи работает и fputs():

<?php $fd = fopen("hello.txt", 'w') or die("не удалось создать файл"); $str = "Всем привет!"; fputs($fd, $str); fclose($fd); ?>

Работаем с указателем файла в PHP

Когда мы открываем файл для записи или чтения в режиме 'w', указатель помещается в начало. В случае считывания данных происходит перемещение указателя в конец блока считанных данных. Но мы можем вручную управлять указателем в нашем файле, устанавливая его в произвольное место. Чтобы это сделать, существует ф-я fseek, определяемая следующим образом:

int fseek (resource $handle , int $offset [, int $whence = SEEK_SET ] )

Атрибут $handle здесь представляет дескриптор файла, а $offset — смещение относительно начала файла в байтах, с которого начнётся запись/считывание. Третий параметр является необязательным и задаёт способ установки смещения. Кстати, он способен принимать несколько значений: — SEEK_SET: устанавливает смещение в offset байт относительно начала нашего файла. Это значение по умолчанию; — SEEK_END: устанавливает смещение в offset байт с конца нашего файла; — SEEK_CUR: устанавливает смещение в offset байт относительно начала текущей позиции в нашем файле.

Если установка указателя удачна, fseek() возвратит 0, если нет, то -1. Пример:

$fd = fopen("hello.txt", 'w+') or die("файл открыть не удалось"); $str = "Всем привет!"; // строка для записи fwrite($fd, $str); // пишем строку в начало fseek($fd, 0); // помещаем в начало указатель файла fwrite($fd, "Ха-ха"); // пишем строку в начало fseek($fd, 0, SEEK_END); // помещаем указатель в конец fwrite($fd, $str); // пишем в конце ещё одну строку fclose($fd);

Хотите знать больше? Записывайтесь на курс "Backend-разработчик на PHP"!