rar://

Оновлено: 11.05.2023

rar:// - RAR

Обгортка приймає закодований url-шлях до RAR-архіву (відносний або абсолютний), необов'язкову зірочку (*), необов'язковий знак числа (#) і необов'язкову закодовану url-адресу, як вона зберігається в архіві. Вказівка назви запису є обов'язковою; пряма похила риска в назві запису не є обов'язковою.

Ця обгортка може відкривати як файли, так і каталоги. При відкритті каталогів знак зірочки змушує повертати назви записів каталогів без кодування. Якщо його не вказано, вони будуть повернуті у закодованому вигляді - це зроблено для того, щоб дозволити коректно використовувати обгортку з вбудованою функціональністю, такою як RecursiveDirectoryIterator, за наявності назв файлів, які виглядають як закодовані url-дані.

Якщо знак фунта і частину назви запису не включено, буде показано корінь архіву. Це відрізняється від звичайних каталогів тим, що результуючий потік не міститиме такої інформації, як час модифікації, оскільки кореневий каталог не зберігається в окремому записі в архіві. Використання обгортки з ітератором RecursiveDirectoryIterator вимагає включення знаку числа до URL-адреси при зверненні до кореня, щоб URL-адреси дочірніх каталогів могли бути побудовані правильно.

Зауваження: За замовчуванням цю обгортку не ввімкнено Щоб скористатися обгорткою rar://, вам слід встановити розширення " rar, доступне з " PECL.

rar:// Доступно з PECL rar 3.0.0

rar://<закодована назва архіву>[*][#[<закодована назва запису>]].

Wrapper Summary Attribute Supported Restricted by allow_url_fopen No Restricted by allow_url_include No Allows Reading Yes Allows Writing No Allows Appending No Allows Simultaneous Reading and Writing No Supports stat() Yes Supports unlink() No Supports rename() No Supports mkdir() No Supports rmdir() No
Context options Name Usage Default open_password The password used to encrypt the headers of the archive, if any. WinRAR will encrypt all the files with the same password as the headers password when the later is present, so for archives with encrypted headers, file_password will be ignored.   file_password The password used to encrypt a file, if any. If the headers are also encrypted, this option will be ignored in favor of open_password. The reason there are two options is to cover the possibility of supporting archives with different headers and file passwords, should those archives arise. Note that if the archive does not have its headers encrypted, open_password will be ignored and this option must be used instead.   volume_callback A callback to determine the path of missing volumes. See RarArchive::open() for more information.  

Приклад #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";
}
?>

У наведеному вище прикладі буде виведено щось подібне до

Приклад #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));
/* creation and last access date is opt-in in WinRAR, hence most
 * files don't have them */
var_dump(fstat($stream));
?>

У наведеному вище прикладі буде виведено щось подібне до