PharData::buildFromIterator
(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL phar >= 2.0.0)
PharData::buildFromIterator — Construit une archive tar ou zip à partir d'un itérateur
Liste de paramètres
iterator
-
N'importe quel itérateur qui fait correspondre de façon associative un fichier tar/zip ou
qui retourne des objets SplFileInfo
baseDirectory
-
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
Valeurs de retour
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.
Erreurs / Exceptions
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 est passé sans paramètre baseDirectory, ou une
exception PharException si des erreurs ont été rencontrées lors de
la sauvegarde de l'archive phar.
Exemples
Exemple #1 Exemple avec PharData::buildFromIterator() et SplFileInfo
Pour la plupart de l'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 utilisé
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.
À 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'),
)));
?>