Signatur
Beschreibung
Der phar://-Stream-Wrapper unterstützt eine Reihe von Kontextoptionen, die über stream_context_create() übergeben werden können. Diese Optionen beeinflussen, wie PHP-Phar-Archive (PHP Archive) geöffnet, gelesen oder komprimiert werden.
Die wichtigste Kontextoption ist compress, mit der die Komprimierungsmethode für neu erstellte oder modifizierte Phar-Archive festgelegt wird. Mögliche Werte sind die Phar-Komprimierungskonstanten wie Phar::GZ, Phar::BZ2 oder Phar::NONE. Darüber hinaus steht die Option metadata zur Verfügung, um Metadaten an einzelne Einträge im Archiv zu übergeben.
Phar-Kontextoptionen sind besonders nützlich, wenn Dateien innerhalb eines Phar-Archivs über allgemeine Dateifunktionen wie file_get_contents(), file_put_contents() oder fopen() verarbeitet werden und dabei das Kompressions- oder Metadatenverhalten angepasst werden soll, ohne direkt die Phar-Klasse verwenden zu müssen.
- compress: Legt die Komprimierungsmethode für den betreffenden Eintrag fest. Mögliche Werte:
Phar::GZ,Phar::BZ2,Phar::NONE. - metadata: Beliebige PHP-Daten, die als Metadaten für den betreffenden Phar-Eintrag gespeichert werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $compress | int | Phar::NONE | Komprimierungsmethode für Phar-Einträge. Gültige Werte sind Phar::GZ, Phar::BZ2 und Phar::NONE. Erfordert, dass die entsprechende PHP-Erweiterung (zlib bzw. bz2) geladen ist. |
| $metadata | mixed | Beliebige PHP-Daten (z. B. Array, Objekt, String), die als Metadaten für einen einzelnen Phar-Eintrag gespeichert werden. Diese können später über PharFileInfo::getMetadata() abgerufen werden. |
Rückgabewert
fopen(), file_get_contents(), file_put_contents()).Beispiele
Datei mit GZ-Komprimierung in ein Phar-Archiv schreiben
<?php
// Phar-Archiv erstellen und eine Datei komprimiert hinzufügen
$phar = new Phar('mein_archiv.phar');
$phar->addFromString('test.txt', 'Hallo Welt!');
// Stream-Kontext mit GZ-Komprimierung erstellen
$context = stream_context_create([
'phar' => [
'compress' => Phar::GZ,
]
]);
// Datei über phar://-Wrapper mit Komprimierung überschreiben
file_put_contents(
'phar://mein_archiv.phar/test.txt',
'Neuer Inhalt, GZ-komprimiert',
0,
$context
);
echo file_get_contents('phar://mein_archiv.phar/test.txt') . PHP_EOL;
// Aufräumen
unlink('mein_archiv.phar');
Metadaten beim Schreiben in ein Phar-Archiv setzen
<?php
$phar = new Phar('meta_archiv.phar');
$phar->addFromString('info.txt', 'Inhalt der Datei');
// Stream-Kontext mit Metadaten
$context = stream_context_create([
'phar' => [
'metadata' => ['autor' => 'Max Mustermann', 'version' => '1.0'],
]
]);
file_put_contents(
'phar://meta_archiv.phar/info.txt',
'Aktualisierter Inhalt',
0,
$context
);
// Metadaten des Eintrags abrufen
$eintrag = $phar['info.txt'];
var_dump($eintrag->getMetadata());
unlink('meta_archiv.phar');
// Wichtig · Fallstricke
Voraussetzungen: Damit Phar-Archive beschreibbar sind, muss phar.readonly = Off in der php.ini gesetzt sein. Andernfalls schlägt jeder Schreibzugriff fehl.
Für die Komprimierung mit Phar::GZ muss die PHP-Erweiterung zlib geladen sein, für Phar::BZ2 entsprechend die bz2-Erweiterung. Fehlt die jeweilige Erweiterung, wird eine BadMethodCallException geworfen.
Phar-Archive sollten nicht aus nicht vertrauenswürdigen Quellen geladen werden, da bösartige Archive beim Entpacken Sicherheitslücken ausnutzen könnten. Prüfe Quellen sorgfältig und validiere Archivdaten, bevor du sie verarbeitest.