Signatur
Beschreibung
ftp_chdir() sendet einen CWD-Befehl (Change Working Directory) an den FTP-Server und wechselt damit das aktuelle Verzeichnis der aktiven FTP-Verbindung. Das gewünschte Zielverzeichnis wird als absoluter oder relativer Pfad übergeben.
Die Funktion wird typischerweise eingesetzt, um vor dem Hoch- oder Herunterladen von Dateien in das richtige Verzeichnis zu navigieren. Sie ist das FTP-Äquivalent zu chdir() für das lokale Dateisystem.
Bei Erfolg gibt die Funktion true zurück. Schlägt der Verzeichniswechsel fehl – beispielsweise weil das Verzeichnis nicht existiert oder keine Berechtigung besteht –, wird false zurückgegeben und eine PHP-Warnung ausgelöst. Das aktuelle Verzeichnis nach einem erfolgreichen Wechsel lässt sich mit ftp_pwd() abfragen.
Für den Wechsel in das übergeordnete Verzeichnis steht alternativ ftp_cdup() bereit, das dem Befehl ftp_chdir($ftp, '..') entspricht.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ftp Pflicht | FTP\Connection | Eine aktive FTP-Verbindung, die mit ftp_connect() oder ftp_ssl_connect() erzeugt wurde. |
|
| $directory Pflicht | string | Der Pfad des Zielverzeichnisses auf dem FTP-Server. Kann absolut (z. B. /var/www/uploads) oder relativ zum aktuellen Verzeichnis sein. |
Rückgabewert
true zurück, wenn der Verzeichniswechsel erfolgreich war. Bei einem Fehler (z. B. Verzeichnis existiert nicht oder fehlende Berechtigung) wird false zurückgegeben und eine PHP-Warnung ausgelöst.Beispiele
Einfacher Verzeichniswechsel und Abfrage des aktuellen Pfads
<?php
$ftp = ftp_connect('ftp.example.com');
if (!$ftp) {
die('Verbindung fehlgeschlagen.');
}
if (!ftp_login($ftp, 'benutzername', 'geheimesPasswort')) {
die('Anmeldung fehlgeschlagen.');
}
if (ftp_chdir($ftp, '/var/www/uploads')) {
echo 'Aktuelles Verzeichnis: ' . ftp_pwd($ftp) . PHP_EOL;
} else {
echo 'Verzeichniswechsel fehlgeschlagen.' . PHP_EOL;
}
ftp_close($ftp);
?>
Rekursiver Verzeichniswechsel mit Fehlerbehandlung
<?php
$ftp = ftp_connect('ftp.example.com');
ftp_login($ftp, 'benutzername', 'geheimesPasswort');
$pfade = ['backup', '2024', 'januar'];
foreach ($pfade as $verzeichnis) {
if (!@ftp_chdir($ftp, $verzeichnis)) {
// Verzeichnis existiert nicht – anlegen und erneut wechseln
if (ftp_mkdir($ftp, $verzeichnis)) {
ftp_chdir($ftp, $verzeichnis);
echo "Verzeichnis '$verzeichnis' erstellt und gewechselt." . PHP_EOL;
} else {
echo "Fehler beim Erstellen von '$verzeichnis'." . PHP_EOL;
break;
}
} else {
echo "In '$verzeichnis' gewechselt." . PHP_EOL;
}
}
echo 'Endverzeichnis: ' . ftp_pwd($ftp) . PHP_EOL;
ftp_close($ftp);
?>
// Wichtig · Fallstricke
PHP 8.1: Der Parameter $ftp erwartet seit PHP 8.1 eine Instanz der Klasse FTP\Connection statt einer resource. Älterer Code, der eine Resource übergab, funktioniert nach einer Deprecation in 8.0 ab 8.1 nicht mehr ohne Anpassung.
Sicherheit: Wenn der Verzeichnispfad aus Benutzereingaben stammt, sollte er unbedingt validiert und bereinigt werden, um Path-Traversal-Angriffe (z. B. über ../-Sequenzen) zu verhindern. Verwende basename() oder eine Whitelist erlaubter Pfade.
Das Unterdrücken von Fehlern mit @ (wie im zweiten Beispiel) ist in Produktivumgebungen nur dann empfehlenswert, wenn die Fehlerbehandlung explizit im Code erfolgt. Andernfalls sollte auf den @-Operator verzichtet werden, damit Verbindungsprobleme nicht unbemerkt bleiben.