RarArchive::open

rar_open

(PECL rar >= 2.0.0)

RarArchive::open -- rar_openAbre arquivo RAR

Descrição

Estilo orientado a objetos (method):

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

Estilo procedural:

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

Abre o arquivo RAR especificado e retorna a instância RarArchive que o representa.

Note:

Se estiver abrindo um arquivo multivolume, o caminho do primeiro volume deverá ser passado como o primeiro parâmetro. Caso contrário, nem todos os arquivos serão mostrados. Isso ocorre intencionalmente.

Parâmetros

filename

Caminho para o arquivo Rar.

password

Uma senha simples, se necessária para descriptografar os cabeçalhos. Ele também será usado por padrão se forem encontrados arquivos criptografados. Observe que os arquivos podem ter senhas diferentes em relação aos cabeçalhos e entre eles.

volume_callback

Uma função que recebe um parâmetro – o caminho do volume que não foi encontrado – e retorna uma string com o caminho correto para tal volume ou null se tal volume não existir ou não for conhecido. O programador deve garantir que a função passada não cause loops, pois esta função é chamada repetidamente se o caminho retornado em uma chamada anterior não corresponder ao volume necessário. A especificação deste parâmetro omite o aviso que seria emitido sempre que um volume não fosse encontrado; uma implementação que retorna apenas null pode, portanto, ser usado para simplesmente omitir tais avisos.

Warning

Antes da versão 2.0.0, esta função não manipulava caminhos relativos corretamente. Use realpath() como solução alternativa.

Valor Retornado

Retorna a instância RarArchive solicitada ou false em caso de falha.

Registro de Alterações

Versão Descrição
PECL rar 3.0.0 volume_callback foi adicionado.

Exemplos

Example #1 Estilo orientado a objetos

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

O exemplo acima produzirá algo semelhante a:

Found 2 files.
Content of first one follows:
Encrypted file 1 contents.

Example #2 Estilo procedural

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

Example #3 Retorno de chamada de volume

<?php
/* In this example, there's a volume named multi_broken.part1.rar
 * whose next volume is named 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");
?>

Veja Também