RarArchive::open

rar_open

(PECL rar >= 2.0.0)

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

Описание

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

public static RarArchive::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, если данный том не существует или неизвестен. Разработчик должен быть уверен, что данная функция не приведёт к зацикливанию, так как она вызывается повторно, если путь полученный предыдущим вызовом не соответствует нужному тому. Указание этого параметра устраняет предупреждения, которые появлялись бы, если бы том не был бы найден. В случае, если функция возвращает только 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");
?>

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

add a note add a note

User Contributed Notes 1 note

up
1
ohcc at 163 dot com
9 years ago
I'm just confused why Rar::open() would be static, there should be a constructor instead.

I think $rar = new RarArchive(...); is much better than $rar = RarArchive::open(...); that is the real OOP style.
To Top