PHP 8.4.1 Released!

rar://

rar://RAR

Beschreibung

Der Wrapper akzeptiert den URL-kodierten Pfad zum RAR-Archiv (relativ oder absolut), ein optionales Sternchen (*), ein optionales Nummernzeichen (#) und optional den URL-kodierten Namen des Eintrags, wie er im Archiv gespeichert ist. Bei Angabe eines Eintragsnamens muss das Nummernzeichen angegeben werden; ein führender Schrägstrich im Eintragsnamen ist optional.

Mit diesem Wrapper können sowohl Dateien als auch Verzeichnisse geöffnet werden. Beim Öffnen eines Verzeichnisses erzwingt das Sternchen, dass der Name des Verzeichniseintrags unkodiert zurückgegeben wird. Wenn es nicht angegeben ist, wird er URL-kodiert zurückgegeben. Damit soll sichergestellt werden, dass der Wrapper korrekt mit eingebauten Funktionen wie dem RecursiveDirectoryIterator verwendet werden kann, wenn der Dateiname nach URL-kodierten Daten aussieht.

Wenn der Teil mit dem Nummernsymbol und dem Eintragsnamen nicht angegeben wird, wird das Stammverzeichnis des Archivs angezeigt. Der Unterschied zu normalen Verzeichnissen besteht darin, dass der resultierende Stream keine Informationen wie z. B. die Änderungszeit enthält, weil das Stammverzeichnis nicht in als separater Eintrag im Archivs gespeichert ist. Wenn der Wrapper mit RecursiveDirectoryIterator verwendet werden soll, muss die URL das Nummernsymbol enthalten, damit die URLs der Unterverzeichnisse korrekt erstellt werden können.

Hinweis: Dieser Wrapper ist standardmäßig nicht aktiviert
Um den Wrapper rar:// verwenden zu können, muss die » rar-Erweiterung von » PECL installiert werden

rar:// Available since PECL rar 3.0.0

Verwendung

  • rar://<URL-kodierter Name des Archivs>[*][#[<URL-kodierter Name des Eintrags>]]

Optionen

Zusammenfassung des Wrappers
Eigenschaft wird unterstützt
Eingeschränkt durch allow_url_fopen Nein
Eingeschränkt durch allow_url_include Nein
Erlaubt Lesen Ja
Erlaubt Schreiben Nein
Erlaubt Anfügen Nein
Erlaubt gleichzeitiges Lesen und Schreiben Nein
Unterstützt stat() Ja
Unterstützt unlink() Nein
Unterstützt rename() Nein
Unterstützt mkdir() Nein
Unterstützt rmdir() Nein

Kontextoptionen
Name Verwendung Voreinstellung
open_password Das Passwort, mit dem die Header des Archivs verschlüsselt werden, falls vorhanden. WinRAR verschlüsselt alle Dateien mit dem für die Header verwendeten Passwort, falls dieses vorhanden ist; bei Archiven mit verschlüsselten Headern wird file_password also ignoriert.  
file_password Das zur Verschlüsselung einer Datei verwendete Passwort, falls vorhanden. Wenn die Header ebenfalls verschlüsselt sind, wird diese Option zugunsten von open_password ignoriert. Es gibt diese beiden Optionen, damit auch Archive mit verschiedenen Header- und Dateipasswörtern unterstützt werden können, falls es solche Archive geben sollte. Wenn die Header des Archivs nicht verschlüsselt sind, wird open_password ignoriert und stattdessen muss diese Option verwendet werden.  
volume_callback Ein Callback, mit dem der Pfad von fehlenden Archiv-Volumes ermittelt werden kann. Siehe RarArchive::open() für weitere Informationen.  

Beispiele

Beispiel #1 Durchlaufen eines RAR-Archivs

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

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

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

Beispiel #2 Öffnen einer verschlüsselten Datei (Header-Verschlüsselung)

<?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));
/* Erstellungsdatum und Datum des letzten Zugriffs sind in WinRAR optional,
* weshalb diese Angaben bei den meisten Dateien fehlen */
var_dump(fstat($stream));
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

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
)
add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top