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-based 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 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'),
)));
?>