Start · Sprachen · PHP · Referenz · svn_fs_file_contents

svn_fs_file_contents

Funktion

Gibt einen Stream-Ressource-Handle auf den Inhalt einer Datei in einem Subversion-Dateisystem-Wurzelknoten zurück.

Kategorie: misc

Signatur

svn_fs_file_contents(resource $fsroot, string $path): resource|false

Beschreibung

svn_fs_file_contents() gehört zur PECL-Erweiterung svn und ermöglicht den direkten Zugriff auf den Inhalt einer versionierten Datei im Subversion-Dateisystem (svn_fs). Als Eingabe erwartet die Funktion einen Dateisystem-Wurzelknoten (fsroot), der typischerweise durch svn_fs_revision_root() oder svn_fs_txn_root() erzeugt wurde, sowie den vollständigen Pfad zur gewünschten Datei innerhalb des Repositories.

Der Rückgabewert ist eine PHP-Stream-Ressource, die mit den üblichen Stream-Funktionen wie fread(), stream_get_contents() oder fclose() verarbeitet werden kann. So können auch sehr große Dateien speichereffizient gelesen werden, ohne den gesamten Inhalt auf einmal in den Speicher laden zu müssen.

Typische Anwendungsfälle sind die Anzeige von Dateiinhalten bestimmter Revisionen, das Erstellen von Diffs oder das Exportieren historischer Dateiversionen aus einem SVN-Repository direkt aus PHP heraus.

Hinweis: Die svn-Erweiterung ist eine PECL-Erweiterung und muss separat installiert werden. Sie ist nicht standardmäßig in PHP enthalten.

Parameter

Name Typ Default Beschreibung
$fsroot Pflicht resource Ein Dateisystem-Wurzelknoten-Handle, wie er von svn_fs_revision_root() oder svn_fs_txn_root() zurückgegeben wird.
$path Pflicht string Der absolute Pfad zur Datei innerhalb des Subversion-Repositories, z. B. /trunk/src/index.php.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt eine PHP-Stream-Ressource zurück, über die der Dateiinhalt gelesen werden kann. Bei einem Fehler (z. B. ungültiger Pfad oder kein Zugriff) wird false zurückgegeben.

Beispiele

Inhalt einer Datei aus einer bestimmten SVN-Revision lesen

<?php
// Repository öffnen
$repos = svn_repos_open('/var/svn/myrepo');

// Dateisystem-Handle holen
$fs = svn_repos_fs($repos);

// Wurzelknoten der Revision 42 erzeugen
$fsroot = svn_fs_revision_root($fs, 42);

// Stream auf den Dateiinhalt holen
$stream = svn_fs_file_contents($fsroot, '/trunk/README.txt');

if ($stream === false) {
    echo "Fehler: Datei konnte nicht geöffnet werden.";
} else {
    // Gesamten Inhalt lesen
    $content = stream_get_contents($stream);
    fclose($stream);
    echo htmlspecialchars($content);
}

Speichereffizientes Lesen großer Dateien in Blöcken

<?php
$repos = svn_repos_open('/var/svn/myrepo');
$fs    = svn_repos_fs($repos);
$fsroot = svn_fs_revision_root($fs, 100);

$stream = svn_fs_file_contents($fsroot, '/trunk/data/largefile.csv');

if ($stream !== false) {
    // Datei blockweise verarbeiten (8 KB pro Schritt)
    while (!feof($stream)) {
        $chunk = fread($stream, 8192);
        // Chunk verarbeiten...
        echo strlen($chunk) . " Bytes gelesen.\n";
    }
    fclose($stream);
}

// Wichtig · Fallstricke

PECL-Abhängigkeit: Die Funktion ist nur verfügbar, wenn die PECL-Erweiterung svn installiert und in der php.ini geladen ist. Auf vielen Systemen muss sie manuell kompiliert oder über den Paketmanager installiert werden.

Stream schließen: Der zurückgegebene Stream sollte nach der Verwendung stets mit fclose() geschlossen werden, um Ressourcen-Lecks zu vermeiden.

Nur Dateien: Der Pfad muss auf eine Datei zeigen, nicht auf ein Verzeichnis. Für Verzeichnis-Listings steht svn_fs_dir_entries() zur Verfügung.