(PHP 5 >= 5.3.0, PHP 7, PECL phar >= 2.0.0)
PharData::buildFromIterator — Construir un archivo tar o zip desde un iterador
Rellena un archivo tar o zip desde un iterador. Están soportados dos estilos de iteradores, los iteradores que mapean el nombre de fichero dentro del tar/zip al nombre del fichero en disco, y los iteradores como DirectoryIterator que devuelven objetos de la clase SplFileInfo. Se requiere el segundo parámetro para los iteradores que devuelven objetos de la clase SplFileInfo.
Ejemplo #1 Un ejemplo de PharData::buildFromIterator() con SplFileInfo
Para la mayoría de los archivos tar/zip, el archivo reflejará la distribución real de directorios, y el segundo estilo es el más útil. Por ejemplo, para crear un archivo tar/zip que contenga los ficheros n esta distribución de muestra de directorios:
/ruta/al/proyecto/ config/ dist.xml debug.xml lib/ fichero1.php fichero2.php src/ procesa_algo.php www/ index.php cli/ index.php
Este código podría usarse para añadir estos ficheros al archivo tar "proyecto.tar":
<?php
$phar = new PharData('proyecto.tar');
$phar->buildFromIterator(
new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('/ruta/al/proyecto')),
'/ruta/al/proyecto');
?>
El fichero project.tar se puede usar inmediatamente. PharData::buildFromIterator() no establece valores como la compresión y metainformación, que se puede hacer después de crear el archivo tar/zip.
Como observación interesante, PharData::buildFromIterator() también se puede usar para copiar el contenido de un archivo phar, tar o zip existentese, ya que los objetos de la clase PharData descienden de la clase DirectoryIterator:
<?php
$phar = new PharData('proyecto.tar');
$phar->buildFromIterator(
new RecursiveIteratorIterator(
new Phar('/ruta/a/otro_phar.phar')),
'phar:///ruta/a/otro_phar.phar/ruta/al/proyecto');
$phar->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));
?>
Ejemplo #2 Un ejemplo de PharData::buildFromIterator() con otros iteradores
La segunda forma de iterador se puede usar con cualquier iterador que devuelva un mapeo clave => valor, tal como un objeto de la clase ArrayIterator:
<?php
$phar = new PharData('proyecto.tar');
$phar->buildFromIterator(
new ArrayIterator(
array(
'fichero/interno.php' => dirname(__FILE__) . '/algun_fichero.php',
'otro/fichero.jpg' => fopen('/rota/a/archivo_grande.jpg', 'rb'),
)));
?>
iter
Cualquier iterador que mapee de forma asociativa el fichero tar/zip a la ubiciación o que devuelva objetos de la clase SplFileInfo
base_directory
Para los iteradores que devuelven objetos de la clase SplFileInfo, es la porción de cada ruta completa de fichero a eliminar cuando de añada al archivo tar/zip
PharData::buildFromIterator() devuelve un array asociativo que que mapea la ruta interna del fichero a la ruta completa del mismo en el sistema de ficheros.
Este método lanza una excepción de tipo UnexpectedValueException cuando
el iterador devuelve valores incorrectos, tales como una clave de tipo integer en lugar de una
cadena, una excepción de tipo BadMethodCallException cuando se
pasa un iterador basado en SplFileInfo sin un parámetro base_directory
,
o una excepción de tipo PharException si hubo errores
al guardar el archivo phar.