Компонент 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();
}
|
mkdir¶
mkdir()
создаёт каталог
рекурсивно. В файловых системах POSIX, каталоги создаются со значением режима
по умолчанию 0777. Вы можете использовать второй аргумент, чтобы установить
ваш собственный режим:
1 | $fileSystem->mkdir('/tmp/photos', 0700);
|
Note
Вы можете передать массив или любой traversable
объект в
качестве первого аргумента.
Note
Эта функция игнорирует уже существующие каталоги.
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');
|
symlink¶
symlink()
создаёт символьную
ссылку от цели к направлению. Если файловая система не поддерживает символьные
ссылки, доступен третий булев аргумент:
1 2 3 4 5 | // создаёт символьную ссылку
$fileSystem->symlink('/path/to/source', '/path/to/destination');
// дублирует каталог источника, если файловая система
// не поддерживает символьные ссылки
$fileSystem->symlink('/path/to/source', '/path/to/destination', true);
|
readlink¶
readlink()
читает ссылки целей.
Функция PHP readlink()
возвращает цель символьной ссылки. Однако, её поведение
полностью отличается в Windows и Unix. В системах Windows, readlink()
рекурсивно
разрешает дочерние ссылки до нахождения финмальной цели. В системах, основанных на
Unix, readlink()
разрешает только следующую ссылку.
Метод readlink()
, предоставленные
компонентом Filesystem всегда ведёт себя одинаково:
1 2 3 4 5 6 | // возвращает следующую прямую цель ссылки, не рассматривая существование цели
$fileSystem->readlink('/path/to/link');
// возвращает абсолютнуюп полностью разрешённую финальную версию цели
// (если были вложенные ссылки, они разрешены)
$fileSystem->readlink('/path/to/link', true);
|
Её поведение следующее:
1 | public function readlink($path, $canonicalize = false)
|
- Когда
$canonicalize
-false
: - если
$path
не существует, или не является ссылкой, то возвращаетсяnull
. - если
$path
- ссылка, возвращается следующая прямая цель ссылки, не рассматривая существование цели.
- если
- Когда
- Когда
$canonicalize
-true
: - если
$path
не существует, то возвращаетсяnull
. - если
$path
существует, то возвращается его абсолютная полностью разрешённая финальная версия.
- если
- Когда
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.