(PHP 5 >= 5.3.0, PHP 7, PECL phar >= 2.0.0)
PharData::buildFromIterator — Создание tar/zip-архива с помощью итератора
Наполнение архив tar или zip с помощью итератора. Поддерживаются два типа итераторов: итератор, связывающий файл на диске с файлом внутри архива и итератор в стиле DirectoryIterator, который возвращает объекты SplFileInfo. Для итераторов, возвращающих объекты SplFileInfo, второй параметр является обязательным.
Пример #1 Пример использования PharData::buildFromIterator() с SplFileInfo
Для большинства tar/zip-архивов, структура отражает имеющееся дерево директорий на файловой системе. К примеру, для создания tar/zip-архива, содержащего следующую структуру директорий и файлов:
/path/to/project/ config/ dist.xml debug.xml lib/ file1.php file2.php src/ processthing.php www/ index.php cli/ index.php
Нужно использовать такой код, для создания архива "project.tar":
<?php
$phar = new PharData('project.tar');
$phar->buildFromIterator(
new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('/path/to/project')),
'/path/to/project');
?>
Файл project.tar можно использовать сразу же после его создания. PharData::buildFromIterator() не производит настройки сжатия или добавления метаданных. Эти действия необходимо произвести самостоятельно, после создания архива.
Интересное замечание: PharData::buildFromIterator() также можно использовать для копирования контента уже существующего phar, tar или zip-архива, так как объект PharData наследует от DirectoryIterator:
<?php
$phar = new PharData('project.tar');
$phar->buildFromIterator(
new RecursiveIteratorIterator(
new Phar('/path/to/anotherphar.phar')),
'phar:///path/to/anotherphar.phar/path/to/project');
$phar->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));
?>
Пример #2 Пример использования PharData::buildFromIterator() с другим итератором
Можно использовать итераторы, возвращающие связку "ключ"=>"значение", например ArrayIterator:
<?php
$phar = new PharData('project.tar');
$phar->buildFromIterator(
new ArrayIterator(
array(
'internal/file.php' => dirname(__FILE__) . '/somefile.php',
'another/file.jpg' => fopen('/path/to/bigfile.jpg', 'rb'),
)));
?>
iter
Итератор, предоставляющий связки ключ=>значение, либо объекты SplFileInfo
base_directory
Для итераторов, возвращающих объекты SplFileInfo, часть полного пути добавляемых файлов, которая будет удаляться из полного пути внутри архива.
PharData::buildFromIterator() возвращает ассоциативный массив, связывающий путь к файлу внутри архива с полным путем к файлу на диске.
Метод выбрасывает исключение UnexpectedValueException, если
итератор вернул некорректное значение, например целочисленный ключ вместо строки.
Исключение BadMethodCallException выбрасывается когда
задан итератор, возвращающий объекты SplFileInfo без задания параметра
base_directory
. В случае проблем с записью на диск бросается
исключение PharException.