RarArchive::open
rar_open
(PECL rar >= 2.0.0)
RarArchive::open -- rar_open — Abre arquivo RAR
Descrição
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.
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 apenasnull
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.
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");
?>