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