Phar::buildFromIterator

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

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

Описание

public Phar::buildFromIterator ( Iterator $iter , string $base_directory = ? ) : array

Замечание:

Для корректной работы с объектами 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-архив из файлов, расположенных внутри директории