Phar::buildFromIterator
(PHP 5 >= 5.3.0, PHP 7, PECL phar >= 2.0.0)
Phar::buildFromIterator — Создает phar-архив из итератора
Описание
Замечание:
Для корректной работы с объектами Phar этому методу необходима установка значения php.ini
phar.readonlyв0. В противном случае, будет выброшено исключение PharException.
Заполняет phar-архив из итератора. Поддерживаются итераторы двух типов: такие, в которых отображается соответствие имени файла внутри phar-архива к файлу на диске, и такие как DirectoryIterator, которые возвращают объекты SplFileInfo. Для итераторов, которые возвращают объекты SplFileInfo, второй параметр является обязательным.
Список параметров
-
iter -
Любой итератор, который или ассоциативно отображает пукти к файлам внутри phar-архива к файлам на диске, или возвращает объекты SplFileInfo.
-
base_directory -
Для итераторов, возвращающих объекты SplFileInfo, — часть полного пути каждого файла, которая должна быть удалена во время его добавления в phar-архив.
Возвращаемые значения
Phar::buildFromIterator() возвращает ассоциативный массив, в котором отображаются соответствия пути к файлу внутри архива к пути к файлу в файловой системе.
Примеры
Пример #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'));
?>
Ошибки
Этот метод выбрасывает исключение UnexpectedValueException,
когда итератор возвращает некорректные значения, такие как целочисленный ключ
вместо строки. Исключение BadMethodCallException будет брошено,
когда итератор, основанный на SplFileInfo, используется без параметра
base_directory. Исключение PharException
выбрасывается в случае ошибок сохранения phar-архива.
Смотрите также
- Phar::buildFromDirectory() - Создает phar-архив из файлов, расположенных внутри директории