(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 opción de php.ini
phar.readonly
esté establecida a0
para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo 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.
iterator
Un iterador que asocia un archivo con una posición, o bien devuelve objetos SplFileInfo.
baseDirectory
Para 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'));
?>