(PHP >= 5.3.0, PECL phar >= 2.0.0)
Phar::buildFromIterator — Construit une archive phar à partir d'un itérateur
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.
iter
Un itérateur qui associe un fichier avec une position, ou bien retourne des objets SplFileInfo.
base_directory
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.
Phar::buildFromIterator() retourne un tableau associatif qui associe la représentation interne du fichier à un chemin absolu dans le système.
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'));
?>
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
base_directory
, ou une exception
PharException s'il y a eu des erreurs lors de la
sauvegarde de l'archive phar.