PharData::buildFromIterator
(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL phar >= 2.0.0)
PharData::buildFromIterator — Создание tar/zip-архива с помощью итератора
Список параметров
iterator
-
Итератор, предоставляющий связки ключ=>значение, либо
объекты SplFileInfo
baseDirectory
-
Для итераторов, возвращающих объекты SplFileInfo, часть полного пути
добавляемых файлов, которая будет удаляться из полного пути внутри
архива.
Возвращаемые значения
PharData::buildFromIterator() возвращает ассоциативный массив,
связывающий путь к файлу внутри архива с полным путём к файлу на диске.
Ошибки
Метод выбрасывает исключение UnexpectedValueException, если
итератор вернул некорректное значение, например целочисленный ключ вместо строки.
Исключение BadMethodCallException выбрасывается когда
задан итератор, возвращающий объекты SplFileInfo без задания параметра
baseDirectory
. В случае проблем с записью на диск бросается
исключение PharException.
Примеры
Пример #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'),
)));
?>