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("Failed to open Rar archive");

$entry = rar_entry_get($rar_file, 'Dir/file.txt') or die("Failed to find such entry");

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

?>

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

<?php

/* example by 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("."); // extract to the current dir
}
rar_close($rar_file);

?>

参见

添加注释

用户贡献的注释 2 个注释

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

这个可以正常工作
<?php

/* example by 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("."); // extract to the current dir
}
rar_close($rar_file);

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