Використання 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, ініціалізований, як показано нижче:

Loading...

Порожній Phar-архів буде створено в /шлях/до/myphar.phar, або якщо файл /path/to/myphar.phar вже існує, він буде відкрито повторно. Використання myphar.phar показує концепцію псевдоніма, який може бути використаний для вказівки на /шлях/до/myphar.phar в URL-адресах, подібно до того, як показано нижче:

Loading...

З щойно створеним об'єктом $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-архіві, такими як робота зі стисненням та метаданими.