Signatur
Beschreibung
svn_fs_check_path() prüft, welche Art von Element unter dem angegebenen Pfad in einem Subversion-Dateisystem-Root existiert. Die Funktion gibt eine ganzzahlige Konstante zurück, die angibt, ob es sich um eine Datei, ein Verzeichnis oder gar kein Element handelt.
Das Dateisystem-Root ($fsroot) wird typischerweise mit svn_fs_revision_root() oder svn_fs_txn_root() erzeugt und repräsentiert einen bestimmten Revisions- oder Transaktionszustand des Repositories. Diese Funktion ist nützlich, um vor weiteren Operationen zu überprüfen, ob ein Pfad existiert und welchen Typ er hat.
Die möglichen Rückgabewerte sind die Konstanten SVN_NODE_NONE (0, kein Element), SVN_NODE_FILE (1, reguläre Datei) und SVN_NODE_DIR (2, Verzeichnis). Damit lässt sich eine einfache Fallunterscheidung im Code realisieren, bevor auf Dateiinhalte oder Verzeichniseinträge zugegriffen wird.
Die Funktion setzt die PHP-Erweiterung svn (PECL) voraus und wird hauptsächlich in serverseitigen SVN-Verwaltungsskripten oder Repository-Browsern eingesetzt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $fsroot Pflicht | resource | Ein Dateisystem-Root-Handle, wie es von svn_fs_revision_root() oder svn_fs_txn_root() zurückgegeben wird. Repräsentiert einen Snapshot des SVN-Dateisystems. |
|
| $path Pflicht | string | Der absolute Pfad innerhalb des SVN-Repositories, dessen Typ ermittelt werden soll, z. B. /trunk/src/index.php. |
Rückgabewert
SVN_NODE_NONE (0) wenn kein Element am Pfad existiert, SVN_NODE_FILE (1) für eine reguläre Datei, oder SVN_NODE_DIR (2) für ein Verzeichnis.Beispiele
Pfadtyp in einer bestimmten Revision prüfen
<?php
// Repository und Dateisystem öffnen
$repos = svn_repos_open('/var/svn/myrepo');
$fs = svn_repos_fs($repos);
// Root der aktuellen HEAD-Revision holen
$rev = svn_fs_youngest_rev($fs);
$fsroot = svn_fs_revision_root($fs, $rev);
$path = '/trunk/src/index.php';
$type = svn_fs_check_path($fsroot, $path);
switch ($type) {
case SVN_NODE_FILE:
echo "'$path' ist eine Datei.\n";
break;
case SVN_NODE_DIR:
echo "'$path' ist ein Verzeichnis.\n";
break;
case SVN_NODE_NONE:
default:
echo "'$path' existiert nicht.\n";
break;
}
?>
Sicherheitscheck vor dem Lesen von Dateiinhalten
<?php
function readSvnFile(resource $fsroot, string $path): ?string
{
if (svn_fs_check_path($fsroot, $path) !== SVN_NODE_FILE) {
// Pfad ist keine Datei — Abbruch
return null;
}
// Dateiinhalt lesen
$stream = svn_fs_file_contents($fsroot, $path);
$content = stream_get_contents($stream);
fclose($stream);
return $content;
}
$repos = svn_repos_open('/var/svn/myrepo');
$fs = svn_repos_fs($repos);
$rev = svn_fs_youngest_rev($fs);
$fsroot = svn_fs_revision_root($fs, $rev);
$content = readSvnFile($fsroot, '/trunk/README.md');
if ($content !== null) {
echo $content;
} else {
echo "Pfad ist keine lesbare Datei.\n";
}
?>
// Wichtig · Fallstricke
Voraussetzung: Die PECL-Erweiterung svn muss installiert und aktiviert sein. Diese Erweiterung wird nicht aktiv weiterentwickelt und ist möglicherweise nicht für neuere PHP-Versionen verfügbar.
Die Konstante SVN_NODE_UNKNOWN (3) kann theoretisch zurückgegeben werden, wenn der Typ des Elements nicht bestimmt werden kann. Dieser Fall tritt in der Praxis jedoch selten auf und sollte im default-Zweig einer switch-Anweisung behandelt werden.
Das übergebene $fsroot-Handle muss gültig und geöffnet sein. Ein ungültiges Handle führt zu einem Fehler. Schließe alle Ressourcen nach Verwendung ordnungsgemäß, um Speicherlecks zu vermeiden.