Start · Sprachen · PHP · Referenz · svn_fs_file_length

svn_fs_file_length

Funktion

Gibt die Länge (in Bytes) einer Datei in einem bestimmten Subversion-Dateisystem-Root zurück.

Kategorie: misc

Signatur

svn_fs_file_length(resource $fsroot, string $path): int

Beschreibung

svn_fs_file_length() ist Teil der PECL-Erweiterung svn und ermöglicht den direkten Zugriff auf das Subversion-Dateisystem (FS). Die Funktion gibt die Größe einer Datei in Bytes zurück, wie sie in einer bestimmten Revision oder einem bestimmten Transaktions-Root des SVN-Repositories gespeichert ist.

Ein Dateisystem-Root ($fsroot) wird typischerweise mit svn_fs_revision_root() oder svn_fs_txn_root() erzeugt und repräsentiert den Zustand des Repositories zu einem bestimmten Zeitpunkt (Revision) oder innerhalb einer laufenden Transaktion.

Die Funktion ist nützlich, wenn man Metadaten über Dateien in einem SVN-Repository programmatisch abfragen möchte, etwa um Dateigrößen für Anzeige- oder Validierungszwecke zu ermitteln, ohne den Dateiinhalt vollständig herunterladen zu müssen.

Beachte, dass diese Funktion nur für Dateien gilt – nicht für Verzeichnisse. Um zu prüfen, ob ein Pfad eine Datei ist, kann svn_fs_is_file() vorab verwendet werden.

Parameter

Name Typ Default Beschreibung
$fsroot Pflicht resource Ein Dateisystem-Root-Handle, das mit svn_fs_revision_root() oder svn_fs_txn_root() erzeugt wurde und eine bestimmte Revision oder Transaktion im SVN-Dateisystem repräsentiert.
$path Pflicht string Der absolute Pfad zur Datei innerhalb des SVN-Repositories, z. B. /trunk/src/index.php.

Rückgabewert

Typ
int
Beschreibung
Gibt die Länge der Datei in Bytes als Ganzzahl zurück. Bei einem Fehler (z. B. wenn der Pfad nicht existiert oder kein Dateisystem-Root übergeben wurde) gibt die Funktion 0 zurück oder löst einen Fehler aus.

Beispiele

Dateigröße einer bestimmten Revision abfragen

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

// Dateisystem des Repositories holen
$fs = svn_repos_fs($repos);

// Revision 42 als Root setzen
$fsroot = svn_fs_revision_root($fs, 42);

// Länge einer Datei in dieser Revision abfragen
$path = '/trunk/src/index.php';
$length = svn_fs_file_length($fsroot, $path);

echo "Dateigröße von '{$path}' in Revision 42: {$length} Bytes\n";
?>
Dateigröße von '/trunk/src/index.php' in Revision 42: 4096 Bytes

Dateigröße prüfen, bevor der Inhalt gelesen wird

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

$path = '/trunk/docs/readme.txt';

// Nur Dateien berücksichtigen
if (svn_fs_is_file($fsroot, $path)) {
    $size = svn_fs_file_length($fsroot, $path);

    if ($size > 1024 * 1024) {
        echo "Datei ist größer als 1 MB ({$size} Bytes) – Inhalt wird nicht geladen.\n";
    } else {
        $content = svn_fs_file_contents($fsroot, $path);
        echo stream_get_contents($content);
    }
} else {
    echo "'{$path}' ist keine Datei.\n";
}
?>

// Wichtig · Fallstricke

PECL-Erweiterung: svn_fs_file_length() ist Teil der PECL-Erweiterung svn, die separat installiert werden muss (pecl install svn). Die Erweiterung bindet an die Subversion-Bibliotheken (libsvn) und ist nicht standardmäßig in PHP enthalten.

Nur für Dateien: Die Funktion darf nur auf Pfade angewendet werden, die im Repository tatsächlich Dateien sind. Bei Verzeichnispfaden ist das Verhalten undefiniert. Verwende svn_fs_is_file() zur Vorabprüfung.

Kompatibilität: Da die PECL-SVN-Erweiterung in der Praxis kaum noch aktiv gepflegt wird, empfiehlt es sich bei neueren Projekten, auf Kommandozeilen-Wrapper (proc_open) oder externe SVN-Client-Bibliotheken auszuweichen.