Работа с файловой системой в PHP: от основ к реальным проектам
Работа с файловой системой — одна из ключевых задач любого веб-разработчика. В PHP для этого существует мощный набор встроенных функций, позволяющих создавать, читать, редактировать и удалять файлы, а также управлять директориями. В этой статье мы разберем практические примеры, которые помогут вам освоить работу с файлами на PHP и применять эти знания в реальных проектах.
Независимо от того, создаете ли вы систему логирования, загрузчик файлов или просто сохраняете данные пользователей, понимание основ файловой системы в PHP — обязательный навык. Давайте перейдем к практике.
Основные функции для работы с файлами
PHP предоставляет несколько способов взаимодействия с файлами. Самые популярные — это использование fopen, fwrite, fread и высокоуровневых функций file_get_contents и file_put_contents. Рассмотрим их на примерах.
Создание и запись в файл
Для создания файла и записи в него используйте функцию fopen с режимом 'w' (запись с очисткой) или 'a' (добавление в конец).
<?php
$filename = 'log.txt';
$file = fopen($filename, 'w');
if ($file) {
fwrite($file, "Строка 1: Запись в файл\n");
fwrite($file, "Строка 2: Еще одна запись\n");
fclose($file);
echo "Файл успешно создан и записан.";
} else {
echo "Ошибка открытия файла.";
}
?>
Если нужно быстро записать данные без управления указателем, используйте file_put_contents:
<?php
$data = "Новый контент для файла.\nВторая строка.";
file_put_contents('data.txt', $data);
echo "Данные записаны.";
?>
Чтение файла
Для чтения файла построчно используйте fgets в цикле:
<?php
$file = fopen('log.txt', 'r');
if ($file) {
while (($line = fgets($file)) !== false) {
echo $line . "<br>";
}
fclose($file);
}
?>
Альтернатива — file_get_contents для чтения всего содержимого в строку:
<?php
$content = file_get_contents('log.txt');
echo nl2br($content);
?>
Проверка существования и свойств файлов
Перед работой с файлом важно убедиться, что он существует и доступен для чтения или записи. PHP предоставляет функции file_exists, is_readable, is_writable и filesize.
Пример проверки файла
<?php
$file = 'config.php';
if (file_exists($file)) {
echo "Файл существует.<br>";
if (is_readable($file)) {
echo "Файл доступен для чтения.<br>";
echo "Размер файла: " . filesize($file) . " байт.";
} else {
echo "Файл существует, но не доступен для чтения.";
}
} else {
echo "Файл не найден.";
}
?>
Проверка типа файла
Функция filetype возвращает тип файла: 'file', 'dir', 'link' и другие.
<?php
$path = 'uploads';
if (file_exists($path)) {
echo "Тип: " . filetype($path); // выведет 'dir' если это папка
}
?>
Управление директориями
Работа с папками в PHP не менее важна. Вы можете создавать, удалять и сканировать директории.
Создание и удаление папок
<?php
// Создание папки
if (!file_exists('backup')) {
mkdir('backup', 0777, true); // третий параметр true — рекурсивное создание
echo "Папка создана.";
}
// Удаление пустой папки
if (file_exists('temp')) {
rmdir('temp');
echo "Папка удалена.";
}
?>
Сканирование содержимого директории
Функция scandir возвращает массив всех файлов и папок внутри указанной директории:
<?php
$dir = 'uploads';
$files = scandir($dir);
echo "Содержимое папки '$dir':<br>";
foreach ($files as $file) {
if ($file !== '.' && $file !== '..') {
echo $file . "<br>";
}
}
?>
Практический пример: система логирования
Теперь объединим полученные знания в реальном проекте. Создадим простую систему логирования, которая записывает действия пользователя в файл с меткой времени.
<?php
class Logger {
private $logFile;
public function __construct($filename = 'app.log') {
$this->logFile = $filename;
// Создаем папку для логов, если её нет
$dir = dirname($filename);
if (!file_exists($dir)) {
mkdir($dir, 0777, true);
}
}
public function log($message) {
$timestamp = date('Y-m-d H:i:s');
$logEntry = "[$timestamp] $message" . PHP_EOL;
// Добавляем запись в конец файла
file_put_contents($this->logFile, $logEntry, FILE_APPEND | LOCK_EX);
}
public function getLogs() {
if (!file_exists($this->logFile)) {
return [];
}
$content = file_get_contents($this->logFile);
return explode(PHP_EOL, trim($content));
}
}
// Использование
$logger = new Logger('logs/actions.log');
$logger->log("Пользователь вошел в систему.");
$logger->log("Пользователь создал новый пост.");
echo "Последние логи:<br>";
$logs = $logger->getLogs();
foreach (array_reverse($logs) as $log) {
echo $log . "<br>";
}
?>
Важные моменты безопасности
При работе с файловой системой в PHP всегда помните о безопасности:
- Проверяйте пути
Блоги
Рекомендаций по книгам
Читайте также
Обработка ошибок в JavaScript: try/catch, async/await и продвинутые паттерны
Java-проекты для портфолио: от новичка до джуниора в 2025
Обработка ошибок в Swift: try/catch и продвинутые техники
Как правильно повторять символы в C#: от наивного кода до оптимизации
Generics в Swift: зачем нужны и как использовать