RarArchive::open

rar_open

(PECL rar >= 2.0.0)

RarArchive::open -- rar_openRar アーカイブをオープンする

説明

オブジェクト指向型 (メソッド)

publicstaticRarArchive::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() を使いましょう。

返り値

RarArchive インスタンスを返します。失敗した場合に false を返します。

変更履歴

バージョン説明
PECL rar 3.0.0volume_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

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(nulldirname(__FILE__) . "/temp_file2.txt");
?>