Updated PHP Windows builds for Brotli security fix

Работа с Phar-архивами: классы Phar и PharData

Класс 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-архивов.

+Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top