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');
// 添加 project 中的所有文件
$phar->buildFromDirectory(dirname(__FILE__) . '/project');
$phar->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));

$phar2 = new Phar('project2.phar', 0, 'project2.phar');
// 添加 project 中的所有文件,只包含 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