Phar::buildFromIterator

(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL phar >= 2.0.0)

Phar::buildFromIteratorСоздаёт phar-архив из итератора

Описание

publicPhar::buildFromIterator(Traversable$iterator, ?string$baseDirectory = null): array

Замечание:

Для корректной работы с объектами Phar этому методу необходима установка значения php.iniphar.readonly в 0. В противном случае, будет выброшено исключение PharException.

Заполняет phar-архив из итератора. Поддерживаются итераторы двух типов: такие, в которых отображается соответствие имени файла внутри phar-архива к файлу на диске, и такие как DirectoryIterator, которые возвращают объекты SplFileInfo. Для итераторов, которые возвращают объекты SplFileInfo, второй параметр является обязательным.

Список параметров

iterator

Любой итератор, который или ассоциативно отображает пути к файлам внутри phar-архива к файлам на диске, или возвращает объекты SplFileInfo.

baseDirectory

Для итераторов, возвращающих объекты SplFileInfo, — часть полного пути каждого файла, которая должна быть удалена во время его добавления в phar-архив.

Возвращаемые значения

Phar::buildFromIterator() возвращает ассоциативный массив, в котором отображаются соответствия пути к файлу внутри архива к пути к файлу в файловой системе.

Ошибки

Этот метод выбрасывает исключение UnexpectedValueException, когда итератор возвращает некорректные значения, такие как целочисленный ключ вместо строки. Исключение BadMethodCallException будет брошено, когда итератор, основанный на SplFileInfo, используется без параметра baseDirectory. Исключение PharException выбрасывается в случае ошибок сохранения phar-архива.

Список изменений

ВерсияОписание
8.1.0Phar::buildFromIterator() больше не возвращает значение false.
8.0.0baseDirectory теперь допускает значение null.

Примеры

Пример #1 Пример использования Phar::buildFromIterator() с объектами SplFileInfo

Для большинства phar-архивов, архив будет отражать фактическую структуру директории, и второй тип итератора будет наиболее полезным. Например, он будет полезным для создания phar-архива, содержащего файлы со структурой директорий как в этом примере:

/путь/к/проекту/ config/ dist.xml debug.xml lib/ file1.php file2.php src/ processthing.php www/ index.php cli/ index.php

Для добавления этих файлов в phar-архив "project.phar" может быть использован следующий код:

<?php
// создать с псевдонимом "project.phar"
$phar = new Phar('project.phar', 0, 'project.phar');
$phar->buildFromIterator(
new
RecursiveIteratorIterator(
new
RecursiveDirectoryIterator('/путь/к/проекту')),
'/путь/к/проекту');
$phar->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));
?>

После этого файл project.phar может быть использован немедленно. Такие значения как сжатие и метаданные не устанавливаются методом Phar::buildFromIterator() и могут быть установлены после создания phar-архива.

В качестве интересного замечания можно отметить, что Phar::buildFromIterator() также может быть использован для копирования содержимого существующего phar-архива, поскольку класс Phar является потомком DirectoryIterator:

<?php
// создать с псевдонимом "project.phar"
$phar = new Phar('project.phar', 0, 'project.phar');
$phar->buildFromIterator(
new
RecursiveIteratorIterator(
new
Phar('/путь/к/anotherphar.phar')),
'phar:///путь/к/anotherphar.phar/путь/к/проекту');
$phar->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));
?>

Пример #2 Пример использования Phar::buildFromIterator() с другими типами итераторов

Второй тип предполагает использование любого итератора, возвращаемые значения которого отображают соответствие имени файла внутри phar-архива к файлу на диске, как в случае с ArrayIterator:

<?php
// создать с псевдонимом "project.phar"
$phar = new Phar('project.phar', 0, 'project.phar');
$phar->buildFromIterator(
new
ArrayIterator(
array(
'путь/внутри/архива/file.php' => dirname(__FILE__) . '/somefile.php',
'друго/путь/внутри/архива/file.jpg' => fopen('/путь/к/bigfile.jpg', 'rb'),
)));
$phar->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));
?>

Смотрите также

  • Phar::buildFromDirectory() - Создаёт phar-архив из файлов, расположенных внутри директории
To Top