Filesystem abstraction layer, the goal is to provide a model where you design how you put your files into directories without worrying where it will be persisted.
composer install innmind/filesystem
The whole model is structured around files, directories, contents and adapters. File
, Directory
and Content
are immutable objects.
Example:
use Innmind\Filesystem\{
File,
File\Content,
Directory,
Adapter\Filesystem,
};
use Innmind\Url\Path;
$directory = Directory::named('uploads')->add(
File::named(
$_FILES['my_upload']['name'],
Content::ofString(\file_get_contents($_FILES['my_upload']['tmp_name'])),
),
);
$adapter = Filesystem::mount(Path::of('/var/www/web/'));
$adapter->add($directory);
This example show you how you can create a new directory uploads
in the folder /var/www/web/
of your filesystem and create the uploaded file into it.
Note: For performance reasons the filesystem adapter only persist to disk the files that have changed (achievable via the immutable nature of file objects).
All adapters implements Adapter
, so you can easily replace them; especially for unit tests, that's why the library comes with an InMemory
adapter that only keeps the files into memory so you won't mess up your file system.