Компонент Filesystem предоставляет базовые утилиты для работы с файловой системой.
Установка.
composer require symfony/filesystem
Если вы устанавливаете этот компонент вне приложения Symfony, вам потребуется файл vendor/autoload.php в вашем коде, чтобы включить механизм автозагрузки классов, предоставляемый Composer.
Использование.
Класс Filesystem является уникальной конечной точкой для операций файловой системы:
use Symfony\Component\Filesystem\Exception\IOExceptionInterface;
use Symfony\Component\Filesystem\Filesystem;
$filesystem = new Filesystem();
try {
$filesystem->mkdir(sys_get_temp_dir().'/'.random_int(0, 1000));
} catch (IOExceptionInterface $exception) {
echo "An error occurred while creating your directory at ".$exception->getPath();
}
Методы mkdir(), exist(), touch(), remove(), chmod(), chown() и chgrp() могут получить строку, массив или любой объект, реализующий Traversable в качестве целевого аргумента.
mkdir()
Метод mkdir() создает каталог рекурсивно. В файловых системах POSIX каталоги создаются со значением режима по умолчанию 0777. Вы можете использовать второй аргумент, чтобы установить свой собственный режим:
$filesystem->mkdir('/tmp/photos', 0700);
Вы можете передать массив или любой объект Traversable в качестве первого аргумента.
Эта функция игнорирует уже существующие каталоги.
Разрешения каталога зависят от текущего umask. Установите umask для своего веб-сервера, используйте функцию PHP umask или функцию chmod после создания каталога.
exists()
Метод exist() проверяет наличие одного или нескольких файлов или каталогов и возвращает false, если какой-либо из них отсутствует:
// if this absolute directory exists, returns true
$filesystem->exists('/tmp/photos');
// if rabbit.jpg exists and bottle.png does not exist, returns false
// non-absolute paths are relative to the directory where the running PHP script is stored
$filesystem->exists(['rabbit.jpg', 'bottle.png']);
Вы можете передать массив или любой объект Traversable в качестве первого аргумента.
copy()
Метод copy() создает копию одного файла (используйте mirror() для копирования каталогов). Если целевой файл уже существует, то файл копируется, только если исходная дата модификации позже, чем у уже имеющегося. Это поведение может быть переопределено третьим логическим аргументом:
// works only if image-ICC has been modified after image.jpg
$filesystem->copy('image-ICC.jpg', 'image.jpg');
// image.jpg will be overridden
$filesystem->copy('image-ICC.jpg', 'image.jpg', true);
touch()
Метод touch() устанавливает время доступа и изменения файла. Текущее время используется по умолчанию. Вы можете установить свой собственный со вторым аргументом. Третий аргумент — время доступа:
// sets modification time to the current timestamp
$filesystem->touch('file.txt');
// sets modification time 10 seconds in the future
$filesystem->touch('file.txt', time() + 10);
// sets access time 10 seconds in the past
$filesystem->touch('file.txt', time(), time() - 10);
Вы можете передать массив или любой объект Traversable в качестве первого аргумента.
chown()
Метод chown() меняет владельца файла. Третий аргумент — логическая рекурсивная опция:
// sets the owner of the lolcat video to www-data
$filesystem->chown('lolcat.mp4', 'www-data');
// changes the owner of the video directory recursively
$filesystem->chown('/video', 'www-data', true);
Вы можете передать массив или любой объект Traversable в качестве первого аргумента.
chgrp()
Метод chgrp() изменяет группу файла. Третий аргумент — логическая рекурсивная опция:
// sets the group of the lolcat video to nginx
$filesystem->chgrp('lolcat.mp4', 'nginx');
// changes the group of the video directory recursively
$filesystem->chgrp('/video', 'nginx', true);
Вы можете передать массив или любой объект Traversable в качестве первого аргумента.
chmod()
Метод chmod() изменяет режим или права доступа к файлу. Четвертый аргумент — логическая рекурсивная опция:
// sets the mode of the video to 0600
$filesystem->chmod('video.ogg', 0600);
// changes the mod of the src directory recursively
$filesystem->chmod('src', 0700, 0000, true);
Вы можете передать массив или любой объект Traversable в качестве первого аргумента.
remove()
Метод remove() удаляет файлы, каталоги и символические ссылки:
$filesystem->remove(['symlink', '/path/to/directory', 'activity.log']);
Вы можете передать массив или любой объект Traversable в качестве первого аргумента.
rename()
Метод rename() изменяет имя отдельного файла или каталога:
// renames a file
$filesystem->rename('/tmp/processed_video.ogg', '/path/to/store/video_647.ogg');
// renames a directory
$filesystem->rename('/tmp/files', '/path/to/store/files');
symlink()
Метод symlink() создает символическую ссылку от цели к месту назначения. Если файловая система не поддерживает символические ссылки, доступен третий логический аргумент:
// creates a symbolic link
$filesystem->symlink('/path/to/source', '/path/to/destination');
// duplicates the source directory if the filesystem
// does not support symbolic links
$filesystem->symlink('/path/to/source', '/path/to/destination', true);
readlink()
Функция PHP readlink() возвращает цель символической ссылки. Тем не менее, его поведение совершенно отличается под Windows и Unix. В системах Windows readlink() рекурсивно разрешает дочерние ссылки ссылки, пока не будет найдена конечная цель. В Unix-системах readlink() разрешает только следующую ссылку.
Метод readlink(), предоставляемый компонентом Filesystem, всегда ведет себя одинаково:
// returns the next direct target of the link without considering the existence of the target
$filesystem->readlink('/path/to/link');
// returns its absolute fully resolved final version of the target (if there are nested links, they are resolved)
$filesystem->readlink('/path/to/link', true);
makePathRelative()
Метод makePathRelative() принимает два абсолютных пути и возвращает относительный путь от второго пути к первому:
// returns '../'
$filesystem->makePathRelative(
'/var/lib/symfony/src/Symfony/',
'/var/lib/symfony/src/Symfony/Component'
);
// returns 'videos/'
$filesystem->makePathRelative('/tmp/videos', '/tmp')
mirror()
Метод mirror() копирует все содержимое исходного каталога в целевой (используйте метод copy() для копирования отдельных файлов):
$filesystem->mirror('/path/to/source', '/path/to/target');
isAbsolutePath()
Метод isAbsolutePath() возвращает true, если указанный путь является абсолютным, иначе false:
// returns true
$filesystem->isAbsolutePath('/tmp');
// returns true
$filesystem->isAbsolutePath('c:\\Windows');
// returns false
$filesystem->isAbsolutePath('tmp');
// returns false
$filesystem->isAbsolutePath('../dir');
tempnam()
Метод tempnam() создает временный файл с уникальным именем файла и возвращает его путь, либо выдает исключение при ошибке:
// returns a path like : /tmp/prefix_wyjgtF
$filesystem->tempnam('/tmp', 'prefix_');
dumpFile()
Метод dumpFile() сохраняет данное содержимое в файл. Он делает это атомарно: сначала он записывает временный файл, а затем, когда он закончил, перемещает его в новое место. Это означает, что пользователь всегда будет видеть либо полностью старый файл, либо полностью новый файл (но не частично записанный файл):
$filesystem->dumpFile('file.txt', 'Hello World');
Файл file.txt теперь содержит Hello World.
appendToFile()
Метод appendToFile() добавляет новое содержимое в конец некоторого файла:
$filesystem->appendToFile('logs.txt', 'Email sent to user@example.com');
Если файл или содержащий его каталог не существует, этот метод создает их перед добавлением содержимого.
Обработка ошибок.
Всякий раз, когда происходит что-то не так, генерируется исключение, реализующее ExceptionInterface или IOExceptionInterface.
IOException генерируется, если создание каталога не удается.