## Использование Phar-архивов: классы Phar и PharData

Класс 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-архиве, такими как работа со сжатием и метаданными.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open