Компонент Filesystem

Компонент Filesystem предоставляет базовые инструменты для файловой системы.

Установка

1
$ composer require symfony/filesystem

Также вы можете клонировать репозиторий https://github.com/symfony/filesystem.

Note

If you install this component outside of a Symfony application, you must require the vendor/autoload.php file in your code to enable the class autoloading mechanism provided by Composer. Read this article for more details.

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

Класс Filesystem - это уникальная конечная точка для операций файловой системы:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Filesystem\Exception\IOExceptionInterface;

$fileSystem = new Filesystem();

try {
    $fileSystem->mkdir(sys_get_temp_dir().'/'.random_int(0, 1000));
} catch (IOExceptionInterface $exception) {
    echo "Ошибка при создании вашего каталога ".$exception->getPath();
}

Note

Методы mkdir(), exists(), touch(), remove(), chmod(), chown() и chgrp() могут получать строку, массив или любой объект, реализующий Traversable в качестве целевого аргумента.

mkdir

mkdir() создаёт каталог рекурсивно. В файловых системах POSIX, каталоги создаются со значением режима по умолчанию 0777. Вы можете использовать второй аргумент, чтобы установить ваш собственный режим:

1
$fileSystem->mkdir('/tmp/photos', 0700);

Note

Вы можете передать массив или любой traversable объект в качестве первого аргумента.

Note

Эта функция игнорирует уже существующие каталоги.

Note

Текущий umask влияет на разрешения каталога. Установите umask для вашего веб-сервера, используйте функцию PHP umask или используйте функцию chmod после создания каталога.

exists

exists() проверяет наличие одного или болеефайлоа или каталогов и возвращает false, если какие-либо из них отсутствуют:

1
2
3
4
5
6
// если этот каталог с этим абсолютным путём существует, вернуть true
$fileSystem->exists('/tmp/photos');

// если rabbit.jpg существует, bottle.png не существует, вернуть false
// не абсолютные пути являются относительными к каталогу, где находится запущенный скрипт PHP
$fileSystem->exists(array('rabbit.jpg', 'bottle.png'));

Note

Вы можете передать массив или любой traversable объект в качестве первого аргумента.

copy

copy() делает копию одного файла (используйте mirror(), чтобы копировать каталоги). Если цель уже существует, то файл копируется только, если дата изменения источника позже, чем у цели. Это поведение можно переопределить третьим булевым аргументом:

1
2
3
4
5
// работает только, если image-ICC было изменено после image.jpg
$fileSystem->copy('image-ICC.jpg', 'image.jpg');

// image.jpg будет переопределено
$fileSystem->copy('image-ICC.jpg', 'image.jpg', true);

touch

touch() устанавливает доступ и время изменения файла. Текущее время используется по умолчанию. Вы можете установить ваше собственное с помощью второго аргумента. Третий аргумент - это время доступа:

1
2
3
4
5
6
// устанавливает время изменения в текущей отметке времени
$fileSystem->touch('file.txt');
// устанавливает время изменения на 10 секунд в будущем
$fileSystem->touch('file.txt', time() + 10);
// устанавливает время изменения на 10 секунд в прошлом
$fileSystem->touch('file.txt', time(), time() - 10);

Note

Вы можете передать массив или любой traversable объект в качестве первого аргумента.

chown

chown() изменяет владельца файла. Третий аргумент - рекурсивная булева опция:

1
2
3
4
// устанавливает владельца видео lolcat как www-data
$fileSystem->chown('lolcat.mp4', 'www-data');
// рекурсивно изменяет владельца каталога видео
$fileSystem->chown('/video', 'www-data', true);

Note

Вы можете передать массив или любой traversable объект в качестве первого аргумента.

chgrp

chgrp() изменяет группу файла. Третий аргумент - рекурсивная булева опция:

1
2
3
4
// устанавливает группу видео lolcat как nginx
$fileSystem->chgrp('lolcat.mp4', 'nginx');
// рекурсивно изменяет группу каталога видео
$fileSystem->chgrp('/video', 'nginx', true);

Note

Вы можете передать массив или любой traversable объект в качестве первого аргумента.

chmod

chmod() изменяет режим или разрешения файла. Четвертый аргумент - рекурсивная булева опция:

1
2
3
4
// устанавливает режим видео 0600
$fileSystem->chmod('video.ogg', 0600);
// рекурсивно изменяет режим каталога src
$fileSystem->chmod('src', 0700, 0000, true);

Note

Вы можете передать массив или любой traversable объект в качестве первого аргумента.

remove

remove() удаляет файлы, каталогы и сивольные ссылки:

1
$fileSystem->remove(array('symlink', '/path/to/directory', 'activity.log'));

Note

Вы можете передать массив или любой traversable объект в качестве первого аргумента.

rename

rename() изменяет имя одного файла или каталога:

1
2
3
4
// переименовывает файл
$fileSystem->rename('/tmp/processed_video.ogg', '/path/to/store/video_647.ogg');
// переименовывает каталог
$fileSystem->rename('/tmp/files', '/path/to/store/files');

makePathRelative

makePathRelative() берёт два абсолютных пути и возвращает относительный путь от второго пути к первому:

1
2
3
4
5
6
7
// возвращает '../'
$fileSystem->makePathRelative(
    '/var/lib/symfony/src/Symfony/',
    '/var/lib/symfony/src/Symfony/Component'
);
// возвращает 'videos/'
$fileSystem->makePathRelative('/tmp/videos', '/tmp')

mirror

mirror() копирует всё содержание каталога источника в целевой (используйте метод copy(), чтобы скопировать одиночные файлы):

1
$fileSystem->mirror('/path/to/source', '/path/to/target');

isAbsolutePath

isAbsolutePath() возвращает true, если данный путь абсолютный, false - во всех других случаях:

1
2
3
4
5
6
7
8
// возвращает true
$fileSystem->isAbsolutePath('/tmp');
// возвращает true
$fileSystem->isAbsolutePath('c:\\Windows');
// возвращает false
$fileSystem->isAbsolutePath('tmp');
// возвращает false
$fileSystem->isAbsolutePath('../dir');

dumpFile

dumpFile() сохраняет данное содержание в файл. Это делается автоматически: он вначале записывает временный файл и потом перемещает его в новую локацию файла, когда он закончен. Это означает, что пользовательвсегда будет видеть либо полный старый файл, либо полный новый файл (но никогда - частично написанный файл):

1
$fileSystem->dumpFile('file.txt', 'Hello World');

Файл file.txt теперь содержит Hello World.

appendToFile

appendToFile() добавляет новое содержание в конце некоторого файла:

1
$fileSystem->appendToFile('logs.txt', 'Email sent to [email protected]');

Если либо файл, либо каталог, содержащий его, не существует, то этот метод создаёт их перед добавлением содержания.

Обработка ошибок

Когда что-то идёт не так, вызывается исключение, реализующее ExceptionInterface или IOExceptionInterface.

Note

Если создание каталога проходит неуспешно, вызывается IOException.

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.