Signatur
Beschreibung
PharFileInfo erweitert SplFileInfo und ermöglicht den detaillierten Zugriff auf Metadaten, Komprimierungsstatus, CRC-Prüfsummen und den rohen Inhalt einer einzelnen Datei in einem Phar-Archiv. Instanzen dieser Klasse werden in der Regel durch Iteration über ein Phar-Objekt oder durch direkten Zugriff über die Array-Notation ($phar['datei.php']) erzeugt.
Mit PharFileInfo lassen sich Informationen wie die unkomprimierte und komprimierte Dateigröße, das verwendete Kompressionsverfahren (GZip oder BZip2) sowie benutzerdefinierte Metadaten (beliebige PHP-Werte) auslesen und setzen. Außerdem kann der Inhalt einer einzelnen Datei direkt komprimiert oder dekomprimiert werden, ohne das gesamte Archiv anfassen zu müssen.
Die Klasse ist besonders nützlich, wenn man den Inhalt eines Phar-Archivs prüfen, einzelne Dateien selektiv (de-)komprimieren oder dateispezifische Metadaten verwalten möchte. Sie kann nicht direkt instanziiert werden, wenn das Archiv nicht existiert — der Konstruktor erwartet einen gültigen phar://-Pfad.
Zu beachten ist, dass Schreiboperationen (Komprimieren, Metadaten setzen) nur möglich sind, wenn das Phar-Archiv nicht schreibgeschützt ist und die INI-Einstellung phar.readonly auf 0 gesetzt ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $entry Pflicht | string | Ein vollständiger phar://-URI, der auf eine Datei innerhalb eines Phar-Archivs zeigt, z. B. phar:///pfad/zu/archiv.phar/datei.php. |
Rückgabewert
Beispiele
Metadaten und Komprimierungsstatus einer Datei im Phar auslesen
<?php
// Phar-Archiv öffnen und über alle Dateien iterieren
$phar = new Phar('/pfad/zu/archiv.phar');
foreach ($phar as $fileInfo) {
/** @var PharFileInfo $fileInfo */
echo 'Datei: ' . $fileInfo->getFilename() . PHP_EOL;
echo 'Größe (unkomprimiert): ' . $fileInfo->getSize() . ' Bytes' . PHP_EOL;
echo 'Komprimierte Größe: ' . $fileInfo->getCompressedSize() . ' Bytes' . PHP_EOL;
if ($fileInfo->isCompressed(Phar::GZ)) {
echo 'Komprimierung: GZip' . PHP_EOL;
} elseif ($fileInfo->isCompressed(Phar::BZ2)) {
echo 'Komprimierung: BZip2' . PHP_EOL;
} else {
echo 'Komprimierung: keine' . PHP_EOL;
}
if ($fileInfo->hasMetadata()) {
echo 'Metadaten: ';
var_dump($fileInfo->getMetadata());
}
echo '---' . PHP_EOL;
}
Datei im Phar-Archiv komprimieren und Metadaten setzen
<?php
// phar.readonly muss in der php.ini auf 0 gesetzt sein!
ini_set('phar.readonly', '0');
$phar = new Phar('/pfad/zu/archiv.phar');
// Einzelne Datei per Array-Zugriff abrufen
$fileInfo = $phar['lib/helper.php'];
// Datei mit GZip komprimieren
$fileInfo->compress(Phar::GZ);
echo 'Datei erfolgreich komprimiert.' . PHP_EOL;
// Benutzerdefinierte Metadaten setzen
$fileInfo->setMetadata([
'author' => 'Max Mustermann',
'version' => '1.2.0',
]);
echo 'Metadaten gesetzt: ' . PHP_EOL;
var_dump($fileInfo->getMetadata());
CRC32-Prüfsumme einer Datei im Phar validieren
<?php
$phar = new Phar('/pfad/zu/archiv.phar');
$fileInfo = $phar['src/bootstrap.php'];
if ($fileInfo->isCRCChecked()) {
echo 'CRC32-Prüfsumme ist gültig.' . PHP_EOL;
echo 'CRC32-Wert: ' . $fileInfo->getCRC32() . PHP_EOL;
} else {
echo 'CRC32-Prüfung fehlgeschlagen oder nicht verfügbar.' . PHP_EOL;
}
// Wichtig · Fallstricke
phar.readonly: Schreiboperationen wie compress(), decompress() und setMetadata() schlagen fehl, solange die INI-Einstellung phar.readonly = 1 aktiv ist (Standard). Für Produktivumgebungen sollte diese Einstellung aktiviert bleiben, um unbeabsichtigte Archivänderungen zu verhindern.
Metadaten-Sicherheit: Metadaten werden mittels serialize()/unserialize() gespeichert und geladen. Das Laden von Metadaten aus nicht vertrauenswürdigen Phar-Dateien kann zu Deserialisierungs-Angriffen führen — Phar-Archive aus unbekannten Quellen sollten niemals geöffnet werden.
Komprimierungsunterstützung: Für die Nutzung von Phar::GZ muss die zlib-Extension und für Phar::BZ2 die bz2-Extension geladen sein.