Phar 및 PharData 클래스
Phar 클래스는 Phar 아카이브의 읽기 및 조작은 물론 RecursiveDirectoryIterator 클래스의 상속된 기능을 통한 반복을 지원합니다. ArrayAccess 인터페이스에 대한 지원으로 Phar 아카이브 내의 파일은 연관 어레이의 일부인 것처럼 액세스할 수 있습니다.
PharData 클래스는 Phar를 확장하고 php.ini에서 phar.readonly
=1인 경우에도 실행 불가능한(데이터) tar 및 zip 아카이브를 만들고 수정할 수 있습니다. 이와 같이 PharData::setAlias() 및 PharData::setStub()는 둘 다 비활성화됩니다. 별칭과 스텁의 개념은 실행 가능한 phar 아카이브에 고유하기 때문입니다.
Phar 아카이브를 생성할 때 전체 경로가 Phar 객체 생성자에 전달되어야 한다는 점에 유의하는 것이 중요합니다. 상대 경로는 초기화에 실패합니다.
$p
가 다음과 같이 초기화된 Phar 객체라고 가정합니다.
<?php
$p = new Phar('/path/to/myphar.phar', 0, 'myphar.phar');
?>
빈 Phar 아카이브가 /path/to/myphar.phar
에 생성되거나 /path/to/myphar.phar
가 이미 존재하는 경우 다시 열립니다. 리터럴 myphar.phar
는 다음과 같이 URL에서 /path/to/myphar.phar
를 참조하는 데 사용할 수 있는 별칭의 개념을 보여줍니다.
<?php
// these two calls to file_get_contents() are equivalent if
// /path/to/myphar.phar has an explicit alias of "myphar.phar"
// in its manifest, or if the phar was initialized with the
// previous example's Phar object setup
$f = file_get_contents('phar:///path/to/myphar.phar/whatever.txt');
$f = file_get_contents('phar://myphar.phar/whatever.txt');
?>
새로 생성된 $p
Phar 개체를 사용하면 다음이 가능합니다.
-
$a = $p['file.php']
는 phar://myphar.phar/file.php
의 내용을 참조하는 PharFileInfo 클래스를 생성합니다. -
$p['file.php'] = $v
는 새 파일(phar://myphar.phar/file.php
)을 생성하거나myphar.phar
내의 기존 파일을 덮어씁니다.$v
는 문자열 또는 열린 파일 포인터일 수 있으며, 이 경우 파일의 전체 내용이 새 파일을 만드는 데 사용됩니다.$p->addFromString('file.php', $v)
은 기능적으로 위와 동일합니다.$p->addFile('/path/to/file.php', 'file.php')
을 사용하여 파일의 내용을 추가하는 것도 가능합니다. 마지막으로$p->addEmptyDir('empty')
로 빈 디렉토리를 생성할 수 있습니다. -
isset($p['file.php'])
을 사용하여phar://myphar.phar/file.php
가myphar.phar
내에 존재하는지 확인할 수 있습니다. -
unset($p['file.php'])
은phar://myphar.phar/file.php
를myphar.phar
에서 지웁니다.
또한 Phar 객체는 Phar::getMetadata()를 통해 Phar 관련 메타데이터에 액세스하는 유일한 방법이며 Phar::getStub() 및 Phar::setStub()를 통해 Phar 아카이브의 PHP 로더 스텁을 설정하거나 검색하는 유일한 방법입니다. . 또한 한 번에 전체 Phar 아카이브에 대한 압축은 Phar 클래스를 통해서만 조작할 수 있습니다.
Phar 개체 기능의 전체 목록은 아래에 설명되어 있습니다.
PharFileInfo 클래스는 SplFileInfo 클래스를 확장하고 압축 및 메타데이터 조작과 같이 Phar 내에 포함된 파일의 Phar 관련 세부 정보를 조작하기 위한 여러 메서드를 추가합니다.