rar://
rar:// — RAR
Description
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.
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.
rar:// est disponible depuis PECL rar 3.0.0
Options
- rar://<url encoded archive name>[*][#[<url encoded entry name>]]
Exemples
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
)
