2024 日本 PHP 研討會

RarEntry::extract

(PECL rar >= 0.1)

RarEntry::extract從壓縮檔擷取項目

說明

public RarEntry::extract(
    字串 $dir,
    字串 $filepath = "",
    字串 $password = NULL,
    布林值 $extended_data = false
): 布林值

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

/* 範例 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("."); // 解壓縮到目前目錄
}
rar_close($rar_file);

?>
匿名
11 年前
如果要解壓縮的項目是目錄 (根據 RarEntry::isDirectory() 的判斷),這個方法似乎不會解壓縮該目錄下的項目,這與使用命令列 RAR 或 WinRAR 的預期行為不同。
To Top