RarArchive::open

rar_open

(PECL rar >= 2.0.0)

RarArchive::open -- rar_openAbre un archivo RAR

Descripción

Estilo orientado a objetos (método):

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

Estilo por procedimientos:

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

Abre un archivo RAR especificado y devuelve la instancia RarArchive que lo representa.

Nota:

Si el archivo a abrir esta dividido en volúmenes, se deberá pasar la ruta del primer volúmen como parámetro de la función. De lo contrario, no todos los archivos se mostraran.

Parámetros

filename

Ruta del archivo Rar.

password

Contraseña en texto plano, si fuera necesario descifrar la cabecera del archivo. También se utilizará por defecto si hay archivos encriptados encontrados. Tenga en cuenta que los archivos pueden poseer diferentes contraseñas en cuanto a las cabeceras y entre ellos.

volume_callback

Una función que recibe como parámetro la ruta del volúmen que no fue encontrado y retorna una cadena con la ruta correcta para dicho archivo o NULL si el volúmen no existe o no es conocido. El programador debería asegurar que la función pasada no cause bucles, ya que esta función es llamada repetidas veces si la ruta devuelta en una llamada previa no corresponde con el volúmen solicitado. Especificando este parámetro se omite la notice que se emitiría cuando un volúmen no es encontrado; una implementación que solo devuelva NULL puede, por lo tanto, utilizarce para omitir dichos notices.

Advertencia

En versiones menores a 2.0.0 de PHP, ­esta función no manejaria rutas relativas correctamente. Use realpath() como una solución.

Valores devueltos

Devuelve una instancia del RarArchive solicitado o FALSE en caso de error.

Historial de cambios

Versión Descripción
3.0.0 volume_callback fue agregada.

Ejemplos

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

El resultado del ejemplo sería algo similar a:

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

Ejemplo #2 Estilo por procedimientos

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

Ejemplo #3 Volume Callback

<?php
/* En este ejemplo, hay un volúmen llamdo multi_broken.part1.rar
 * cuyo próximo volúmen es llamado 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");
?>

Ver también