RarArchive::open
rar_open
Rar アーカイブをオープンする
説明
オブジェクト指向型 (メソッド)
public static RarArchivefalse RarArchive::open(string $filename
, string $password
= NULL, callable $volume_callback
= NULL)
RarArchivefalse rar_open(string $filename
, string $password
= NULL, callable $volume_callback
= NULL)
注意:
マルチボリュームのアーカイブをオープンするときには、
最初のボリュームのパスをパラメータに指定します。
そうしないとすべてのファイルを表示することはできません。これは仕様です。
パラメータ
-
filename
-
Rar アーカイブへのパス。
-
password
-
ヘッダの復号に必要な場合、プレーンテキストのパスワード。
暗号化されたファイルが見つかったときにも、これがデフォルトのパスワードとして使われます。
ヘッダのパスワードとファイルのパスワードは異なる場合があることに注意しましょう。
-
volume_callback
-
ひとつのパラメータ (見つからなかったボリュームのパス)
を受け取ってそのボリュームの正しいパスを返す関数。
この関数は、ボリュームが存在しなかったり未知であったりする場合は
null
を返さなければなりません。
この関数はループを引き起こさないようにしなければなりません。
前のコールで返されたパスがそのボリュームに対応しない場合に
関数が繰り返しコールされることがあるからです。
このパラメータを指定すると、ボリュームが見つからなかったときの
notice は一切無視するようになります。したがって、
単に null
を返すだけの実装を渡しておけば、
notice を無視させるためだけに使うこともできます。
警告
バージョン 2.0.0 より前では、この関数は相対パスを正しく処理できません。
回避策として realpath を使いましょう。
戻り値
RarArchive インスタンスを返します。失敗した場合に false
を返します。
例
例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");
?>