Компонент Filesystem в Symfony 4.

Компонент 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 генерируется, если создание каталога не удается.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *