(PHP 5 >= 5.3.0, PHP 7, PECL phar >= 2.0.0)
PharData::buildFromIterator — Construit une archive tar ou zip à partir d'un itérateur
Remplit une archive tar ou zip à partir d'un itérateur. Deux styles d'itérateurs sont supportés, les itérateurs qui font correspondre le chemin de fichier au sein de l'archive avec le chemin 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 requis.
Exemple #1 Exemple avec PharData::buildFromIterator() et SplFileInfo
Pour la plupart des archive tar/zip, l'archive reflétera la structure de répertoire actuelle, et le second style est le plus utile. Par exemple, pour créer une archive tar/zip contenant les fichiers contenant la structure de répertoire ci-dessous :
/chemin/vers/projet/ config/ dist.xml debug.xml lib/ fichier1.php fichier2.php src/ processthing.php www/ index.php cli/ index.php
Ce code peut être utilisé pour ajouter des fichiers à l'archive "projet.tar" tar :
<?php
$phar = new PharData('projet.tar');
$phar->buildFromIterator(
new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('/chemin/vers/projet')),
'/chemin/vers/projet');
?>
Le fichier projet.tar peut alors être effacé immédiatement. PharData::buildFromIterator() ne règle pas les paramètres tels que la compression, les métadonnées, ce qui peut être fait après avoir créé l'archive tar/zip.
A noter que Phar::buildFromIterator() peut aussi être utilisé pour copier le contenu d'une archive phar, tar ou zip existante, car l'objet PharData est dérivé de DirectoryIterator :
<?php
$phar = new PharData('projet.tar');
$phar->buildFromIterator(
new RecursiveIteratorIterator(
new Phar('/chemin/vers/unautrephar.phar')),
'phar:///chemin/vers/unautrephar.phar/chemin/vers/projet');
$phar->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));
?>
Exemple #2 Exemple avec PharData::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 association clé => valeur, tel que ArrayIterator :
<?php
$phar = new PharData('projet.tar');
$phar->buildFromIterator(
new ArrayIterator(
array(
'interne/fichier.php' => dirname(__FILE__) . '/unfichier.php',
'unautre/fichier.jpg' => fopen('/chemin/vers/grosfichier.jpg', 'rb'),
)));
?>
iter
N'importe quel itérateur qui fait correspondre de façon associative un fichier tar/zip ou qui retourne des objets SplFileInfo
base_directory
Pour les itérateurs qui retournent des objets SplFileInfo, la partie du chemin complet vers le fichier à enlever lors de l'ajout à l'archive tar/zip
PharData::buildFromIterator() retourne un tableau associatif faisant correspondre un chemin de fichier interne avec un chemin complet vers le fichier sur le système de fichiers.
Cette méthode retourne une exception UnexpectedValueException quand
l'itérateur retourne des valeurs incorrectes, comme une clé entière plutôt qu'une chaîne,
une exception BadMethodCallException quand un itérateur basé sur
SplFileInfo-based est passé sans paramètre base_directory
, ou une
exception PharException si des erreurs ont été rencontrées lors de
la sauvegarde de l'archive phar.