PharData::buildFromIterator
(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL phar >= 2.0.0)
PharData::buildFromIterator — Construye un archivo tar o zip a partir de un iterador
Parámetros
iterator
-
Cualquier iterador que haga corresponder de forma asociativa un archivo tar/zip o
que devuelva objetos SplFileInfo
baseDirectory
-
Para los iteradores que devuelven objetos SplFileInfo, la parte del camino completo
hacia el archivo a eliminar al añadir al archivo tar/zip
Valores devueltos
PharData::buildFromIterator() devuelve un array asociativo
que hace corresponder una ruta de archivo interna con una ruta completa hacia
el archivo en el sistema de archivos.
Errores/Excepciones
Este método devuelve una excepción UnexpectedValueException cuando
el iterador devuelve valores incorrectos, como una clave entera en lugar de una cadena,
una excepción BadMethodCallException cuando se pasa un iterador basado en
SplFileInfo sin el argumento baseDirectory
, o una
excepción PharException si se han encontrado errores al
guardar el archivo phar.
Ejemplos
Ejemplo #1 Ejemplo con PharData::buildFromIterator() y SplFileInfo
Para la mayoría de los archivos tar/zip, el archivo reflejará la estructura
de directorio actual y el segundo estilo es el más útil. Por
ejemplo, para crear un archivo tar/zip que contenga los archivos
con la estructura de directorio a continuación:
/chemin/vers/projet/
config/
dist.xml
debug.xml
lib/
fichier1.php
fichier2.php
src/
processthing.php
www/
index.php
cli/
index.php
Este código puede ser utilizado para añadir archivos a
el archivo "projet.tar" tar:
<?php
$phar = new PharData('projet.tar');
$phar->buildFromIterator(
new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('/chemin/vers/projet')),
'/chemin/vers/projet');
?>
El archivo projet.tar
puede entonces ser borrado
inmediatamente. PharData::buildFromIterator()
no establece parámetros como la compresión, las metadatos,
lo cual puede ser hecho después de haber creado el archivo tar/zip.
Se debe notar que Phar::buildFromIterator() también
puede ser utilizado para copiar el contenido de un archivo phar, tar o zip
existente, ya que el objeto PharData es derivado
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'));
?>
Ejemplo #2 Ejemplo con PharData::buildFromIterator() y otros iteradores
La segunda forma de iterador puede ser utilizada con cualquier iterador que devuelva
una asociación clave => valor, tal como 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'),
)));
?>