PHP 8.4.1 Released!

Phar::buildFromDirectory

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

Phar::buildFromDirectoryConstruir un archivo phar desde los ficheros de un directorio

Descripción

public Phar::buildFromDirectory(string $base_dir, string $regex = ?): array

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Rellena un archivo phar con el contenido de un directorio. El segundo parámtro opcional es una expresión regular (pcre) que se utiliza para excluir ficheros. Cualquier nombre de fichero que coincida con la expresión regular será incluido, todos los demás serán excluidos. Para un control más exhaustivo, use Phar::buildFromIterator().

Parámetros

base_dir

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

regex

Una expresión regular de pcre opcional que se usa para filtrar la lista de ficheros. Solamente las rutas de fichero que coincidan con la expresión regular serán incluidas en el archivo.

Valores devueltos

Phar::buildFromDirectory() devuelve un array asociativo que que mapea la ruta interna del fichero a la ruta completa del mismo en el sistema de ficheros.

Errores/Excepciones

Este método lanza una excepción de tipo BadMethodCallException cuando no puede instanciar los iteradores intermos del directorio, o una excepción de tipo PharException si hubo errores al guardar el archivo phar.

Ejemplos

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

<?php
// crear con el alias "proyecto.phar"
$phar = new Phar('proyecto.phar', 0, 'proyecto.phar');
// añadir todos los ficheros del proyecto
$phar->buildFromDirectory(dirname(__FILE__) . '/proyecto');
$phar->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));

$phar2 = new Phar('proyecto2.phar', 0, 'proyecto2.phar');
// añadir todos los ficheros del, incluir solamente los ficheros php
$phar2->buildFromDirectory(dirname(__FILE__) . '/proyecto', '/\.php$/');
$phar2->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));
?>

Ver también

add a note

User Contributed Notes 1 note

up
6
dalfarra at codref dot com
7 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