(PECL rar >= 2.0.0)
RarArchive::open -- rar_open — Abre arquivo RAR
Estilo orientado a objetos (method):
$filename
, string $password
= NULL, callable $volume_callback
= NULL): RarArchive|falseEstilo procedural:
$filename
, string $password
= NULL, callable $volume_callback
= NULL): RarArchive|falseAbre o arquivo RAR especificado e retorna a instância RarArchive que o representa.
Nota:
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.
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.
Antes da versão 2.0.0, esta função não manipulava caminhos relativos corretamente. Use realpath() como solução alternativa.
Retorna a instância RarArchive solicitada ou false
em caso de falha.
Versão | Descrição |
---|---|
PECL rar 3.0.0 |
volume_callback foi adicionado.
|
Exemplo #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.
Exemplo #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);
?>
Exemplo #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");
?>