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


rar_open

(PECL rar >= 2.0.0)

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

Описание

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

public static RarArchive RarArchive::open ( string $filename [, string $password = NULL [, callable $volume_callback = NULL ]] )

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

RarArchive rar_open ( string $filename [, string $password = NULL [, callable $volume_callback = NULL ]] )

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

Замечание:

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

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

filename

Путь к Rar архиву.

password

Пароль, если необходимо расшифровать заголовки архива. Этот же пароль будет использоваться по умолчанию, если будут найдены зашифрованные файлы. Учтите, что файлы могут быть зашифрованы с разными паролями.

volume_callback

Функция, которой передается единственный параметр - путь к тому, который не был найден, и возвращающая строку с правильным путем для этого тома или NULL, если данный том не существует или неизвестен. Разработчик должен быть уверен, что данная функция не приведет к зацикливанию, так как она вызывается повторно, если путь полученный предыдущим вызовом не соответствует нужному тому. Указание этого параметра устраняет предупреждения, которые появлялись бы, если бы том не был бы найден. В случае, если функция возвращает только NULL, то не будет ни одного предупреждения.

Внимание

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

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

Возаращает запрашиваемый объект RarArchive или FALSE в случае возникновения ошибки.

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

Версия Описание
3.0.0 Был добавлен volume_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 Volume 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(nulldirname(__FILE__) . "/temp_file2.txt");
?>

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