Liste des protocoles supportés
PHP Manual

Rar

Le gestionnaire rar:// est disponible depuis PECL rar 3.0.0

Note: Ce gestionnaire n'est pas activé par défaut
Afin d'utiliser le gestionnaire rar://, vous devez installer l'extension » rar disponible depuis » PECL.

Ce gestionnaire prend un chemin encodé URL vers l'archive RAR (relatif ou absolu), puis, optionnellement, un astérisque (*), puis, optionnellement, un signe dièse (#), puis, optionnellement, un nom d'entrée encodé URL, tel que stocké dans l'archive. Le fait de spécifier un nom d'entrée nécessite la présence du signe dièse ; la présence d'un slash final est optionnel.

Ce gestionnaire peut ouvrir à la fois des fichiers ou des dossiers. Lors de l'ouverture de dossiers, l'astérisque force les noms des dossiers à être retournés non encodés. S'il n'est pas spécifié, ils seront retournés sous la forme encodée URL - ceci permet au gestionnaire d'être utilisé correctement avec les fonctionnalités internes comme RecursiveDirectoryIterator en présence de noms de fichiers qui semblent être encodés URL.

Si le signe dièse et le nom de l'entrée ne sont pas inclus, la racine de l'archive sera affiché. Cet affichage est différent des dossiers réguliers dans le sens où le flux résultant ne contiendra pas d'informations comme la date et heure de modification, vu que la racine du dossier n'est pas stocké comme une entrée individuelle dans l'archive. L'utilisation de ce gestionnaire avec RecursiveDirectoryIterator nécessite la présence du signe dièse dans l'URL lors de l'accès à la racine afin de construire correctement les URLs des fils.

Exemple #1 Parcours d'une archive 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";
}
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

|-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

Exemple #2 Ouverture d'un fichier crypté (en-tête crypté)

<?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));
/* Les date de création et du dernier accès sont fournies par WinRAR,
 * mais la plupart des autres logiciels ne la fournisse pas */
var_dump(fstat($stream));
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

string(26) "Encrypted file 1 contents."
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
)

Résumé du gestionnaire
Attribut Supporté
Restreint par la fonction allow_url_fopen Non
Restreint par la fonction allow_url_include Non
Autorise la lecture Oui
Autorise l'écriture Non
Autorise l'ajout Non
Autorise à la fois la lecture et l'écriture Non
Support de la fonction stat() Oui
Support de la fonction unlink() Non
Support de la fonction rename() Non
Support de la fonction mkdir() Non
Support de la fonction rmdir() Non

Options de contexte
Nom Utilisation Par défaut
open_password Le mot de passe utilisé pour crupyer les en-têtes de l'archive, s'il y en a. WinRAR cryptera tous les fichiers avec le même mot de passe. Si celui-ci est fourni, file_password sera ignoré.  
file_password Le mot de passe utilisé pour crypté un fichier, s'il y en a. Si l'en-tête est aussi crypté, cette option sera ignoré et le mot de passe de l'option open_password sera privilégié. La raison pour laquelle il y a 2 options est le fait de pouvoir couvrir la possibilité de supporter les archives avec différents mots de passe pour les en-têtes et les fichiers. Notez que si l'en-tête de l'archive n'est pas crypté, l'option open_password sera ignoré et cette option doit être utilisé.  
volume_callback Une fonction de rappel pour déterminer le chemin des volumes manquants. Reportez-vous à la méthode RarArchive::open() pour plus d'informations.  


Liste des protocoles supportés
PHP Manual