Signatur
Beschreibung
svn_cat() liest den Inhalt einer Datei direkt aus einem SVN-Repository aus, ähnlich wie das Kommandozeilenwerkzeug svn cat. Die Funktion gehört zur PECL-Erweiterung svn und ermöglicht es, auf Repository-Inhalte zuzugreifen, ohne eine lokale Arbeitskopie auschecken zu müssen.
Als erstes Argument wird die vollständige URL zur Datei im Repository übergeben (z. B. http://svn.example.com/repos/projekt/trunk/datei.txt). Optional kann eine Revisionsnummer angegeben werden, um den Dateiinhalt einer bestimmten Revision abzurufen. Wird keine Revisionsnummer übergeben, liefert die Funktion den Inhalt der HEAD-Revision (neueste Version).
Die Funktion ist besonders nützlich, wenn Skripte automatisiert auf Repository-Inhalte zugreifen sollen, beispielsweise um Konfigurationsdateien, Changelog-Einträge oder Quellcode-Dateien aus einem SVN-Repository direkt in eine Webanwendung einzubinden, ohne ein vollständiges Checkout durchzuführen.
Schlägt der Zugriff fehl (z. B. wegen ungültiger URL, fehlender Berechtigungen oder nicht vorhandener Revision), gibt die Funktion false zurück und erzeugt eine PHP-Warnung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $repos_url Pflicht | string | Die vollständige URL zur Datei im SVN-Repository, z. B. http://svn.example.com/repos/trunk/README.txt. Lokale Pfade mit file:///-Schema sind ebenfalls möglich. |
|
| $revision_no | int | SVN_REVISION_HEAD | Die Revisionsnummer, deren Dateiinhalt abgerufen werden soll. Standardmäßig wird SVN_REVISION_HEAD verwendet, was der neuesten Revision entspricht. |
Rückgabewert
false zurückgegeben.Beispiele
Inhalt der HEAD-Revision einer Datei abrufen
<?php
// PECL-Erweiterung 'svn' muss installiert sein
$url = 'http://svn.example.com/repos/meinprojekt/trunk/README.txt';
$inhalt = svn_cat($url);
if ($inhalt === false) {
echo 'Fehler: Datei konnte nicht geladen werden.';
} else {
echo htmlspecialchars($inhalt);
}
Dateiinhalt einer bestimmten Revision abrufen
<?php
// Inhalt von README.txt in Revision 42 abrufen
$url = 'http://svn.example.com/repos/meinprojekt/trunk/README.txt';
$revision = 42;
$inhalt = svn_cat($url, $revision);
if ($inhalt !== false) {
echo "Inhalt aus Revision $revision:\n";
echo htmlspecialchars($inhalt);
} else {
echo "Revision $revision konnte nicht geladen werden.";
}
Changelog-Datei aus Repository in Webanwendung einbinden
<?php
// Lokales Repository über file://-Schema ansprechen
$url = 'file:///var/svn/repos/meinprojekt/trunk/CHANGELOG.md';
$changelog = svn_cat($url);
if ($changelog !== false) {
// Ausgabe sicher für HTML aufbereiten
echo '<pre>' . htmlspecialchars($changelog, ENT_QUOTES, 'UTF-8') . '</pre>';
} else {
echo '<p>Changelog nicht verfügbar.</p>';
}
// Wichtig · Fallstricke
Voraussetzung: Die PECL-Erweiterung svn muss installiert und aktiviert sein (pecl install svn). Diese Erweiterung ist nicht im PHP-Kern enthalten und muss separat installiert werden.
Sicherheitshinweis: Wenn die Repository-URL aus Benutzereingaben stammt, muss sie unbedingt validiert und auf erlaubte Präfixe geprüft werden, um den Zugriff auf unbeabsichtigte Ressourcen zu verhindern. Geben Sie den Rückgabewert niemals ungefiltert an den Browser aus – verwenden Sie stets htmlspecialchars().
Authentifizierung: Falls das Repository eine Authentifizierung erfordert, können Zugangsdaten direkt in der URL eingebettet werden (http://user:password@svn.example.com/...). Sicherer ist jedoch die Verwendung von svn_auth_set_parameter().
Binäre Dateien: svn_cat() kann auch binäre Dateien zurückgeben; der Rückgabewert ist in diesem Fall ein roher Byte-String. Für Textdateien empfiehlt es sich, die Zeichenkodierung zu beachten.