2024年PHP开发者大会日本站

RarEntry::extract

(PECL rar >= 0.1)

RarEntry::extract从存档中提取条目

描述

public RarEntry::extract(
    string $dir,
    string $filepath = "",
    string $password = NULL,
    bool $extended_data = false
): bool

RarEntry::extract() 提取条目的数据。它将在指定的 $dir 中创建一个与条目名称相同的新文件,除非指定了第二个参数。更多信息请参见下文。

参数

dir

要提取文件的目录路径。只有当 $filepath 未指定时才考虑此参数。如果两个参数都为空,则尝试将文件提取到当前目录。

filepath

包含提取文件的目录和文件名(相对路径或绝对路径)。此参数会覆盖 $dir 参数和原始文件名。

password

用于加密此条目的密码。如果条目未加密,则不会使用此值,可以省略。如果此参数被省略且条目被加密,则将使用传递给 rar_open() 的密码(如果已传递)。如果提供了错误的密码(无论是显式提供的还是通过 rar_open() 隐式提供的),CRC 校验将失败,此方法将失败并返回 false。如果没有提供密码且需要密码,则此方法将失败并返回 false。可以使用 RarEntry::isEncrypted() 检查条目是否已加密。

extended_data

如果为 true,则会在提取的文件中设置扩展信息(例如 NTFS ACL 和 Unix 所有者信息),前提是存档中存在这些信息。

警告

在 2.0.0 版本之前,此函数无法正确处理相对路径。可以使用 realpath() 作为解决方法。

返回值

成功返回 true,失败返回 false

变更日志

版本 描述
PECL rar 3.0.0 添加了 $extended_data 参数。
PECL rar 3.0.0 不再存在对具有重复条目名称的 RAR 存档的支持缺陷。

示例

示例 #1 RarEntry::extract() 示例

<?php

$rar_file
= rar_open('example.rar') or die("打开 Rar 存档失败");

$entry = rar_entry_get($rar_file, 'Dir/file.txt') or die("找不到此条目");

$entry->extract('/dir/to'); // 创建 /dir/to/Dir/file.txt
$entry->extract(false, '/dir/to/new_name.txt'); // 创建 /dir/to/new_name.txt

?>

示例 #2 如何提取存档中的所有文件

<?php

/* Erik Jenssen aka erix 的示例 */

$filename = "foobar.rar";
$filepath = "/home/foo/bar/";

$rar_file = rar_open($filepath.$filename);
$list = rar_list($rar_file);
foreach(
$list as $file) {
$entry = rar_entry_get($rar_file, $file);
$entry->extract("."); // 提取到当前目录
}
rar_close($rar_file);

?>

参见

添加注释

用户贡献的注释 2 条注释

nelson_km_94 at hotmail dot com
9 年前
示例 #2 有一个错误。

这个工作正常
<?php

/* Erik Jenssen aka erix 的示例 */

$filename = "foobar.rar";
$filepath = "/home/foo/bar/";

$rar_file = rar_open($filepath.$filename);
$list = rar_list($rar_file);
foreach(
$list as $file) {
$entry = rar_entry_get($rar_file, $file->getName());
$entry->extract("."); // 提取到当前目录
}
rar_close($rar_file);

?>
匿名用户
11 年前
如果要提取的条目是目录(根据 RarEntry::isDirectory()),此方法似乎不会像使用命令行 RAR 或 WinRAR 一样提取该目录下的条目。
To Top