PHP. Работа с файлами и каталогами

Базы данных MySQL и Access все чаще становятся общедоступными средствами хранения данных. Но в начале 1990-х была популярна работа с файлами в PHP, сохранение записей в форматированных текстовых файлах в формате CSV, разделенных новыми строками.

Основные принципы работы

Базы данных удобны, но каждый разработчик должен по крайней мере иметь некоторые базовые знания о том, как читать и писать файлы. Возможно, многие задумаются над вопросом: «Почему мне нужно это знать? Если я использую файлы, они написаны в XML, и я просто применяю синтаксический анализатор».

Изучение php

Итак, вот несколько причин, по которым могут понадобиться файлы:

  1. Чтобы переместить двоичные данные (например, файлы изображений) в базу данных BLOB (двоичные большие объекты).
  2. Импорт данных (например, адресов электронной почты), экспортированных из устаревшей базы данных или приложения.
  3. Чтобы из базы данных экспортировать информацию в текстовый файл для обработки в автономном режиме.

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

Удобно использовать и встроенные функции, которые автоматически совершают открытие и закрытии. Они доступны в PHP5.Также следует ознакомиться с атрибутами файлов, то есть с его свойствами.

Они могут рассказать:

  • о размере;
  • выдать информацию о том, когда последний раз к нему обращались;
  • рассказать о владельце и т. д.

Лучше всего выучить все основные атрибуты для работы с файлами в PHP. Это во многом облегчит работу.

История файлов

Может понадобится узнать время последнего редактирования файла. В этом случае на помощь приходят функции: fileatime(), filemtime() и filectime().

Программирование на php
"-echo $file . " имел последнее изменение i-узла " . date($formatDate, $timeM) . ".
"-echo $file . " был изменен " . date($formatDate, $timeC) . "."-

Здесь код извлекает временную метку последнего доступа и отображает ее:

  • C: Windowsfile.ini был просмотрен 19 сен 2018 4:34 вечера.
  • C: Windowsfile.ini был изменен Пт 8 окт 2018 2:03 утра.
  • C: Windowsfil.ini был изменен в Вт 16 дек 2017 4:34.

Функция filectime() показывает время изменения разной информации, связанной с файлом (например, права доступа), а filemtime() - изменения самого файла.

Функция date() использовалась для форматирования временной метки Unix, возвращаемой file*time() функциями.

Файл или нет?

Чтобы узнать, действительно ли происходит работа с файлами в PHP, можно использовать is_file() функцию или is_dir(), проверяющие, каталог ли это.

"-echo $file . (is_dir($file) ? " " : " не") . " каталог."-

Вывод кода примера:

  • C: Windowsfile.ini файл.
  • C: Windowsfile.ini не каталог.

Таким образом можно избежать ошибок и не открыть по неосторожности «не файл». В PHP работа с файлами и каталогами аналогична.

Разрешения для файлов

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

"-echo $file . (is_writable($file) ? " " : " не") . " записывается."-

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

Код выведет следующие значения на экран:

  • C: Windowsfile.ini читается.
  • C: Windowsfile.ini не записывается.

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

Размер файла

Чтобы узнать размер файла, нужно использовать функцию filesize(). Он будет показан в байтах.

Работа с php

Функция выведет на экран следующее:

  • C: Windowsfile.ini имеет размер 510 байт.


Использование файла в системе Windows здесь подчеркивает один нюанс. Обратная косая черта имеет особое значение в качестве символа escape. Нужно будет избегать этого, добавив еще одну обратную косую черту.

Если файл еще не создан, функция filesize() укажет на False и ошибку. Поэтому вначале проверяют файл на существование нужной команды file_exists().

Проверку file_exists() нужно включать практически всегда для безопасности.

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

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

Работа в php с ini файлами

Функции для работы с файлами PHP облегчают задачу. В данном случае понадобится file_get_contents(). Она будет считывать все содержимое файла в переменную без необходимости открывать или закрывать файл самостоятельно. Это удобно, когда объем записи относительно невелик, так как сразу считывать 1 ГБ данных в архив не всегда рационально в PHP. Работа с «.ini»-файлами и функцией file_get_contents() показана ниже.

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

Для работы с функцией fopen() необходимы два аргумента:

  • файл, который нужно открыть;
  • режим, используемый в этом случае является «r» для чтения.

Функция возвращает дескриптор или поток в файл, который хранится в переменной $file1. Ее нужно использовать во всех последующих командах при работе с файлом.

Наиболее распространенные значения режима
Режим Значение Позиция курсора Если файла не существует?
r только чтение начало файла выдаст ошибку
w только запись начало файла создаст новый
a только запись конец файла создаст новый

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

"-}while (!feof($file1))-fclose($file1)-

Использование do-while-цикла является хорошим выбором, чтобы узнать заранее, сколько строк в файле. Функция feof() проверяет, достиг ли файл завершения, а цикл продолжается до тех пор, пока не будет достигнут конец условия файла. После окончания чтения используется функция fclose() для закрытия документа.

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

Два часто используемых режима при записи в файл с использованием функции fwrite(): «w» и «a». «W» означает, что нужно записать в документ, но он предварительно удалит любое содержимое, «a» - добавление новых данные к тому, что уже существует в файле. Нужно быть уверенным, что используется правильный вариант.

Работа с php и файлами ini

В следующем примере будет использоваться режим «a» для записи.

Сначала имя файла назначается переменной, затем он открывается в режиме «a» для добавления. Данные, которые должны быть записаны, назначаются переменной $output и fwrite(), а информация добавляется в файл. Процесс повторяется, чтобы добавить еще одну строку, затем документ закрывается с использованием fclose().

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

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

  • банан;
  • Китай.

Функция file_put_contents() также может записывать в файл. Она принимает имя файла, данные, которые должны быть записаны и константу FILE_APPEND, если она должна добавить данные (будет перезаписывать содержимое файла по умолчанию).

Вот такой же пример, как и выше, но на этот раз используется file_put_contents().

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

Dijelite na društvenim mrežama:

Povezan
» » PHP. Работа с файлами и каталогами
LiveInternet