PHP Conference Japan 2024

Phar::buildFromDirectory

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

Phar::buildFromDirectory从目录中的文件构建 phar 归档文件

描述

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

注意:

此方法需要 php.ini 设置 phar.readonly 设置为 0 才能对 Phar 对象起作用。否则,将抛出 PharException

从目录内容填充 phar 归档文件。可选的第二个参数是用于排除文件的正则表达式 (pcre)。任何与正则表达式匹配的文件名都将包含在内,其他所有文件名都将被排除。要进行更细粒度的控制,请使用 Phar::buildFromIterator()

参数

directory

包含要添加到归档文件的所有文件的目录的完整路径或相对路径。

pattern

一个可选的 pcre 正则表达式,用于过滤文件列表。只有与正则表达式匹配的文件路径才会包含在归档文件中。

返回值

Phar::buildFromDirectory() 返回一个关联数组,将文件的内部路径映射到文件系统上文件的完整路径。

错误/异常

当无法实例化内部目录迭代器时,此方法会抛出 BadMethodCallException,如果保存 phar 归档文件时出错,则会抛出 PharException

变更日志

版本 描述
8.1.0 Phar::buildFromDirectory() 不再返回 false

范例

示例 #1 Phar::buildFromDirectory() 示例

<?php
// 使用别名“project.phar”创建
$phar = new Phar('project.phar', 0, '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');
// 添加项目中的所有文件,仅包含 php 文件
$phar2->buildFromDirectory(dirname(__FILE__) . '/project', '/\.php$/');
$phar2->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));
?>

参见

添加注释

用户贡献的注释 1 条注释

dalfarra at codref dot com
7 年前
如果您想从归档文件中排除一个目录(但包含所有其他内容),则正则表达式必须考虑文件的整个路径,而不仅仅是相对于源文件夹的文件或目录名称。

例如,如果我们想从归档文件中排除“nbproject”目录(及其任何出现)

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

正则表达式应为
<?php
$exclude
= '/^(?!(.*nbproject))(.*)$/i'; //忽略大小写
?>

更完整的示例
<?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); // 因为我们已经获得了 tar.gz
?>

归档文件将包含
/
/something
/something-else
/file1.php
/file2.php
To Top