Открывает архив RAR

# RarArchive::open

# rar_open

(PECL rar >= 2.0.0)

RarArchive::open -- rar_open — Открывает архив RAR

### Описание

Объектно-ориентированный стиль (метод):

public static function RarArchive::open(string `$filename`, string `$password` = NULL, callable `$volume_callback` = NULL): RarArchive|false

Процедурный стиль:

function rar_open(string `$filename`, string `$password` = NULL, callable `$volume_callback` = NULL): RarArchive|false

Открывает указанный RAR-архив и возвращает объект RarArchive, представляющий его.

> Замечание: При открытии многотомного архива путь к первому тому должен быть передан первым параметром. Иначе не будут видны все файлы.

### Список параметров

`filename`
  Путь к архиву Rar.
`password`
  Пароль, если необходимо расшифровать заголовки архива. Этот же пароль будет использоваться по умолчанию, если будут найдены зашифрованные файлы. Учтите, что файлы могут быть зашифрованы с разными паролями.
`volume_callback`
  Функция, которой передаётся единственный параметр - путь к тому, который не был найден, и возвращающая строку с правильным путём для этого тома или `null`, если данный том не существует или неизвестен. Разработчик должен быть уверен, что данная функция не приведёт к зацикливанию, так как она вызывается повторно, если путь полученный предыдущим вызовом не соответствует нужному тому. Указание этого параметра устраняет предупреждения, которые появлялись бы, если бы том не был бы найден. В случае, если функция возвращает только `null`, то не будет ни одного предупреждения.

Внимание

До версии 2.0.0 эта функция не обрабатывала правильно относительные пути. В таких случаях используйте realpath().

### Возвращаемые значения

Возвращает запрашиваемый объект RarArchive или `false`, если возникла ошибка.

### Список изменений

Версия | Описание
--- | ---
PECL rar 3.0.0 | Был добавлен `volume_callback`.

### Примеры

Пример #1 Объектно-ориентированный стиль

    <?php
    $rar_arch = RarArchive::open('encrypted_headers.rar', 'samplepassword');
    if ($rar_arch === FALSE)
        die("Неудачное открытие файла");

    $entries = $rar_arch->getEntries();
    if ($entries === FALSE)
        die("Неудачное получение записей");

    echo "Найдено " . count($entries) . " файлов.\n";

    if (empty($entries))
        die("Не найдено корректных записей.");

    $stream = reset($entries)->getStream();
    if ($stream === FALSE)
        die("Неудачное открытие первого файла");

    $rar_arch->close();

    echo "Содержимое первого файла:\n";
    echo stream_get_contents($stream);

    fclose($stream);
    ?>

Вывод приведённого примера будет похож на:

    Найдено 2 файлов.
    Содержимое первого файла:
    Encrypted file 1 contents.

Пример #2 Процедурный стиль

    <?php
    $rar_arch = rar_open('encrypted_headers.rar', 'samplepassword');
    if ($rar_arch === FALSE)
        die("Неудачное открытие файла");

    $entries = rar_list($rar_arch);
    if ($entries === FALSE)
        die("Failed fetching entries");

    echo "Найдено " . count($entries) . " файлов.\n";

    if (empty($entries))
        die("Не найдено корректных записей.");

    $stream = reset($entries)->getStream();
    if ($stream === FALSE)
        die("Неудачное открытие первого файла");

    rar_close($rar_arch);

    echo "Содержимое первого файла:\n";
    echo stream_get_contents($stream);

    fclose($stream);
    ?>

Пример #3 Callback-функция для тома

    <?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");
    ?>

### Смотрите также

- `rar://` wrapper

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open