PharData::buildFromIterator

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

PharData::buildFromIterator — 반복자에서 tar 또는 zip 아카이브를 구성합니다.


설명

public PharData::buildFromIterator(Traversable $iterator, ?string $baseDirectory = null): array|false

반복자에서 tar 또는 zip 아카이브를 채웁니다. tar/zip 내의 파일 이름을 디스크의 파일 이름에 매핑하는 반복자와 SplFileInfo 개체를 반환하는 DirectoryIterator와 같은 두 가지 스타일의 반복자가 지원됩니다. SplFileInfo 개체를 반환하는 반복자의 경우 두 번째 매개 변수가 필요합니다.


매개변수

iterator
tar/zip 파일을 위치에 연관적으로 매핑하거나 SplFileInfo 개체를 반환하는 모든 반복기
baseDirectory
SplFileInfo 개체를 반환하는 반복자의 경우 tar/zip 아카이브에 추가할 때 제거할 각 파일의 전체 경로 부분

반환 값

PharData::buildFromIterator()는 파일의 내부 경로를 파일 시스템에 있는 파일의 전체 경로에 매핑하는 연관 배열을 반환하거나 실패 시 false를 반환합니다.


오류/예외

이 메서드는 반복자가 문자열 대신 정수 키와 같은 잘못된 값을 반환할 때 UnexpectedValueException을 반환하고, SplFileInfo 기반 반복자가 baseDirectory 매개변수 없이 전달될 때 BadMethodCallException을 반환하거나, phar 아카이브를 저장하는 동안 오류가 발생한 경우 PharException을 반환합니다.


변경 로그

버전 설명
8.0.0 baseDirectory은 이제 null을 허용합니다.

Examples

예제 #1 SplFileInfo가 있는 PharData::buildFromIterator()

대부분의 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" tar 아카이브에 추가하는 데 사용할 수 있습니다.

                  
<?php
$phar = new PharData('project.tar');
$phar->buildFromIterator(
    new RecursiveIteratorIterator(
     new RecursiveDirectoryIterator('/path/to/project')),
    '/path/to/project');
?>
                  
                

그러면 project.tar 파일을 즉시 사용할 수 있습니다. PharData::buildFromIterator()는 압축, 메타데이터와 같은 값을 설정하지 않으며 이는 tar/zip 아카이브를 생성한 후에 수행할 수 있습니다.

흥미로운 점은 PharData 객체가 DirectoryIterator의 자손이므로 PharData::buildFromIterator()를 사용하여 기존 phar, tar 또는 zip 아카이브의 내용을 복사할 수도 있습니다.

                  
<?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()

                  
<?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'),
     )));
?>
                  
                

기타