Компонент Файловая система

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

Установка

Вы можете установить компонент 2 разными способами:

Then, require the vendor/autoload.php file to enable the autoloading mechanism provided by Composer. Otherwise, your application won't be able to find the classes of this Symfony component.

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

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

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

$fs = new Filesystem();

try {
    $fs->mkdir('/tmp/random/dir/'.mt_rand());
} catch (IOExceptionInterface $e) {
    echo "An error occurred while creating your directory at ".$e->getPath();
}

Note

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

mkdir

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

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

Note

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

Note

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

Note

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

exists

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

1
2
3
4
5
// этот каталог существует, вернуть true
$fs->exists('/tmp/photos');

// rabbit.jpg существует, bottle.png не существует, вернуть false
$fs->exists(array('rabbit.jpg', 'bottle.png'));

Note

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

copy

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

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

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

touch

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

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

Note

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

chown

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

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

Note

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

chgrp

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

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

Note

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

chmod

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

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

Note

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

remove

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

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

Note

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

rename

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

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

makePathRelative

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

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

mirror

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

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

isAbsolutePath

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

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

dumpFile

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

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

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

appendToFile

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

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

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

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

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

Note

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

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