Start · Sprachen · PHP · Referenz · svn_fs_check_path

svn_fs_check_path

Funktion

Ermittelt die Art des Elements (Datei, Verzeichnis oder kein Element) an einem bestimmten Pfad in einem Subversion-Dateisystem.

Kategorie: misc

Signatur

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

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

Typ
int
Beschreibung
Gibt eine der folgenden Konstanten zurück: 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;
}
?>
'/trunk/src/index.php' ist eine Datei.

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.