Класс Phar поддерживает чтение и обработку Phar-архивов, а также итерацию через унаследованную функциональность класса RecursiveDirectoryIterator. За счёт поддержки интерфейса ArrayAccess доступ к файлам внутри Phar-архива получают как к элементам ассоциативного массива.
Класс PharData расширяет класс Phar
и позволяет создавать и изменять неисполняемые tar- и zip-архивы данных,
даже если в файле php.ini установили phar.readonly=1. Фактически методы
PharData::setAlias() и PharData::setStub()
отключены, поскольку концепция псевдонима и заглушки уникальна
для исполняемых phar-архивов.
Важно отметить, что при создании Phar-архива в конструктор объекта Phar передаётся полный путь. Попытки инициализации объекта Phar с относительными путями потерпят неудачу.
Предположим, что переменная $p — объект Phar, который инициализировали следующим выражением:
<?php
$p = new Phar('/путь/к/myphar.phar', 0, 'myphar.phar');
Пустой Phar-архив создаётся по пути /путь/к/myphar.phar,
или, если файл /path/to/myphar.phar уже содержится на диске, — открывается повторно.
Имя myphar.phar показывает концепцию псевдонима,
который указывает на файл /путь/к/myphar.phar
в URL-адресах, подобно тому, как показано ниже:
<?php
// Следующие два вызова функции file_get_contents() равнозначны,
// если в манифесте файла /путь/к/myphar.phar явно задали псевдоним "myphar.phar"
// или инициализировал phar как в предыдущем примере — путём настройки объекта Phar:
$f = file_get_contents('phar:///путь/к/myphar.phar/whatever.txt');
$f = file_get_contents('phar://myphar.phar/whatever.txt');
С только что созданным объектом $p класса Phar
возможно следующее:
$a = $p['file.php'] создаст объект класса PharFileInfo,
который станет ссылаться на содержимое phar://myphar.phar/file.php
Выражение $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-архива получится только через класс Phar.
Полное описание класса содержит страница Phar.
Класс PharFileInfo расширяет класс SplFileInfo и добавляет ряд методов для работы со сжатием и метаданными файлов внутри Phar-архивов.