W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
rar:// — RAR
封裝協(xié)議采用 url 編碼,(相對/絕對)路徑的 RAR 歸檔、一個可選的星號(*)、一個可選的井號(# )和一個可選的存儲在歸檔中的 url 編碼條目名稱。指定條目名稱必須帶有井號,條目名稱開頭的斜線是可選的。
該封裝協(xié)議可以打開文件和目錄。當打開目錄時,星號會強制返回未編碼的目錄條目名稱。如果不指定星號,將返回 URL 編碼的目錄條目名稱 —— 這樣做的原因是存在類似 URL 編碼的文件名時,允許封裝協(xié)議能夠與內置方法(比如 RecursiveDirectoryIterator)一起正確使用。
如果不包含井號和條目名稱部分,將會顯示歸檔的根目錄。與常規(guī)目錄不同的是生成的流不會包含諸如修改時間之類的信息, 因為根目錄不會存儲在歸檔的條目中。當訪問根目錄時, RecursiveDirectoryIterator 與封裝協(xié)議一起使用時需要在 ULR 中包含井號,以便正確構建子級 URL。
注意: 該封裝協(xié)議不會默認啟用為了使用 rar:// 封裝協(xié)議,必須從 ? PECL 中安裝可用的 ? rar 擴展。
rar:// 自 PECL rar 3.0.0 起可用
屬性 | 支持 |
---|---|
受限于 allow_url_fopen | No |
受限于 allow_url_include | No |
允許讀取 | Yes |
允許寫入 | No |
允許附加 | No |
允許同時讀寫 | No |
支持 stat() | Yes |
支持 unlink() | No |
支持 rename() | No |
支持 mkdir() | No |
支持 rmdir() | No |
名稱 | 用法 | 默認 |
---|---|---|
open_password
|
用于加密歸檔報頭的密碼(如果有)。如果存在后者,WinRAR 將使用相同的密碼作為報頭密碼加密所有文件, 因此對于帶有加密報頭的歸檔, file_password 將會被忽略。 |
|
file_password
|
用于加密文件的密碼(如果有)。如果報頭也加密,這個選項將會被忽略以支持 open_password 。 有兩個選項的原因是為了支持可能會出現(xiàn)的報頭和文件密碼不同的歸檔。請注意,如果歸檔沒有加密它的報頭, open_password 將會忽略且必須使用此選項代替。 |
|
volume_callback
|
確定缺失卷的路徑回調。請參閱 RarArchive::open() 獲取更多信息。 |
示例 #1 遍歷 RAR 歸檔
<?php
class MyRecDirIt extends RecursiveDirectoryIterator {
function current() {
return rawurldecode($this->getSubPathName()) .
(is_dir(parent::current())?" [DIR]":"");
}
}
$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 中創(chuàng)建日期和最后訪問日期是可選的,
* 因此大多數(shù)文件都沒有 */
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
)
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: