Phar::buildFromIterator
(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL phar >= 2.0.0)
Phar::buildFromIterator — 반복자에서 phar 아카이브를 구성합니다.
설명
public Phar::buildFromIterator(Traversable $iterator
, ?string $baseDirectory
= null
): array|false
메모: 이 메서드는 Phar 객체에 대해 작동하기 위해 php.ini 설정 phar.readonly
를 0
으로 설정해야 합니다. 그렇지 않으면 PharException이 발생합니다.
반복자에서 phar 아카이브를 채웁니다. 두 가지 스타일의 반복자가 지원되는데, phar 내의 파일 이름을 디스크의 파일 이름에 매핑하는 반복자와 SplFileInfo 개체를 반환하는 DirectoryIterator와 같은 반복자입니다. SplFileInfo 개체를 반환하는 반복자의 경우 두 번째 매개 변수가 필요합니다.
매개변수
iterator
- phar 파일을 위치에 연관적으로 매핑하거나 SplFileInfo 개체를 반환하는 모든 반복기
baseDirectory
- SplFileInfo 개체를 반환하는 반복자의 경우 phar 아카이브에 추가할 때 제거할 각 파일의 전체 경로 부분
반환 값
Phar::buildFromIterator()는 파일의 내부 경로를 파일 시스템에 있는 파일의 전체 경로에 매핑하는 연관 배열을 반환하거나 실패 시 false
를 반환합니다.
오류/예외
이 메서드는 반복자가 문자열 대신 정수 키와 같은 잘못된 값을 반환할 때 UnexpectedValueException을 반환하고, SplFileInfo 기반 반복자가 baseDirectory
매개변수 없이 전달될 때 BadMethodCallException을 반환하거나, phar 아카이브를 저장하는 동안 오류가 발생한 경우 PharException을 반환합니다.
변경 로그
버전 | 설명 |
---|---|
8.0.0 | baseDirectory 는 이제 null을 허용합니다. |
Examples
예제 #1 SplFileInfo가 있는 Phar::buildFromIterator()
대부분의 phar 아카이브의 경우 아카이브는 실제 디렉토리 레이아웃을 반영하며 두 번째 스타일이 가장 유용합니다. 예를 들어, 이 샘플 디렉토리 레이아웃의 파일을 포함하는 phar 아카이브를 생성하려면:
/path/to/project/ config/ dist.xml debug.xml lib/ file1.php file2.php src/ processthing.php www/ index.php cli/ index.php
이 코드는 다음 파일을 "project.phar" phar 아카이브에 추가하는 데 사용할 수 있습니다.
<?php
// create with alias "project.phar"
$phar = new Phar('project.phar', 0, 'project.phar');
$phar->buildFromIterator(
new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('/path/to/project')),
'/path/to/project');
$phar->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));
?>
그러면 project.phar 파일을 즉시 사용할 수 있습니다. Phar::buildFromIterator()는 압축, 메타데이터 등의 값을 설정하지 않으며, 이는 phar 아카이브를 생성한 후 수행할 수 있습니다.
흥미로운 점은 Phar 객체가 DirectoryIterator의 자손이므로 Phar::buildFromIterator()를 사용하여 기존 phar 아카이브의 내용을 복사할 수도 있습니다.
<?php
// create with alias "project.phar"
$phar = new Phar('project.phar', 0, 'project.phar');
$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 다른 반복자가 있는 Phar::buildFromIterator()
반복자의 두 번째 형식은 ArrayIterator와 같이 key => value 매핑을 반환하는 모든 반복자와 함께 사용할 수 있습니다.
<?php
// create with alias "project.phar"
$phar = new Phar('project.phar', 0, 'project.phar');
$phar->buildFromIterator(
new ArrayIterator(
array(
'internal/file.php' => dirname(__FILE__) . '/somefile.php',
'another/file.jpg' => fopen('/path/to/bigfile.jpg', 'rb'),
)));
$phar->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));
?>
기타
- Phar::buildFromDirectory() - 디렉토리 내의 파일에서 phar 아카이브를 구성합니다.