説明
このラッパーが受け取るのは、RAR アーカイブへの URL エンコードされたパス
(絶対パスあるいは相対パス)、そしてオプションでアスタリスク
(*
)、番号記号 (#
)、
アーカイブ内のエントリ名です。エントリ名を指定する場合は番号記号が必須となります。
エントリ名の先頭のスラッシュは必須ではありません。
このラッパーは、ファイルだけでなくディレクトリも開くことができます。
ディレクトリを開く際にアスタリスクを使うと、
返されるディレクトリエントリ名はエンコードされていない状態となります。
アスタリスクを指定しなかった場合は URL エンコードしたものを返します。
これは、RecursiveDirectoryIterator などの組み込み機能で
このラッパーをファイル名の代わりに正しく使えるようにするためです。
番号記号とエントリ名の部分が含まれていない場合は、アーカイブのルートを表示します。
これは通常のディレクトリとは異なり、
返されるストリームには更新時刻などの情報が含まれません。
ルートディレクトリは、アーカイブの個別のエントリとして存在するわけではないからです。
このラッパーを RecursiveDirectoryIterator で使う場合、
ルートにアクセスするには URL に番号記号を含めなければなりません。
そうすれば、子要素の URL も正しく作られます。
注意:
このラッパーはデフォルトでは有効になっていません
rar:// ラッパーを使用するには、
» PECL から
» rar 拡張モジュールを
インストールする必要があります。
rar://
は、PECL rar 3.0.0 以降で使用可能です。
利用法
- rar://<url encoded archive name>[*][#[<url encoded entry name>]]
オプション
ラッパーの概要
属性 |
サポートの有無 |
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 の値を使います。
ふたつのオプションがある理由は、
ヘッダとファイルを別々のパスワードで暗号化する可能性に対応するためです。
アーカイブのヘッダが暗号化されていない場合は
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 では選択式になっています。
* そのため、多くのファイルには含まれていません */
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
)