Start · Sprachen · PHP · Referenz · Phar context options

Phar context options

Funktion

Kontextoptionen für den <code>phar://</code>-Stream-Wrapper, mit denen das Verhalten beim Lesen und Schreiben von Phar-Archiven gesteuert wird.

seit PHP 5.3.0 Kategorie: misc

Signatur

array $context = stream_context_create(['phar' => [...]])

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

Typ
resource
Beschreibung
Gibt eine Stream-Kontext-Ressource zurück, die an kompatible Dateifunktionen übergeben werden kann (z. B. 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');
Neuer Inhalt, GZ-komprimiert

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');
array(2) { ["autor"]=> string(14) "Max Mustermann" ["version"]=> string(3) "1.0" }

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