Protocolos y Envolturas soportados
PHP Manual

rar://

rar://RAR

Descripción

Esta envoltura se compone de una ruta al fichero RAR (relativa o absoluta) codificada como URL, un asterisco opcional (*), un signo de número opcional (#) y un nombre de entrada codificado como URL que también es opcional, tal como se almacena en el fichero. Cuando se especifique un nombre de entrada, será necesario también especificar un signo de número; además, se puede añadir al final del nombre una barra.

Esta envoltura puede abrir tanto ficheros como directorios. Cuando se abre un directorio, el signo asterisco obliga a que los nombres de las entradas del directorio se devuelvan decodificados. Si no se especifica, se devolverán codificadas como URL – esto es así para permitir hacer un uso correcto de la envoltura con determinadas funcionalidades, como RecursiveDirectoryIterator cuando se está en presencia de nombres de ficheros que podrían parecen datos codificados como URL.

Si no se proporciona ni un signo de número ni tampoco un número de entrada, se mostrará la raíz del fichero. La diferencia respecto a directorios convencionales es que el flujo no contendrá determinada información, tal como la fecha de modificación, dado que el directorio raíz no se almacena dentro el fichero comprimido en de una entrada individual. Para usar la envoltura con RecursiveDirectoryIterator es necesario que al acceder al raíz se incluya el signo de número en la URL, para que así las URLs de los nodos hijo se puedan construir correctamente.

Nota: Esta envoltura no está habilitada por omisión
Para poder usar la envoltura rar://, debe instalarse la extensión » rar disponible en » PECL.

rar:// Disponible desde PECL rar 3.0.0

Opciones

Opciones

Resumen de la Envoltura
Atributo Permitido
Restringido por allow_url_fopen No
Restringido por allow_url_include No
Permite Lecturas
Permite Escrituras No
Permite Añadir contenido No
Permite Lecturas y Escrituras Simultáneas No
Permite usar la función stat()
Permite usar la función unlink() No
Permite usar la función rename() No
Permite usar la función mkdir() No
Permite usar la función rmdir() No

Opciones de contexto
Nombre Uso Valor por omisión
open_password Si la hubiera, contraseña utilizada para encriptar las cabeceras del archivo. WinRAR encriptará todos los ficheros con la misma contraseña que la cabecera siempre que ésta esté presente, por lo que se ignorará file_password en archivos que contengan cabeceras encriptadas.  
file_password Si la hubiera, contraseña utilizada para encriptar un fichero. Si las cabeceras estuvieran también encriptadas, se ignoraría esta opción en favor de open_password. El motivo por el que hay dos opciones es para así cubrir la posibilidad de que haya un archivo con contraseñas diferentes para la cabecera y los ficheros. Tenga en cuenta que si el archivo no tuviera sus cabeceras encriptadas, se ignoraría open_password y tendría que usarse en su lugar esta opción.  
volume_callback Llamada de retorno que determina la ruta de las partes que no se hayan podido capturar. Para más información, revise RarArchive::open().  

Ejemplos

Ejemplo #1 Recorriendo un archivo RAR

<?php

class MyRecDirIt extends RecursiveDirectoryIterator {
    function 
current() {
        return 
rawurldecode($this->getSubPathName()) .
            (
is_dir(parent::current())?" [DIR]":"");
    }
}

$f "rar://" rawurlencode(dirname(__FILE__)) .
    
DIRECTORY_SEPARATOR 'dirs_and_extra_headers.rar#';

$it = new RecursiveTreeIterator(new MyRecDirIt($f));

foreach (
$it as $s) {
    echo 
$s"\n";
}
?>

El resultado del ejemplo sería algo similar a:

|-allow_everyone_ni [DIR]
|-file1.txt
|-file2_אּ.txt
|-with_streams.txt
\-אּ [DIR]
  |-אּ\%2Fempty%2E [DIR]
  | \-אּ\%2Fempty%2E\file7.txt
  |-אּ\empty [DIR]
  |-אּ\file3.txt
  |-אּ\file4_אּ.txt
  \-אּ\אּ_2 [DIR]
    |-אּ\אּ_2\file5.txt
    \-אּ\אּ_2\file6_אּ.txt

Ejemplo #2 Abriendo un fichero encriptado (encriptación de cabeceras)

<?php
$stream 
fopen("rar://" .
    
rawurlencode(dirname(__FILE__)) . DIRECTORY_SEPARATOR .
    
'encrypted_headers.rar' '#encfile1.txt'"r"false,
    
stream_context_create(
        array(
            
'rar' =>
                array(
                    
'open_password' => 'samplepassword'
                
)
            )
        )
    );
var_dump(stream_get_contents($stream));
/* ni la fecha de creación ni la de último acceso es obligatoria WinRAR,
 * por esa razón la mayoría de ficheros no lo tendrán */
var_dump(fstat($stream));
?>

El resultado del ejemplo sería algo similar a:

string(34) "Contenido del fichero encriptado 1"
Array
(
    [0] => 0
    [1] => 0
    [2] => 33206
    [3] => 1
    [4] => 0
    [5] => 0
    [6] => 0
    [7] => 26
    [8] => 0
    [9] => 1259550052
    [10] => 0
    [11] => -1
    [12] => -1
    [dev] => 0
    [ino] => 0
    [mode] => 33206
    [nlink] => 1
    [uid] => 0
    [gid] => 0
    [rdev] => 0
    [size] => 26
    [atime] => 0
    [mtime] => 1259550052
    [ctime] => 0
    [blksize] => -1
    [blocks] => -1
)

Protocolos y Envolturas soportados
PHP Manual