RarArchive::open
rar_open
(PECL rar >= 2.0.0)
RarArchive::open -- rar_open — Rar アーカイブをオープンする
説明
オブジェクト指向型 (メソッド)
public static RarArchive::open
( string $filename
[, string $password
= NULL
[, callable $volume_callback
= NULL
]] ) : RarArchive|false
手続き型:
rar_open
( string $filename
[, string $password
= NULL
[, callable $volume_callback
= NULL
]] ) : RarArchive|false
指定した RAR アーカイブをオープンし、RarArchive インスタンスを返します。
注意:
マルチボリュームのアーカイブをオープンするときには、 最初のボリュームのパスをパラメータに指定します。 そうしないとすべてのファイルを表示することはできません。これは仕様です。
パラメータ
filename
- Rar アーカイブへのパス。
password
- ヘッダの復号に必要な場合、プレーンテキストのパスワード。 暗号化されたファイルが見つかったときにも、これがデフォルトのパスワードとして使われます。 ヘッダのパスワードとファイルのパスワードは異なる場合があることに注意しましょう。
volume_callback
- ひとつのパラメータ (見つからなかったボリュームのパス) を受け取ってそのボリュームの正しいパスを返す関数。 この関数は、ボリュームが存在しなかったり未知であったりする場合は
null
を返さなければなりません。 この関数はループを引き起こさないようにしなければなりません。 前のコールで返されたパスがそのボリュームに対応しない場合に 関数が繰り返しコールされることがあるからです。 このパラメータを指定すると、ボリュームが見つからなかったときの notice は一切無視するようになります。したがって、 単にnull
を返すだけの実装を渡しておけば、 notice を無視させるためだけに使うこともできます。
警告 バージョン 2.0.0 より前では、この関数は相対パスを正しく処理できません。 回避策として realpath() を使いましょう。
変更履歴
バージョン | 説明 |
---|---|
PECL rar 3.0.0 | volume_callback が追加されました。
|
例
例1 オブジェクト指向型
<?php$rar_arch = RarArchive::open('encrypted_headers.rar', 'samplepassword');if ($rar_arch === FALSE) die("Failed opening file"); $entries = $rar_arch->getEntries();if ($entries === FALSE) die("Failed fetching entries");echo "Found " . count($entries) . " files.\n";if (empty($entries)) die("No valid entries found."); $stream = reset($entries)->getStream();if ($stream === FALSE) die("Failed opening first file");$rar_arch->close();echo "Content of first one follows:\n";echo stream_get_contents($stream);fclose($stream);?>
上の例の出力は、 たとえば以下のようになります。
Found 2 files. Content of first one follows: Encrypted file 1 contents.
例2 手続き型
<?php$rar_arch = rar_open('encrypted_headers.rar', 'samplepassword');if ($rar_arch === FALSE) die("Failed opening file"); $entries = rar_list($rar_arch);if ($entries === FALSE) die("Failed fetching entries");echo "Found " . count($entries) . " files.\n";if (empty($entries)) die("No valid entries found."); $stream = reset($entries)->getStream();if ($stream === FALSE) die("Failed opening first file");rar_close($rar_arch);echo "Content of first one follows:\n";echo stream_get_contents($stream);fclose($stream);?>
例3 ボリュームコールバック
<?php/* この例では multi_broken.part1.rar というボリュームがあり、 * 次のボリュームが multi.part2.rar であるものとします */function resolve($vol) { if (preg_match('/_broken/', $vol)) return str_replace('_broken', , $vol); else return null;}$rar_file1 = rar_open(dirname(__FILE__).'/multi_broken.part1.rar', null, 'resolve');$entry = $rar_file1->getEntry('file2.txt');$entry->extract(null, dirname(__FILE__) . "/temp_file2.txt");?>