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