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