rar://
Оновлено: 11.05.2023
rar:// - RAR
Обгортка приймає закодований url-шлях до RAR-архіву (відносний або абсолютний), необов'язкову зірочку (*), необов'язковий знак числа (#) і необов'язкову закодовану url-адресу, як вона зберігається в архіві. Вказівка назви запису є обов'язковою; пряма похила риска в назві запису не є обов'язковою.
Ця обгортка може відкривати як файли, так і каталоги. При відкритті каталогів знак зірочки змушує повертати назви записів каталогів без кодування. Якщо його не вказано, вони будуть повернуті у закодованому вигляді - це зроблено для того, щоб дозволити коректно використовувати обгортку з вбудованою функціональністю, такою як RecursiveDirectoryIterator, за наявності назв файлів, які виглядають як закодовані url-дані.
Якщо знак фунта і частину назви запису не включено, буде показано корінь архіву. Це відрізняється від звичайних каталогів тим, що результуючий потік не міститиме такої інформації, як час модифікації, оскільки кореневий каталог не зберігається в окремому записі в архіві. Використання обгортки з ітератором RecursiveDirectoryIterator вимагає включення знаку числа до URL-адреси при зверненні до кореня, щоб URL-адреси дочірніх каталогів могли бути побудовані правильно.
Зауваження: За замовчуванням цю обгортку не ввімкнено Щоб скористатися обгорткою rar://, вам слід встановити розширення " rar, доступне з " PECL.
rar:// Доступно з PECL rar 3.0.0
rar://<закодована назва архіву>[*][#[<закодована назва запису>]].
open_password
file_password
will be
ignored.
file_password
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
Приклад #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));
?>
У наведеному вище прикладі буде виведено щось подібне до