cloud-castle/file-system

Production-ready PHP 8.1+ package (CloudCastle FileSystem).

Maintainers

Package info

gitverse.ru/cloud-castle/file-system

Homepage

Issues

Documentation

pkg:composer/cloud-castle/file-system

Transparency log

Statistics

Installs: 17

Dependents: 6

Suggesters: 0

v1.0.2 2026-07-18 15:23 UTC

This package is not auto-updated.

Last update: 2026-07-18 18:18:51 UTC


README

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano

CloudCastle FileSystem

CloudCastle FileSystem

Packagist Version Downloads PHP Version License

Безопасная работа с файловой системой для PHP 8.1+: атомарная запись, операции с каталогами и метаданными, лексические операции с путями с выявлением path traversal. Зависимости — только php и ext-fileinfo.

Установка

composer require cloud-castle/file-system

Требуется PHP 8.1+ и расширение fileinfo.

Быстрый старт

<?php

use CloudCastle\FileSystem\FileSystem;
use CloudCastle\FileSystem\Path;

// Атомарная запись (временный файл + rename) — без частично записанных файлов.
FileSystem::write('/var/app/config/app.php', '<?php return ["debug" => false];');

$content = FileSystem::read('/var/app/config/app.php');
$sha256 = FileSystem::hash('/var/app/config/app.php');
$mime = FileSystem::mimeType('/var/app/config/app.php');

// Каталоги.
FileSystem::makeDirectory('/var/app/cache');
$files = FileSystem::allFiles('/var/app');       // рекурсивно, отсортировано
FileSystem::deleteDirectory('/var/app/cache');   // рекурсивно

// Пути (без обращения к диску).
$path = Path::join('/var', 'app', 'config');     // «/var/app/config»
$safe = Path::normalize('/var/data/../../etc');  // «/etc» — виден выход за пределы
$ext = Path::extension('App.PHP');               // «php»

Возможности

  • Атомарная запись через временный файл + rename — исключает частично записанные файлы при сбое или гонке.
  • Файлы: чтение, построчное чтение, запись, дозапись в начало/конец, копирование, перемещение, удаление, touch, chmod.
  • Метаданные: размер, время модификации, хеш (sha256 и др.), MIME-тип.
  • Каталоги: создание (рекурсивно), гарантированное существование, рекурсивное удаление и очистка, листинг файлов/подкаталогов/рекурсивно.
  • Пути: join, лексическая normalize (выявление path traversal), isAbsolute, extension, filename, changeExtension, hasExtension.
  • Безопасность: отклонение байта NUL в путях, атомарность, контрактные исключения вместо предупреждений PHP.

Сравнение с аналогами

Сравнение с пятью самыми популярными аналогами по четырём осям. Интероперабельность подтверждена тестами tests/Integration/CompetitorInteroperabilityTest.php, а производительность и память измерены в изолированных процессах (2000 итераций запись+чтение по 512 байт, минимум из трёх прогонов, PHP 8.1).

Функциональность

Возможность🏆 CloudCastlesymfony/filesystemleague/flysystemilluminate/filesystemnette/utils
Атомарная запись (temp+rename)
Дозапись в начало и конецтолько конецтолько конецтолько конец
Хеш файла из коробки
MIME-тип из коробки
Рекурсивный листинг файлов
Лексические операции с путями✅ (Path)
Выявление path traversal⚠️ частично
Покрытие набора операций🏆 полноевысокоесреднеевысокоенизкое

Производительность

ПакетВремя (2000× запись+чтение)Атомарная записьИтог
🏆 CloudCastle318 мсбыстрейший среди безопасных (атомарных)
league/flysystem324 мсмедленнее нас и без атомарности
symfony/filesystem515 мсединственный конкурент с атомарностью — на 62% медленнее
illuminate/filesystem143 мсбыстрее, но ценой отказа от атомарности
nette/utils156 мсбыстрее, но ценой отказа от атомарности

illuminate и nette быстрее за счёт неатомарной записи (риск частичного файла при сбое/гонке). Среди пакетов, гарантирующих атомарность, CloudCastle — самый быстрый.

Безопасность

Свойство🏆 CloudCastlesymfony/filesystemleague/flysystemilluminate/filesystemnette/utils
Атомарная запись (нет частичных файлов)
Отклонение байта NUL в пути
Выявление выхода за каталог (normalize)⚠️
Блокировка при записи (LOCK_EX)
Контрактные исключения (маркер-интерфейс)⚠️
Итог🏆 максимумвысокийнизкийнизкийсредний

Использование памяти

ПакетПиковая память (нагрузка)Транзитивные зависимостиИтог
🏆 CloudCastle7 333 KB0 (только ext-fileinfo)минимум памяти и нулевой footprint
symfony/filesystem7 333 KB0наравне по памяти
nette/utils7 333 KB0наравне по памяти
illuminate/filesystem7 333 KB~6 (весь illuminate/support)тяжёлый footprint зависимостей
league/flysystem8 314 KB2 (адаптер + mime-detection)больше всего памяти

Вывод: CloudCastle FileSystem — единственный пакет, одновременно дающий атомарность, полный набор операций, защиту от path traversal, минимум памяти и нулевые зависимости.

Разработка

composer install
composer check    # линтеры + статический анализ + тесты
composer fix      # автоисправления (Rector, PHP CS Fixer, PHPCBF)
composer ci       # полный CI-пайплайн локально

Полный список команд с описаниями: composer run-script --list.

Документация

Лицензия

MIT © CloudCastle (alex-4-17@yandex.ru)

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano