PharData::extractTo

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

PharData::extractTo将 tar/zip 存档的内容提取到目录

描述

public PharData::extractTo(string $directory, array|string|null $files = null, bool $overwrite = false): bool

将 tar/zip 存档中的所有文件提取到磁盘。提取的文件和目录会保留存档中存储的权限。可选参数允许对提取哪些文件进行可选控制,以及是否可以覆盖磁盘上的现有文件。第二个参数 files 可以是要提取的文件或目录的名称,也可以是包含要提取的文件和目录名称的数组。默认情况下,此方法不会覆盖现有文件,第三个参数可以设置为 true 以启用文件覆盖。此方法类似于 ZipArchive::extractTo().

参数

directory

将给定的 files 提取到的路径

files

要提取的文件或目录的名称,或包含要提取的文件/目录的数组

overwrite

设置为 true 以启用覆盖现有文件

返回值

如果成功,返回 true,但最好检查抛出的异常,如果未抛出异常,则认为成功。

错误/异常

如果在将更改刷新到磁盘时发生错误,则抛出 PharException

示例

示例 #1 一个 PharData::extractTo() 示例

<?php
try {
$phar = new PharData('myphar.tar');
$phar->extractTo('/full/path'); // 提取所有文件
$phar->extractTo('/another/path', 'file.txt'); // 仅提取 file.txt
$phar->extractTo('/this/path',
array(
'file1.txt', 'file2.txt')); // 仅提取 2 个文件
$phar->extractTo('/third/path', null, true); // 提取所有文件,并覆盖
} catch (Exception $e) {
// 处理错误
}
?>

注释

注意:

Windows NTFS 文件系统不支持文件名中的某些字符,即 <|>*?":。具有尾随点的文件名也不受支持。与某些提取工具相反,此方法不会将这些字符替换为下划线,而是无法提取此类文件。

另请参阅

添加注释

用户贡献注释 3 个注释

1
njh at aelius dot com
11 年前
请注意,PHAR 仅支持提取 tar 存档的“ustar”变体。

某些系统(例如旧版本的 Mac OS X)默认情况下会生成“pax”格式。

请参阅此处以获取更多信息
https://php.net/manual/pl/phar.fileformat.tar.php
1
匿名
7 年前
我无法从 tar 存档中提取第一个目录
目标目录保持为空,
没有抛出错误

<?php
$tar
= new \PharData('archive.tar');
if (
$tar->current()->isDir()) {
echo
'is_dir';
$dir = $tar->current()->getPathname();
$dir = basename($dir);
$tar->extractTo('destination', $dir);
}
?>

文档暗示第二个参数可以是存档中要提取的文件或目录的名称,这真的可能吗?
1
Daniel
3 个月前
这是使用 Phar 的 decompress() 和 extractTo() 方法解压缩和解压缩 TAR.GZ 文件的示例

<?php
echo '<h1>TAR.GZ 解压缩</h1>';

$file_name = 'your_file.tar.gz';
$tar_file_name = str_replace('.gz', '', $file_name);
$dir_file_name = str_replace('.tar.gz', '', $file_name);

// 从 gz 解压缩并创建 your_file.tar
$p = new PharData($file_name);
$p->decompress();

// 从 tar 解压缩到文件夹 'your_file'
$phar = new PharData($tar_file_name);
$phar->extractTo($dir_file_name);

echo
'<h1>完成</h1>';
?>
To Top