File Entity type for Arris µFramework. Simple OOP File wrapper.
Класс File предоставляет объектно-ориентированный интерфейс для работы с файлами в PHP.
Инкапсулирует основные операции с файлами (чтение, запись, перемещение, копирование)
и предоставляет метаданные (размер, MIME-тип, время изменения, хэш, владелец).
- PHP ^8.2
- ext-posix
- ext-fileinfo
composer require karelwintersky/arris.entity.fileuse Arris\Entity\File;
// Чтение существующего файла
$file = new File('/path/to/file.txt');
$content = $file->getContent();
// Создание нового файла
$file = File::create('/path/to/new.txt', 'Hello World');
// Временный файл (автоматически удаляется через closeAndDelete())
$file = File::createTemp('upload_', 'data');
// ...работа с файлом...
$file->closeAndDelete();| Константа | Значение | Описание |
|---|---|---|
FM_READ |
'r' |
Только чтение |
FM_RW |
'r+' |
Чтение и запись |
FM_WRITE |
'w+' |
Запись (создаёт файл, обрезает существующий) |
FM_APPEND |
'a+' |
Дозапись в конец |
FM_CREATE |
'c+' |
Запись (создаёт файл, не обрезает существующий) |
Создаёт объект для существующего файла. Если файл не существует — бросает FileException.
$file = new File('/path/to/file.txt'); // только запоминает путь
$file = new File('/path/to/file.txt', true); // сразу открывает хэндлерСоздаёт новый файл. Бросает InvalidArgumentException если файл уже существует.
$file = File::create('/tmp/data.txt', 'contents');Создаёт временный файл в системном каталоге для temp-файлов.
$temp = File::createTemp('app_', 'temporary data');
$temp->isTemp(); // trueОткрывает файл, создаёт хэндлер. Возвращает $this для цепочки.
$file->open(File::FM_READ)->getContent();Закрывает хэндлер. Не удаляет файл.
$file->close(); // молча, если не открыт
$file->close(false); // бросает исключение если не открытЗакрывает хэндлер и удаляет файл. Удобно для временных файлов.
$temp = File::createTemp('log_');
// ...записать данные...
$temp->closeAndDelete();Получить содержимое файла. С параметрами — чтение с позиции.
$all = $file->getContent();
$chunk = $file->getContent(1024, 512); // 512 байт с позиции 1024Записать содержимое. Возвращает количество записанных байт.
$bytes = $file->putContent('data');
$file->putContent(' appended', FILE_APPEND);Запись с указанной позиции (через хэндлер).
$file->writeFromPosition('NEW', 5); // заменяет с 5-й позицииЧтение с указанной позиции (через хэндлер).
$chunk = $file->readFromPosition(10, 20);Обрезает файл до указанного размера.
$file->truncate(); // обрезать до 0
$file->truncate(1024); // обрезать до 1024 байтПеремещает файл. Если $newPath заканчивается на /, сохраняет текущее имя.
$file->move('/new/path/file.txt');
$file->move('/new/directory/'); // переместит с тем же именемКопирует файл. Возвращает новый объект File для копии.
$copy = $file->copy('/backup/file.txt');Удаляет файл.
$file->delete(); // молча, если не существует
$file->delete(false); // бросает исключение если не существуетПолный путь к файлу.
Имя файла с расширением (без пути): file.txt
Имя файла без расширения: file
Расширение без точки: txt
Путь к директории: /path/to
Размер файла в байтах. getLength() — алиас.
MIME-тип: text/plain, image/jpeg
Timestamp последнего изменения.
Хэш файла. Поддерживает любой алгоритм из hash_algos().
Владелец файла (POSIX):
[
'uid' => 1000,
'gid' => 1000,
'name' => 'user',
'group' => 'user',
'dir' => '/home/user',
'shell' => '/bin/bash'
]| Метод | Описание |
|---|---|
exists(): bool |
Файл существует на диске |
isReadable(): bool |
Файл доступен для чтения |
isWritable(): bool |
Файл доступен для записи |
isExecutable(): bool |
Файл исполняемый |
isLink(): bool |
Символическая ссылка |
isImage(): bool |
MIME-тип начинается с image/ |
isVideo(): bool |
MIME-тип начинается с video/ |
| Метод | Описание |
|---|---|
getHandler() |
Файловый хэндлер (resource) или null |
isOpened(): bool |
Хэндлер открыт |
isTemp(): bool |
Временный файл |
Проверка совпадения строки с shell-шаблоном (обёртка над fnmatch()).
File::match('*.txt', 'file.txt', FNM_PATHNAME); // trueВсе ошибки файловых операций бросают Arris\Entity\Exceptions\FileException.
Статический фабричный метод:
FileException::create("File not found: %s", [$path]);$file = new File('/etc/config.json');
if ($file->isReadable()) {
echo $file->getContent();
echo "Size: {$file->getSize()} bytes";
echo "Modified: " . date('Y-m-d H:i', $file->getLastModifiedTime());
}$file = new File('/tmp/data.txt');
$file->open(File::FM_WRITE)
->writeFromPosition('PATCHED', 0)
->close();$original = new File('/uploads/photo.jpg');
$backup = $original->copy('/backups/photo.jpg');
$original->move('/archive/photo.jpg');$temp = File::createTemp('cache_', 'initial data');
$temp->putContent(' updated');
$content = $temp->getContent();
$temp->closeAndDelete(); // хэндлер закрыт, файл удалён$file = File::create('/tmp/patch.bin', str_repeat('A', 1024));
$file->writeFromPosition('B', 512);
$middle = $file->readFromPosition(500, 24);