Доступ к файлам и манипуляции с ними в PHP

PHP

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

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

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

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

Путь к файлу указывается в виде строки и выглядит следующим образом:

D:\documents\files\somefile.txt.

Второй параметр также является строкой и может получить одно из следующих значений:

  • «r» — открытие для чтения.
  • «w» — для записи.
  • «а» — для продолжения записи с сохранением оставшихся данных.

Возможности расширяются, если к параметру добавить «+»:

  • «r+» — для чтения и записи.
  • «w+» — для записи и чтения. При отсутствии указанного файла он создается.
  • «a+» — для продолжения записи с созданием файла при его отсутствии.

Как видно, если поставить знак «+», то при отсутствии файла в указанном пути, он будет автоматически создан интерпретатором, а имя он получит из первого параметра функции. Если не поставить плюс, то при отсутствии файла функцией будет возвращено false.

Итак вызов функции открытия файла выглядит следующим образом: fopen(«D:\documents\files\somefile.txt», «w»);. Если файл отсутствует, то интерпретатор продолжит выполнять скрипт. Но можно прервать его работу и вывести ошибку. Для этого предусмотрена конструкция ordie(«Произвольный текст об ошибке»).

Рассмотрим на примере:

fopen(«D:\documents\files\somefile.txt», «w») ordie(«Такого файла не существует, смените режим открытия или создайте файл самостоятельно»);
fclose(«D:\documents\files\somefile.txt»); // Закрываем файл, чтобы экономить аппаратные ресурсы.

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

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

Есть несколько функций для чтения данных из файла:

  1. fgets() — построчное чтение, функция возвращает дескриптор файла и строку, которая была вычитана. При следующем вызове функции, считываться будет следующая строка после предыдущей.
  2. file_get_contents() — считывает сразу весь файл.
  3. fread() — считывает часть информации из файла, размер которой определяется параметром.

Рассмотрим пример:

$file = fopen(«somehing.php», ‘r’) ordie(«Не получилось открыть файл ввиду его отсутствия»);
while(!feof($file)) // feof указывает о том, что каретка достигла конца файла
{
$str = htmlentities(fread($file, 600));
echo $str;
}
fclose($file);

После отработки цикла, будет выведено информации на 600 байт.  Функция fread() принимает два параметра. Первый — это открытый файл и строковой путь к нему. Второй количество байт, которые нужно вычитать. После того, как часть байтов будет считана, указатель останавливается на том месте, где был считан последний байт.

Как записывать байты или текст в файл?

Аналогом функции для чтения в PHP присутствует функция для записи fwrite(). Она осуществляет запись указанной в параметр строки.

Пример:

$file = fopen(«D:\documents\files\somefile.txt», ‘w’) ordie(«Не получилось открыть файл ввиду его отсутствия»);
$str = «Привет, как дела?»;
fwrite($file, $str);
fclose($file);

В начале файла будет записана строка «»Привет, как дела?». Также мы можем использовать функцию fputs(), которая работает аналогично fwrite() и принимает те же параметры.

Манипуляция с указателем файла

Если указан режим открытия файла без знака «+», то каретка файла устанавливается в его начало. Считывание данных сопровождается перемещением каретки до конца числа указанных байтов или в конец файла. Но, неужели нельзя установить каретку в желаемое место? К счастью в PHP предусмотрена такая функция и называется она fseek().

Синтаксис данной функции следующий:

fseek(str $file , int $offset , int $offset_way = SEEK_SET/SEEK_CUR/SEEK_END);

Первый параметр является строковым литералом и описывает путь к файлу, второй параметр указывает на сколько позиций должна быть смещена каретка относительно текущей позиции. Третий параметр необязательный может получить только одну из 3-х предопределенных констант:

  1. SEEK_SET устанавливает каретку в начало файла,
  2. SEEK_CUR — смещение осуществляется с текущей позиции,
  3. SEEK_END — смещение будет происходить с конца файла.

То есть, каретка устанавливается в начало файла, конец или остается в текущей позиции, с этого положения и осуществляется смещение параметром offset.

Пример:

$file = fopen(«D:\documents\files\somefile.txt», ‘w+’) ordie(«Нельзя открыть несуществующий файл»);
$str = «Helloeverybody!»; // строка, которую запишем в файл
fwrite($file, $str); // запишем строку в начало
fseek($file, 0); // поместим каретку в начало
fwrite($file, «Haw are you?»); // Записываем в начало
fseek($file, 0, SEEK_END); // поместим указатель в конец
fwrite($file, $str); // Добавим к существующей записи еще одну, ту, что мы инициализировали в начале программы
fclose($fd); // Закрываем файловый поток

Полезные функции для манипуляции с файлами и каталогами

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

Перемещение файла по директориям

Функция rename(from, to) осуществляет перемещение файла в другую директорию.

Переместим файл из каталога D:\documents\files\somefile.txt в D:\documents:

if (!rename(«D:\documents\files\somefile.txt», «D:\documents\files\somefile.txt»))
echo » При перемещении возникла ошибка»;
elseecho «Файл был успешно перемещен»;

// Первый параметр функции получает текущую директорию перемещаемого файла, второй определяет место его перемещения

Копирование файла

За копирование файлов отвечает функция copy(from, to). В первом параметре мы указываем директорию и имя текущего файла, во втором параметре указываем место копирования файла, имя другого файла, куда будет скопирован контент.

Пример:

if (copy(«D:\documents\files\somefile.txt», «D:\documents\copy.txt»))
echo «Копирование файла прошло успешно»;
elseecho «Файл не скопирован»;

Удаление файла

Для удаления файла в PHP предусмотрена функция unlink(f). Она принимает единственный строковой параметр, который указывает директорию и имя файла, который следует удалить.

Пример:

if (unlink(«D:\documents\copy.txt»))
echo «Файл успешно удален»;
elseecho «Ошибка! Файл не был удален»;

Подведем итоги

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

Что не было рассмотрено: Создание директорий. Хоть мы и создавали путь к файлу самостоятельно или прописывал путь для его открытия, язык PHP обладает богатым функционалом для манипуляций с директориями. Можно создавать директории, создавать новые папки, удалять их, переименовывать и другое.

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

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

Оцените статью
Образовательный портал WELCOME4U.RU
Добавить комментарий

  1. Варя

    Спасибо за примеры. Они мне очень помогли в коде моего скрипта разобраться.

    Ответить
  2. Саша

    Крутая информация. Скажите, а вы можете такие же советы написать по работе с файлами в c++ А то нам в институте задали, а я даже не знаю, с чего начать.

    Ответить
    1. ArseniyDV автор

      Добрый день, Александр. В ближайшее время подготовим и опубликуем.

      Ответить
Adblock
detector