Start · Sprachen · PHP · Referenz · ssh2_sftp_readlink

ssh2_sftp_readlink

Funktion

Gibt das Ziel eines symbolischen Links auf einem entfernten SFTP-Server zurück.

seit PHP 0.9.0 Kategorie: http

Signatur

ssh2_sftp_readlink(resource $sftp, string $link): string|false

Beschreibung

ssh2_sftp_readlink() liest das Ziel eines symbolischen Links auf einem über SSH verbundenen SFTP-Dateisystem aus. Die Funktion entspricht dem POSIX-Befehl readlink, arbeitet jedoch über eine gesicherte SSH2-Verbindung auf dem entfernten Server.

Als erstes Argument erwartet die Funktion eine gültige SFTP-Ressource, die zuvor mit ssh2_sftp() erzeugt wurde. Der Pfad des symbolischen Links wird als zweiter Parameter übergeben und muss ein absoluter Pfad auf dem entfernten System sein.

Die Funktion ist besonders nützlich, wenn man die tatsächliche Zieldatei oder das Zielverzeichnis eines Symlinks auf einem entfernten Server ermitteln möchte, ohne sich manuell per SSH einzuloggen. Sie kann etwa in Deployment-Skripten eingesetzt werden, die über symbolische Links verwaltete Releases verwalten.

Voraussetzung für die Verwendung ist die PECL-Erweiterung ssh2. Ohne diese Erweiterung steht die Funktion nicht zur Verfügung.

Parameter

Name Typ Default Beschreibung
$sftp Pflicht resource Eine SFTP-Ressource, die mit ssh2_sftp() erzeugt wurde.
$link Pflicht string Absoluter Pfad zum symbolischen Link auf dem entfernten Server, dessen Ziel ausgelesen werden soll.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den Pfad zurück, auf den der symbolische Link zeigt, als string. Im Fehlerfall (z. B. Link existiert nicht oder ist kein symbolischer Link) wird false zurückgegeben.

Beispiele

Ziel eines symbolischen Links auf einem entfernten Server auslesen

<?php
// SSH-Verbindung aufbauen
$connection = ssh2_connect('example.com', 22);
ssh2_auth_password($connection, 'benutzer', 'geheim');

// SFTP-Subsystem initialisieren
$sftp = ssh2_sftp($connection);

// Ziel des symbolischen Links auslesen
$ziel = ssh2_sftp_readlink($sftp, '/var/www/current');

if ($ziel !== false) {
    echo 'Der symbolische Link zeigt auf: ' . $ziel . PHP_EOL;
} else {
    echo 'Fehler: Konnte den symbolischen Link nicht auslesen.' . PHP_EOL;
}
?>
Der symbolische Link zeigt auf: /var/www/releases/2024-06-01

Deployment: Aktuelles Release über Symlink ermitteln

<?php
$connection = ssh2_connect('deploy.example.com', 22);
ssh2_auth_pubkey_file(
    $connection,
    'deploy_user',
    '/home/user/.ssh/id_rsa.pub',
    '/home/user/.ssh/id_rsa'
);

$sftp = ssh2_sftp($connection);

$symlink = '/var/www/html/current';
$aktuell = ssh2_sftp_readlink($sftp, $symlink);

if ($aktuell !== false) {
    echo 'Aktuell aktives Release: ' . basename($aktuell) . PHP_EOL;
} else {
    echo 'Symlink konnte nicht gelesen werden oder existiert nicht.' . PHP_EOL;
}
?>
Aktuell aktives Release: release-42

// Wichtig · Fallstricke

Voraussetzung: Die PECL-Erweiterung ssh2 muss installiert und aktiviert sein. Sie ist nicht Teil der PHP-Standardinstallation.

Der angegebene Pfad muss auf dem entfernten Server ein tatsächlich existierender symbolischer Link sein. Bei regulären Dateien oder Verzeichnissen gibt die Funktion false zurück.

Achte darauf, dass der verwendete SSH-Benutzer auf dem entfernten Server ausreichend Leserechte auf den symbolischen Link besitzt, da die Funktion andernfalls fehlschlägt.