PHP | Создание / запись файлов
В этом уроке мы научимся создавать файлы и записывать данные в файл на сервере.
Создание файла
В прошлом уроке для открытия файла мы использовали функцию fopen() . Эта же функция используется также и для создания файла. Возможно, это немного сбивает с толку, но в PHP файл создается с использованием той же функции, что и для открытия файлов.
Если вы используете функцию fopen() для открытия файла, который не существует, то она создаст его, учитывая, что файл открыт для записи (w) или добавления (a).
В приведенном ниже примере создается новый файл с именем «test_file.txt». Файл будет создан в той же директории, из которой вызвано исполнение сценария PHP:
Запись в файл — fwrite()
Функция fwrite() используется для записи в файл.
Первый параметр функции fwrite() содержит имя файла для записи, а второй параметр — строку, которая будет записана в файл.
Работа с FTP в PHP
Протокол FTP – предназначен для передачи файлов на удаленный хост. В PHP функции для работы с FTP как правило всегда доступны и не требуется установка дополнительного расширения.
Как правило, при работе с FTP выполняются следующие действия:
- Соединение с удаленным FTP-сервером (функция ftp_connect ).
- Авторизация ( ftp_login ).
- Действия с файлами.
- Закрытие соединения ( ftp_close ).
Список директорий и файлов
Функция ftp_nlist ($ftp_stream, $directory) получает список имен файлов и директорий в виде массива, где $ftp_stream – идентификатор соединения с FTP-сервером, $directory – путь к директории (в примере переменная пуста – это соответствует домашней директории FTP-пользователя).
Результат:
Получить список с расширенной информацией поможет функция ftp_rawlist() .
Результат:
Для получения детальных данных о файлах в виде массива есть функция ftp_mlsd(), но она появилась в PHP 7 и не всегда работает, для более ранних версий PHP:
Результат:
Поверка наличия файла/директории
Специальных функций для проверки существования файлов и директорий нет, поэтому можно использовать следующие варианты:
Проверить наличие файла на FTP-сервере
Функция ftp_size() возвращает «-1» если файл не найден.
Поверить наличие директории
Функция ftp_chdir() изменяет текущую директорию на FTP-сервере, возвращает false в случае возникновения ошибки.
Размер файла/директории
Получить размер файла
Функция ftp_size() возвращает размер файла в байтах.
Получить размер FTP директории
К полученному результату можно применить функцию для конвертации байтов в килобайты и мегабайты.
Как создать файл (PHP)
Создать файл в PHP можно двумя способами. Функцией fopen() и функцией file_put_contents() . Функция file_put_contents() лучше использовать только в случае обычной записи/дозаписи текста в файл, в остальных случаях лучше использовать fopen() .
fopen()
Например нужно создать файл data.txt и записать в него текстовую информацию.
В результате в файле data.txt будет следующая информация:
file_put_contents()
Функция int file_put_contents (string filename, mixed data [, int flags [, resource context]]) повторяет вызов функций fopen(), fwrite(), fclose().
Например нужно создать файл data2.txt и записать в него текстовую информацию.
В результате в файле data2.txt будет:
Если вы хотите этой функцией file_put_contents() записать информацию в уже существующий файл, при это сохранив информацию в нем, то в качестве третьего параметра нужно передать константу FILE_APPEND .
В результате в файле будет следующая информация:
Примечание
При создании файла убедитесь, что у папки, где будет создаваться файл, выставлены права доступа для создания файлов.
Работа с файлами в PHP
Прочитав эту статью, вы узнаете, как создавать, получать доступ и управлять файлами на веб-сервере с помощью функции PHP fread и другими.
Открытие файла с помощью функции PHP fopen()
Для работы с файлом сначала нужно его открыть функцией fopen() . Ее синтаксис:
Первый параметр, передаваемый в fopen() , это имя файла, который нужно открыть, а второй — режим открытия. Например:
Файл может быть открыт в одном из следующих режимов:
| Режим | Что он делает |
| R | Открывает файл только для чтения. |
| r+ | Открывает файл для чтения и записи. |
| W | Открывает файл только для записи и очищает содержимое файла. Если файл не существует, PHP попытается его создать. |
| w+ | Открывает файл для чтения и записи и очищает содержимое файла. Если файл не существует, PHP попытается его создать. |
| A | Открывает файл только для записи. Сохраняет содержимое файла, записывая его в конец файла. Если файл не существует, PHP попытается его создать. |
| a+ | Открывает файл для чтения и записи. Сохраняет содержимое файла, записывая его в конец файла. Если файл не существует, он будет создан. Можно использовать вместо PHP fread () |
| X | Открывает файл только для записи. Возвращает значение FALSE и генерирует ошибку, если файл уже существует. Если файл не существует, PHP попытается его создать. |
| x+ | Открывает файл для чтения и записи; в противном случае имеет такое же поведение, как «x». |
Если вы попытаетесь открыть файл, который не существует, PHP сгенерирует сообщение с предупреждением. Чтобы избежать этого, необходимо выполнять простую проверку, существует ли файл или нет, прежде чем пытаться получить к нему доступ. Это делается с помощью функции PHP file_exists() :
Совет . Операции с файлами и папками часто сопряжены с ошибками. Поэтому рекомендуется применить форму проверки ошибок, чтобы при их возникновении скрипт обработал ошибку.
Закрытие файла
Как только вы закончите чтение файла с помощью PHP fread , его нужно закрыть. Для этого используется функция fclose() :
Примечание . Хотя PHP автоматически закрывает все открытые файлы, когда скрипт завершается, рекомендуется закрыть файл после выполнения всех операций.
Чтение из файлов с помощью функции PHP fread()
Теперь вы знаете, как открывать и закрывать файлы. В следующем разделе вы узнаете, как читать данные из файла. PHP включает в себя сразу несколько функций для чтения данных из файла. За одну операцию можно считать, как один символ, так и весь файл.
Чтение фиксированного количества символов
Функция PHP fread() может использоваться для чтения заданного количества символов из файла. Базовый синтаксис функции:
Она принимает два параметра — дескриптор файла и количество байтов, которые должны быть считаны. В следующем примере мы считываем 20 байтов из файла data.txt , включая пробелы. Предположим, data.txt содержит абзац текста » The quick brown fox jumps over the lazy dog «:
Приведенный выше пример даст следующий результат:
Чтение всего содержимого файла
Функция fread() может использоваться в связке с функцией filesize() для полного считывания всего файла. filesize() возвращает размер файла в байтах. PHP fread пример:
Приведенный выше пример даст следующий результат:
Самый простой способ прочитать все содержимое файла — это функция readfile() . Она позволяет считать содержимое файла, не открывая его. Следующий пример даст тот же результат, что и предыдущий пример:
Приведенный выше пример даст следующий результат:
Другой способ прочитать все содержимое файла, не открывая его — это функция file_get_contents() . Она принимает имя и путь к файлу и считывает весь файл в строковую переменную. Пример без PHP fread :
Еще один способ считывания всех данных из файла — это функция file() . Она работает аналогично функции file_get_contents() , но возвращает содержимое как массив строк, а не одну строку. Каждый элемент возвращаемого массива соответствует строке в файле.
Чтобы обработать данные файла, необходимо выполнить обработку массива через цикл foreach . В следующем примере, мы считываем файл в массив и затем отображаем его с помощью цикла:
Запись файлов с использованием функции PHP fwrite()
Можно записать данные в файл с помощью функции PHP fwrite() . Ее синтаксис:
Функция fwrite() принимает два параметра: дескриптор файла и строку данных, которые должны быть записаны:
В приведенном выше примере, если файл note.txt не существует, PHP автоматически создаст его и запишет данные. Но если note.txt уже существует, PHP перед записью новых данных стирает содержимое этого файла. Если вы просто хотите добавить файл и сохранить существующее содержимое, используйте режим a вместо w .
Альтернативный способ – file_put_contents() . Это аналог функции file_get_contents() , который предоставляет простой способ записи данных в файл без необходимости его открытия. Эта функция принимает имя и путь к файлу с данными, которые должны быть записаны. Например ( похожий на PHP fread пример ):
Если файл, указанный в функции file_put_contents() , уже существует, PHP по умолчанию перезапишет его. Если вы хотите сохранить содержимое файла, можно передать специальный флаг FILE_APPEND в качестве третьего параметра file_put_contents() . Тогда функция добавит новые данные в файл, а не перепишет их. Пример:
Переименование файлов с помощью функции PHP rename()
После прочтения с помощью php fread() файл можно переименовать файл или каталог, используя функцию PHP rename() , например:
Удаление файлов с помощью функции PHP unlink()
Можно удалять файлы или папки с помощью функции PHP unlink() , например:
Функции файловой системы PHP
В приведенной ниже таблице представлен обзор других полезных функций, которые можно использовать для динамического чтения и записи файлов ( альтернатива PHP fread() и другим функциям ):