Работа с файлами в PHP
Работа с файлами в PHP – важная часть веб-разработки, позволяющая эффективно управлять данными на сервере. В статье раскрываются основные функции и методы, которые облегчают взаимодействие с файлами, такие как чтение, запись и обработка данных.
Вы узнаете, как безопасно и быстро работать с файлами в PHP, а также получите советы по улучшению производительности ваших скриптов. Подробно рассмотрены примеры, которые помогут вам на практике освоить основные операции с файлами.
- Открытие файла с помощью функции PHP fopen()
- Закрытие файла
- Чтение из файлов с помощью функции PHP fread()
- Чтение фиксированного количества символов
- Чтение всего содержимого файла
- Запись файлов с использованием функции PHP fwrite()
- Переименование файлов с помощью функции PHP rename()
- Удаление файлов с помощью функции PHP unlink()
- Функции файловой системы PHP
Открытие файла с помощью функции PHP fopen()
Для работы с файлом сначала нужно его открыть функцией fopen(). Ее синтаксис:
fopen(имя_файла, режим)Первый параметр, передаваемый в fopen(), это имя файла, который нужно открыть, а второй - режим открытия. Например:
<?php
$handle = fopen("data.txt", "r");
?>Файл может быть открыт в одном из следующих режимов:
| Режим | Что он делает |
| R | Открывает файл только для чтения. |
| r+ | Открывает файл для чтения и записи. |
| W | Открывает файл только для записи и очищает содержимое файла. Если файл не существует, PHP попытается его создать. |
| w+ | Открывает файл для чтения и записи и очищает содержимое файла. Если файл не существует, PHP попытается его создать. |
| A | Открывает файл только для записи. Сохраняет содержимое файла, записывая его в конец файла. Если файл не существует, PHP попытается его создать. |
| a+ | Открывает файл для чтения и записи. Сохраняет содержимое файла, записывая его в конец файла. Если файл не существует, он будет создан. Можно использовать вместо PHP fread () |
| X | Открывает файл только для записи. Возвращает значение FALSE и генерирует ошибку, если файл уже существует. Если файл не существует, PHP попытается его создать. |
| x+ | Открывает файл для чтения и записи; в противном случае имеет такое же поведение, как «x». |
Если вы попытаетесь открыть файл, который не существует, PHP сгенерирует сообщение с предупреждением. Чтобы избежать этого, необходимо выполнять простую проверку, существует ли файл или нет, прежде чем пытаться получить к нему доступ. Это делается с помощью функции PHP file_exists():
<?php
$file = "data.txt";
// Проверяем наличие файла
if(file_exists($file)){
// Пытаемся открыть файл
$handle = fopen($file, "r");
} else{
echo "ERROR: File does not exist.";
}
?>Совет. Операции с файлами и папками часто сопряжены с ошибками. Поэтому рекомендуется применить форму проверки ошибок, чтобы при их возникновении скрипт обработал ошибку.
Закрытие файла
Как только вы закончите чтение файла с помощью PHP fread, его нужно закрыть. Для этого используется функция fclose():
<?php
$file = "data.txt";
// Проверяем наличие файла
if(file_exists($file)){
// Открываем файл для чтения
$handle = fopen($file, "r") or die("ERROR: Cannot open the file.");
/* Некоторый выполняемый код */
// Обработка закрытия файла
fclose($handle);
} else{
echo "ERROR: File does not exist.";
}
?>Примечание. Хотя PHP автоматически закрывает все открытые файлы, когда скрипт завершается, рекомендуется закрыть файл после выполнения всех операций.
Чтение из файлов с помощью функции PHP fread()
Теперь вы знаете, как открывать и закрывать файлы. В следующем разделе вы узнаете, как читать данные из файла. PHP включает в себя сразу несколько функций для чтения данных из файла. За одну операцию можно считать, как один символ, так и весь файл.
Чтение фиксированного количества символов
Функция PHP fread() может использоваться для чтения заданного количества символов из файла. Базовый синтаксис функции:
fread(дескриптор_файла, длина_в_байтах)Она принимает два параметра - дескриптор файла и количество байтов, которые должны быть считаны. В следующем примере мы считываем 20 байтов из файла data.txt, включая пробелы. Предположим, data.txt содержит абзац текста "The quick brown fox jumps over the lazy dog ":
<?php
$file = "data.txt";
// Проверяем наличие файла
if(file_exists($file)){
// Открываем файл для чтения
$handle = fopen($file, "r") or die("ERROR: Cannot open the file.");
// Считываем фиксированное количество байтов из файла
$content = fread($handle, "20");
// Обработка закрытия файла
fclose($handle);
// Выводим содержимое файла
echo $content;
} else{
echo "ERROR: File does not exist.";
}
?>Приведенный выше пример даст следующий результат:
The quick brown foxЧтение всего содержимого файла
Функция fread() может использоваться в связке с функцией filesize() для полного считывания всего файла. filesize() возвращает размер файла в байтах. PHP fread пример:
<?php
$file = "data.txt";
// Проверяем наличие файла
if(file_exists($file)){
// Открываем файл для чтения
$handle = fopen($file, "r") or die("ERROR: Cannot open the file.");
// Считываем весь файл
$content = fread($handle, filesize($file));
// Обработка закрытия файла
fclose($handle);
// Выводим содержимое файла
echo $content;
} else{
echo "ERROR: File does not exist.";
}
?>Приведенный выше пример даст следующий результат:
The quick brown fox jumps over the lazy dog.Самый простой способ прочитать все содержимое файла - это функция readfile(). Она позволяет считать содержимое файла, не открывая его. Следующий пример даст тот же результат, что и предыдущий пример:
<?php
$file = "data.txt";
// Проверяем наличие файла
if(file_exists($file)){
// Считывает и выводит весь файл
readfile($file) or die("ERROR: Cannot open the file.");
} else{
echo "ERROR: File does not exist.";
}
?>Приведенный выше пример даст следующий результат:
The quick brown fox jumps over the lazy dog.Другой способ прочитать все содержимое файла, не открывая его - это функция file_get_contents(). Она принимает имя и путь к файлу и считывает весь файл в строковую переменную. Пример без PHP fread:
<?php
$file = "data.txt";
// Проверяем наличие файла
if(file_exists($file)){
// Считываем весь файл в строку
$content = file_get_contents($file) or die("ERROR: Cannot open the file.");
// Выводим содержимое файла
echo $content;
} else{
echo "ERROR: File does not exist.";
}
?>Еще один способ считывания всех данных из файла - это функция file(). Она работает аналогично функции file_get_contents(), но возвращает содержимое как массив строк, а не одну строку. Каждый элемент возвращаемого массива соответствует строке в файле.
Чтобы обработать данные файла, необходимо выполнить обработку массива через цикл foreach. В следующем примере, мы считываем файл в массив и затем отображаем его с помощью цикла:
<?php
$file = "data.txt";
// Проверяем наличие файла
if(file_exists($file)){
// Считываем весь файл в массив
$arr = file($file) or die("ERROR: Cannot open the file.");
foreach($arr as $line){
echo $line;
}
} else{
echo "ERROR: File does not exist.";
}
?>Запись файлов с использованием функции PHP fwrite()
Можно записать данные в файл с помощью функции PHP fwrite(). Ее синтаксис:
fwrite(дескриптор_файла, строка)Функция fwrite() принимает два параметра: дескриптор файла и строку данных, которые должны быть записаны:
<?php
$file = "note.txt";
// Строка данных, которую нужно записать
$data = "The quick brown fox jumps over the lazy dog.";
// Открываем файл для записи
$handle = fopen($file, "w") or die("ERROR: Cannot open the file.");
// Записываем данные в файл
fwrite($handle, $data) or die ("ERROR: Cannot write the file.");
// Обработка закрытия файла
fclose($handle);
echo "Data written to the file successfully.";
?>В приведенном выше примере, если файл note.txt не существует, PHP автоматически создаст его и запишет данные. Но если note.txt уже существует, PHP перед записью новых данных стирает содержимое этого файла. Если вы просто хотите добавить файл и сохранить существующее содержимое, используйте режим a вместо w.
Альтернативный способ – file_put_contents(). Это аналог функции file_get_contents(), который предоставляет простой способ записи данных в файл без необходимости его открытия. Эта функция принимает имя и путь к файлу с данными, которые должны быть записаны. Например (похожий на PHP fread пример):
<?php
$file = "note.txt";
// Строка данных, которые нужно записать
$data = "The quick brown fox jumps over the lazy dog.";
// Записываем данные в файл
file_put_contents($file, $data) or die("ERROR: Cannot write the file.");
echo "Data written to the file successfully.";
?>Если файл, указанный в функции file_put_contents(), уже существует, PHP по умолчанию перезапишет его. Если вы хотите сохранить содержимое файла, можно передать специальный флаг FILE_APPEND в качестве третьего параметра file_put_contents(). Тогда функция добавит новые данные в файл, а не перепишет их. Пример:
<?php
$file = "note.txt";
// Строка данных, которую нужно записать
$data = "The quick brown fox jumps over the lazy dog.";
// Записываем данные в файл
file_put_contents($file, $data, FILE_APPEND) or die("ERROR: Cannot write the file.");
echo "Data written to the file successfully.";
?>Переименование файлов с помощью функции PHP rename()
После прочтения с помощью php fread() файл можно переименовать файл или каталог, используя функцию PHP rename(), например:
<?php
$file = "file.txt";
// Проверяем наличие файда
if(file_exists($file)){
// Пытаемся переименовать файл
if(rename($file, "newfile.txt")){
echo "File renamed successfully.";
} else{
echo "ERROR: File cannot be renamed.";
}
} else{
echo "ERROR: File does not exist.";
}
?>Удаление файлов с помощью функции PHP unlink()
Можно удалять файлы или папки с помощью функции PHP unlink(), например:
<?php
$file = "note.txt";
// Проверяем наличие файла
if(file_exists($file)){
// Попытка переименования файла
if(unlink($file)){
echo "File removed successfully.";
} else{
echo "ERROR: File cannot be removed.";
}
} else{
echo "ERROR: File does not exist.";
}
?>Функции файловой системы PHP
В приведенной ниже таблице представлен обзор других полезных функций, которые можно использовать для динамического чтения и записи файлов (альтернатива PHP fread() и другим функциям):
| Функция | Описание |
| fgetc() | Считывает один символ за раз. |
| fgets() | Считывает одну строку за раз. |
| fgetcsv() | Считывает строку разделенных запятыми значений. |
| filetype() | Возвращает тип файла. |
| feof() | Проверяет, достигнут ли конец файла. |
| is_file() | Проверяет, является ли файл стандартным файлом. |
| is_dir() | Проверяет, является ли файл каталогом. |
| is_executable() | Проверяет, является ли файл исполняемым. |
| realpath() | Возвращает канонизированный абсолютный путь к файлу. |
| rmdir() | Удаляет пустую директорию. |
Комментарии
а если необходимо добавить несколько значений из нескольких инпутов в одной строкой в текстовый файл?
Спасибо все круто!
Спасибо! Все понятно и по полочкам.