PHP 7.2.0 Beta 3 Released

Phar::buildFromDirectory

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::buildFromDirectoryСоздает phar-архив из файлов, расположенных внутри директории

Описание

public array Phar::buildFromDirectory ( string $base_dir [, string $regex ] )

Замечание:

Для корректной работы с объектами Phar этому методу необходима установка значения php.ini phar.readonly в 0. В противном случае, будет выброшено исключение PharException.

Заполняет phar-архив содержимым директории. Необязательный второй параметр является регулярным выражением (PCRE) и используется для исключения файлов. Любой файл, чье имя соответствует регулярному выражению, будет включен, все остальные будут исключены. Для более детализированного контроля используйте Phar::buildFromIterator().

Список параметров

base_dir

Полный или абсолютный путь к директории, все файлы которой должны быть добавлены в архив.

regex

Необязательное регулярное выражение (PCRE), которое используется для фильтрации списка файлов. В архив будут включены только те файлы, пути к которым соответствуют регулярному выражению.

Возвращаемые значения

Phar::buildFromDirectory() возвращает ассоциативный массив, в котором отражено соответствие пути к файлу внутри архива к пути к файлу в файловой системе.

Ошибки

Этот метод бросает исключение BadMethodCallException в том случае, если не удалось создать экземпляр итератора внутренних директорий. Исключение PharException будет брошено в случае ошибок сохранения phar-архива.

Примеры

Пример #1 Пример использования Phar::buildFromDirectory()

<?php
// создать с псевдонимом "project.phar"
$phar = new Phar('project.phar'0'project.phar');
// добавить все файлы директории project в файл project.phar
$phar->buildFromDirectory(dirname(__FILE__) . '/project');
$phar->setStub($phar->createDefaultStub('cli/index.php''www/index.php'));

$phar2 = new Phar('project2.phar'0'project2.phar');
// добавить все файлы директории project в файл project2.phar, включая только php-файлы
$phar2->buildFromDirectory(dirname(__FILE__) . '/project''/\.php$/');
$phar2->setStub($phar->createDefaultStub('cli/index.php''www/index.php'));
?>

Смотрите также

add a note add a note

User Contributed Notes 1 note

up
1
dalfarra at codref dot com
3 months 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