PharData::buildFromIterator
(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.