Класс Phar поддерживает чтение и обработку Phar-архивов, а также итерацию через унаследованную функциональность класса RecursiveDirectoryIterator. Благодаря поддержке интерфейса ArrayAccess, доступ к файлам внутри Phar-архива может быть получен, как если бы они были частью ассоциативного массива.
Класс PharData расширяет класс Phar и
позволяет создавать и изменять неисполняемые tar- и zip-архивы данных даже в том случае,
если параметр phar.readonly
=1 в php.ini. Фактически функции
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-архиве, такими как работа со сжатием и метаданными.