rar://

rar://RAR

Description

Ce gestionnaire 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.

Ce gestionnaire 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 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é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 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

Utilisation

  • rar://<url encoded archive name>[*][#[<url encoded entry name>]]

Options

Résumé du gestionnaire
Attribut Supporté
Restreint par allow_url_fopen Non
Restreint par allow_url_include Non
Autorise la lecture Oui
Autorise l'écriture Non
Autorise l'ajout Non
Autorise la lecture et l'écriture silmutanément 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 Défaut
open_password Le mot de passe utilisé pour crypter les en-têtes de l'archive, s'il y en a. WinRAR cryptera tous les fichiers avec le même mot de passe que les en-têtes lorsque celui-ci est présent, donc, pour les archives avec des en-têtes encryptés, file_password sera ignoré.  
file_password Le mot de passe utilisé pour crypter un fichier, s'il y en a. Si les en-têtes sont aussi cryptés, cette option sera ignorée et le mot de passe de l'option open_password sera privilégié. La raison pour laquelle il y a 2 options est le souhait 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ée et cette option doit être utilisée à la place.  
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.  

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";
}
?>
<?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));
?>

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
)
LoadingChargement en cours