(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL phar >= 2.0.0)
Phar::buildFromIterator — Construit une archive phar à partir d'un itérateur
Description
public
Phar::buildFromIterator(Traversable
$iterator
, ?string
$baseDirectory
=
null
): array
Note:
Cette
méthode nécessite que la variable de configuration INI phar.readonly
soit définie à 0
pour fonctionner avec les objets Phar.
Sinon, une exception PharException sera lançée.
Remplit une archive phar à partir d'un itérateur. Deux styles d'itérateur
sont supportés : les itérateurs qui font correspondre le nom de fichier
au sein du phar avec le nom d'un fichier sur le disque, et les itérateurs
comme DirectoryIterator qui retournent des objets
SplFileInfo. Pour les itérateurs qui retournent
des objets SplFileInfo, le second paramètre est
obligatoire.
Liste de paramètres
-
iterator
-
Un itérateur qui associe un fichier avec une position, ou bien
retourne des objets SplFileInfo.
-
baseDirectory
-
Pour les itérateurs qui retournent des objets
SplFileInfo, la portion de chemin absolu
de chaque fichier qu'il faut supprimer lors de l'ajout à
l'archive phar.
Valeurs de retour
phar::buildFromIterator() retourne un tableau
associatif qui associe la représentation interne du fichier à un
chemin absolu dans le système.
Erreurs / Exceptions
Cette méthode émet une exception UnexpectedValueException
quand l'itérateur retourne des valeurs fausses, telles qu'une clé
entière à la place d'une chaîne; une exception
BadMethodCallException quand un itérateur
basé sur SplFileInfo est passé sans paramètre
baseDirectory
, ou une exception
PharException s'il y a eu des erreurs lors de la
sauvegarde de l'archive phar.
Historique
Exemples
Exemple #1 Exemple avec phar::buildFromIterator() et SplFileInfo
Pour la plupart des archives phar, l'archive reflète l'arborescence
d'un répertoire, et le second style est le plus utile. Par exemple,
pour créer une archive phar contenant les fichiers de l'arborescence
du répertoire :
/chemin/vers/projet/
config/
dist.xml
debug.xml
lib/
file1.php
file2.php
src/
processthing.php
www/
index.php
cli/
index.php
Ce code peut être utilisé pour ajouter à l'archive "projet.phar" :
<?php
// crée avec l'alias "projet.phar"
$phar = new Phar('projet.phar', 0, 'projet.phar');
$phar->buildFromIterator(
new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('/chemin/vers/projet')),
'/chemin/vers/projet');
$phar->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));
?>
Le fichier projet.phar peut alors être utilisé immédiatement.
phar::buildFromIterator() ne règle pas les
paramètres tels que la compression ou les métadonnées; ceci
peut cependant être fait après avoir créé l'archive phar.
Il est intéressant de noter que phar::buildFromIterator()
peut aussi être utilisé pour copier les éléments d'une archive phar
existante, car l'objet Phar hérite de DirectoryIterator :
<?php
// crée avec l'alias "projet.phar"
$phar = new Phar('projet.phar', 0, 'projet.phar');
$phar->buildFromIterator(
new RecursiveIteratorIterator(
new Phar('/chemin/vers/unautrephar.phar')),
'phar:///chemin/vers/unautrephar.phar/chemin/vers/projet');
$phar->setStub($phar->createDefaultWebStub('cli/index.php', 'www/index.php'));
?>
Exemple #2 Exemple avec phar::buildFromIterator() et d'autres itérateurs
La seconde forme d'itérateur peut être utilisée avec n'importe
quel itérateur qui retourne une correspondance clé => valeur,
tels que ArrayIterator :
<?php
// crée avec l'alias "projet.phar"
$phar = new Phar('projet.phar', 0, 'projet.phar');
$phar->buildFromIterator(
new ArrayIterator(
array(
'interne/fichier.php' => dirname(__FILE__) . '/unfichier.php',
'unautre/fichier.jpg' => fopen('/chemin/vers/grosfichier.jpg', 'rb'),
)));
$phar->setStub($phar->createDefaultWebStub('cli/index.php', 'www/index.php'));
?>
Voir aussi
- phar::buildFromDirectory() - Construit une archive phar à partir des fichiers d'un répertoire