PHP 8.5.0 Alpha 2 available for testing

Phar::buildFromDirectory

(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL phar >= 2.0.0)

Phar::buildFromDirectoryConstruye un archivo phar a partir de los ficheros de un directorio

Descripción

public Phar::buildFromDirectory(string $directory, string $pattern = ""): array

Nota:

Este método requiere que la variable de configuración INI phar.readonly esté definida a 0 para funcionar con los objetos Phar. De lo contrario, se lanzará una excepción PharException.

Rellena un archivo phar a partir del contenido de un directorio. El segundo parámetro, opcional, es una expresión regular (pcre) utilizada para excluir ficheros. Todo fichero cuyo nombre cumpla la expresión regular será incluido, los demás serán excluidos. Para un control más fino, utilice Phar::buildFromIterator().

Parámetros

directory

La ruta absoluta o relativa hacia el directorio que contiene todos los ficheros a añadir al archivo.

pattern

Una expresión regular opcional utilizada para filtrar la lista de ficheros. Solo los ficheros cuyo nombre cumpla la expresión regular serán incluidos en el archivo.

Valores devueltos

Phar::buildFromDirectory() devuelve un array asociativo que hace corresponder la ruta interna del fichero con la ruta completa en el sistema de ficheros.

Errores/Excepciones

Este método lanza una excepción BadMethodCallException cuando no es capaz de instanciar el iterador de directorio interno, o una excepción PharException si ha habido errores durante el guardado del archivo.

Historial de cambios

Versión Descripción
8.1.0 Phar::buildFromDirectory() ya no devuelve false.

Ejemplos

Ejemplo #1 Un ejemplo con Phar::buildFromDirectory()

<?php
// crea con el alias "proyecto.phar"
$phar = new Phar('proyecto.phar', 0, 'proyecto.phar');
// añade ficheros en el proyecto
$phar->buildFromDirectory(dirname(__FILE__) . '/proyecto');
$phar->setStub($phar->createDefaultWebStub('cli/index.php', 'www/index.php'));

$phar2 = new Phar('proyecto2.phar', 0, 'proyecto2.phar');
// añade todos los ficheros en el proyecto, pero solo los ficheros .php
$phar->buildFromDirectory(dirname(__FILE__) . '/proyecto', '/\.php$/');
$phar->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));
?>

Ver también

add a note

User Contributed Notes 1 note

up
4
dalfarra at codref dot com
8 years ago
If you want to exclude a directory from the archive (but include all the other content), the regular expression must take into consideration the whole path of the file, not just the file or directory name relative to the source folder.

As an example, if we want to exclude "nbproject" directory from the archive (and any occurrence of it):

/tmp/myfolder
/nbproject
/something
/something-else
/nbproject
/file1.php
/file2.php

the regex should be:
<?php
$exclude
= '/^(?!(.*nbproject))(.*)$/i'; //ignoring the case
?>

A more complete example:
<?php
$archive_file
= 'myarchive.tar';
$folder_to_compress = '/tmp/myfolder';
$archive = new PharData($archive_file);
$exclude = '/^(?!(.*nbproject))(.*)$/i';
$archive->buildFromDirectory($folder_to_compress,$exclude);
$archive->compress(Phar::GZ);
unlink($archive_file); // as we already obtained a tar.gz
?>

the archive will contain:
/
/something
/something-else
/file1.php
/file2.php
To Top