La classe Phar supporte la lecture et la manipulation des archives Phar, ainsi que l'itération à travers la fonctionnalité héritée de la classe RecursiveDirectoryIterator. Avec le support de l'interface ArrayAccess, les fichiers contenus dans une archive Phar peuvent être accédés comme s'ils étaient membres d'un tableau associatif.
La classe PharData étend la classe Phar, et
permet la création et la modification d'archives tar et zip non exécutables (données) même si
phar.readonly
=1 dans php.ini. Ainsi,
PharData::setAlias() et PharData::setStub()
sont toutes deux désactivées car les concepts d'alias et de conteneur sont restreints aux
archives phar exécutables.
Il est important de noter que quand une archive Phar est créée, le chemin complet doit être passé au constructeur de l'objet Phar. Un chemin relatif empêcherait l'initialisation.
En supposant que $p
est un objet initialisé de cette façon :
<?php
$p = new Phar('/chemin/vers/monphar.phar', 0, 'monphar.phar');
?>
Une archive Phar vide sera créée en tant que /chemin/vers/monphar.phar
,
ou si /chemin/vers/monphar.phar
existe déjà, il sera ouvert
de nouveau. Le terme monphar.phar
démontre le concept d'un alias
qui peut être utilisé pour référencer /chemin/vers/monphar.phar
dans des URL comme ceci :
<?php
// ces deux appels à file_get_contents() sont équivalents si
// /chemin/vers/monphar.phar a un alias explicite de "monphar.phar"
// dans son mainfeste, ou si le phar a été initialisé avec l'instantiation de
// l'objet Phar de l'exemple précedent
$f = file_get_contents('phar:///chemin/vers/monphar.phar/nimportequoi.txt');
$f = file_get_contents('phar://monphar.phar/nimportequoi.txt');
?>
Avec l'objet Phar $p
nouvellement créé,
les choses suivantes sont possibles :
$a = $p['fichier.php']
crée une PharFileInfo
qui réfère au contenu de phar://monphar.phar/fichier.php
$p['fichier.php'] = $v
crée un nouveau fichier
(phar://monphar.phar/fichier.php
), ou écrase
un fichier existant au sein de monphar.phar
. $v
peut être soit une chaîne ou un pointeur vers un fichier ouvert, dans quel cas
le contenu du fichier sera utilisé pour créer le nouveau fichier. Notez que
$p->addFromString('fichier.php', $v)
est équivalent en terme de
fonctionnalité au cas ci-dessus. Il est aussi possible d'ajouter le contenu d'un fichier
avec $p->addFile('/chemin/vers/fichier.php', 'fichier.php')
.
Enfin, un répertoire vide peut être créé avec
$p->addEmptyDir('vide')
.
isset($p['fichier.php'])
peut être utilisé pour déterminer
si phar://monphar.phar/fichier.php
existe au sein de
monphar.phar
.
unset($p['fichier.php'])
efface
phar://monphar.phar/fichier.php
de
monphar.phar
.
De plus, l'objet Phar est le seul moyen d'accéder aux métadonnées spécifiques de Phar, via Phar::getMetadata(), et c'est aussi le seul moyen de régler ou de récupérer le conteneur du chargeur de l'archive Phar via Phar::getStub() et Phar::setStub(). De plus, la compression pour l'archive Phar entière peut être manipulée seulement via la classe Phar.
La liste complète des fonctionnalités de l'objet Phar est documentée ci-dessous.
La classe PharFileInfo étend la classe SplFileInfo et ajoute plusieurs méthodes pour manipuler les métadonnées spécifiques à Phar d'un fichier contenu dans un Phar, telles que manipuler la compression ou les métadonnées.