Start · Sprachen · PHP · Referenz · PharFileInfo

PharFileInfo

Klasse

Bietet eine High-Level-Schnittstelle zu Inhalt und Attributen einer einzelnen Datei innerhalb eines Phar-Archivs.

seit PHP 5.3.0 Kategorie: misc

Signatur

class PharFileInfo extends SplFileInfo

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

Typ

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: index.php Größe (unkomprimiert): 1024 Bytes Komprimierte Größe: 512 Bytes Komprimierung: GZip ---

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());
Datei erfolgreich komprimiert. Metadaten gesetzt: array(2) { ["author"]=> string(14) "Max Mustermann" ["version"]=> string(5) "1.2.0" }

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;
}
CRC32-Prüfsumme ist gültig. CRC32-Wert: 3456789012

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