rar:// — RAR
此包裝器接受 RAR 封存檔的 URL 編碼路徑(相對或絕對),一個可選的星號 (*),一個可選的井字號 (#) 以及一個可選的 URL 編碼項目名稱,如同儲存在封存檔中一樣。指定項目名稱需要井字號;項目名稱中的前斜線是可選的。
此包裝器可以開啟檔案和目錄。開啟目錄時,星號會強制目錄項目名稱以未編碼的方式返回。如果未指定,它們將以 URL 編碼的方式返回——這樣做的原因是允許包裝器在存在看起來像 URL 編碼資料的檔案名稱時,能與內建功能(例如 RecursiveDirectoryIterator)正確地一起使用。
如果省略井字號 (#) 和項目名稱部分,則會顯示壓縮檔的根目錄。這與一般目錄不同,因為產生的串流不會包含修改時間等資訊,因為根目錄並未儲存在壓縮檔的個別項目中。搭配 RecursiveDirectoryIterator 使用此包裝器時,存取根目錄的 URL 中需要包含井字號,以便正確建構子項目的 URL。
rar:// 自 PECL rar 3.0.0 起可用
範例 #1 遍歷 RAR 壓縮檔
<?php
class MyRecDirIt extends RecursiveDirectoryIterator {
function current() {
return rawurldecode($this->getSubPathName()) .
(is_dir(parent::current()) ? " [資料夾]" : "");
}
}
$f = "rar://" . rawurlencode(dirname(__FILE__)) .
DIRECTORY_SEPARATOR . 'dirs_and_extra_headers.rar#';
$it = new RecursiveTreeIterator(new MyRecDirIt($f));
foreach ($it as $s) {
echo $s, "\n";
}
?>以上範例會輸出類似以下的內容
|-allow_everyone_ni [DIR]
|-file1.txt
|-file2_אּ.txt
|-with_streams.txt
\-אּ [DIR]
|-אּ\%2Fempty%2E [DIR]
| \-אּ\%2Fempty%2E\file7.txt
|-אּ\empty [DIR]
|-אּ\file3.txt
|-אּ\file4_אּ.txt
\-אּ\אּ_2 [DIR]
|-אּ\אּ_2\file5.txt
\-אּ\אּ_2\file6_אּ.txt
範例 #2 開啟一個加密的檔案 (標頭加密)
<?php
$stream = fopen("rar://" .
rawurlencode(dirname(__FILE__)) . DIRECTORY_SEPARATOR .
'encrypted_headers.rar' . '#encfile1.txt', "r", false,
stream_context_create(
array(
'rar' =>
array(
'open_password' => 'samplepassword'
)
)
)
);
var_dump(stream_get_contents($stream));
/* 在 WinRAR 中,建立日期和上次存取日期是選用的,因此大多數
* 檔案都沒有它們 */
var_dump(fstat($stream));
?>以上範例會輸出類似以下的內容
string(26) "Encrypted file 1 contents."
Array
(
[0] => 0
[1] => 0
[2] => 33206
[3] => 1
[4] => 0
[5] => 0
[6] => 0
[7] => 26
[8] => 0
[9] => 1259550052
[10] => 0
[11] => -1
[12] => -1
[dev] => 0
[ino] => 0
[mode] => 33206
[nlink] => 1
[uid] => 0
[gid] => 0
[rdev] => 0
[size] => 26
[atime] => 0
[mtime] => 1259550052
[ctime] => 0
[blksize] => -1
[blocks] => -1
)