Атрибуты файла PHP. Работа с файлами PHP | OTUS

Атрибуты файла PHP. Работа с файлами PHP

Как и другие языки, язык программирования 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"!

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто