rar:// — RAR
Cette enveloppe prend le chemin encodé URL vers l'archive RAR (relatif ou absolu),
puis, optionnellement, un astérisque (*
), optionnellement suivi
d'un signe dièse (#
), et, toujours 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 au début du nom de
l'entrée est optionnelle.
Cette enveloppe peut ouvrir à la fois des fichiers et 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 à l'enveloppe 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ée. Cet affichage est différent des dossiers réguliers dans le sens où le flux résultant ne contiendra pas d'information comme la date et heure de modification, puisque la racine du dossier n'est pas stockée comme une entrée individuelle dans l'archive. L'utilisation de cette enveloppe 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: Cette enveloppe n'est pas activé par défaut
Pour utiliser l'enveloppe rar://, l'extension » rar disponible sur » PECL doit être installée.
rar:// est disponible depuis PECL rar 3.0.0
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";
}
?>
Résultat de l'exemple ci-dessus est 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 dates de création et de dernier accès sont optionnelles avec WinRAR,
* ce qui explique que la plupart des fichiers ne les aient pas */
var_dump(fstat($stream));
?>
Résultat de l'exemple ci-dessus est 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 )