(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL phar >= 2.0.0)
Phar::buildFromIterator — Construye un archivo phar a partir de un iterador
Nota:
Este método requiere que la variable de configuración INI
phar.readonlyesté definida a0para funcionar con los objetos Phar. De lo contrario, se lanzará una excepción PharException.
Rellena un archivo phar a partir de un iterador. Dos estilos de iterador son soportados: los iteradores que hacen corresponder el nombre de archivo dentro del phar con el nombre de un archivo en el disco, y los iteradores como DirectoryIterator que devuelven objetos SplFileInfo. Para los iteradores que devuelven objetos SplFileInfo, el segundo parámetro es obligatorio.
iteratorUn iterador que asocia un archivo con una posición, o bien devuelve objetos SplFileInfo.
baseDirectoryPara los iteradores que devuelven objetos SplFileInfo, la porción de ruta absoluta de cada archivo que debe ser eliminada al añadir al archivo phar.
Phar::buildFromIterator() devuelve un array asociativo que asocia la representación interna del archivo a un camino absoluto en el sistema.
Este método emite una excepción UnexpectedValueException
cuando el iterador devuelve valores falsos, tales como una clave
entera en lugar de una cadena; una excepción
BadMethodCallException cuando un iterador
basado en SplFileInfo es pasado sin parámetro
baseDirectory, o una excepción
PharException si ha habido errores al
guardar el archivo phar.
| Versión | Descripción |
|---|---|
| 8.1.0 |
Phar::buildFromIterator() ya no devuelve false ahora.
|
| 8.0.0 |
baseDirectory ahora es nullable.
|
Ejemplo #1 Ejemplo con Phar::buildFromIterator() y SplFileInfo
Para la mayoría de archivos phar, el archivo refleja la estructura de un directorio, y el segundo estilo es el más útil. Por ejemplo, para crear un archivo phar que contenga los archivos de la estructura del directorio:
/ruta/hacia/proyecto/
config/
dist.xml
debug.xml
lib/
file1.php
file2.php
src/
processthing.php
www/
index.php
cli/
index.php
Este código puede ser utilizado para añadir al archivo "proyecto.phar":
<?php
// crea con el alias "proyecto.phar"
$phar = new Phar('proyecto.phar', 0, 'proyecto.phar');
$phar->buildFromIterator(
new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('/ruta/hacia/proyecto')),
'/ruta/hacia/proyecto');
$phar->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));
?>El archivo proyecto.phar puede ser utilizado inmediatamente. Phar::buildFromIterator() no establece parámetros tales como la compresión o los metadatos; esto puede ser hecho después de crear el archivo phar.
Es interesante notar que Phar::buildFromIterator() también puede ser utilizado para copiar los elementos de un archivo phar existente, ya que el objeto Phar hereda de DirectoryIterator:
<?php
// crea con el alias "proyecto.phar"
$phar = new Phar('proyecto.phar', 0, 'proyecto.phar');
$phar->buildFromIterator(
new RecursiveIteratorIterator(
new Phar('/ruta/hacia/otrophar.phar')),
'phar:///ruta/hacia/otrophar.phar/ruta/hacia/proyecto');
$phar->setStub($phar->createDefaultWebStub('cli/index.php', 'www/index.php'));
?>Ejemplo #2 Ejemplo con Phar::buildFromIterator() y otros iteradores
La segunda forma de iterador puede ser utilizada con cualquier iterador que devuelva una correspondencia clave => valor, tales como ArrayIterator:
<?php
// crea con el alias "proyecto.phar"
$phar = new Phar('proyecto.phar', 0, 'proyecto.phar');
$phar->buildFromIterator(
new ArrayIterator(
array(
'interna/fichero.php' => dirname(__FILE__) . '/unfichero.php',
'otro/fichero.jpg' => fopen('/ruta/hacia/grande.jpg', 'rb'),
)));
$phar->setStub($phar->createDefaultWebStub('cli/index.php', 'www/index.php'));
?>