Signatur
Beschreibung
ftp_mkdir() legt auf dem mit $ftp verbundenen FTP-Server ein neues Verzeichnis mit dem angegebenen Namen an. Die Funktion entspricht dem FTP-Befehl MKD. Sie eignet sich überall dort, wo dynamisch Verzeichnisstrukturen auf einem Remote-Server aufgebaut werden müssen – etwa beim automatisierten Upload von Dateien in tagesbasierte Ordner.
Der Rückgabewert ist der vollständige Name des erstellten Verzeichnisses, wie ihn der Server meldet. Dies kann in manchen Fällen von dem übergebenen $directory-Argument abweichen (z. B. wenn der Server den Pfad normalisiert). Bei einem Fehler wird false zurückgegeben.
Es ist wichtig zu beachten, dass die Funktion keine übergeordneten Verzeichnisse anlegt. Soll eine mehrstufige Verzeichnisstruktur erstellt werden, muss jede Ebene einzeln mit ftp_mkdir() angelegt werden. Eine eigene Hilfsfunktion oder ein rekursiver Ansatz ist hierfür empfehlenswert.
Die Verbindung zum FTP-Server muss zuvor über ftp_connect() und ftp_login() hergestellt und authentifiziert worden sein. Außerdem muss der angemeldete FTP-Nutzer über ausreichende Schreibrechte auf dem Server verfügen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ftp Pflicht | FTP\Connection | Eine aktive FTP-Verbindungsinstanz, die von ftp_connect() oder ftp_ssl_connect() zurückgegeben wurde. Ab PHP 8.1 ist dies ein FTP\Connection-Objekt (zuvor eine Ressource). |
|
| $directory Pflicht | string | Der Name oder Pfad des zu erstellenden Verzeichnisses. Relative Pfade beziehen sich auf das aktuelle Arbeitsverzeichnis des FTP-Servers. Es können keine mehrstufigen Verzeichnisse in einem einzigen Aufruf erstellt werden. |
Rückgabewert
false zurückgegeben.Beispiele
Einfaches Verzeichnis auf einem FTP-Server erstellen
<?php
$ftp = ftp_connect('ftp.example.com');
if (!$ftp) {
die('Verbindung zum FTP-Server fehlgeschlagen.');
}
if (!ftp_login($ftp, 'benutzername', 'passwort')) {
ftp_close($ftp);
die('FTP-Anmeldung fehlgeschlagen.');
}
$neuerOrdner = 'uploads/2024';
$ergebnis = ftp_mkdir($ftp, $neuerOrdner);
if ($ergebnis !== false) {
echo 'Verzeichnis erfolgreich erstellt: ' . $ergebnis;
} else {
echo 'Verzeichnis konnte nicht erstellt werden.';
}
ftp_close($ftp);
?>
Rekursives Erstellen einer mehrstufigen Verzeichnisstruktur
<?php
function ftp_mkdir_recursive(FTP\Connection $ftp, string $pfad): bool {
$teile = explode('/', trim($pfad, '/'));
$aktuell = '';
foreach ($teile as $teil) {
$aktuell .= '/' . $teil;
// Prüfen ob Verzeichnis bereits existiert
if (@ftp_chdir($ftp, $aktuell)) {
// Verzeichnis existiert bereits, zurück zur Wurzel
ftp_chdir($ftp, '/');
continue;
}
// Verzeichnis anlegen
if (ftp_mkdir($ftp, $aktuell) === false) {
return false;
}
}
return true;
}
$ftp = ftp_connect('ftp.example.com');
ftp_login($ftp, 'benutzername', 'passwort');
if (ftp_mkdir_recursive($ftp, 'projekte/2024/januar/uploads')) {
echo 'Verzeichnisstruktur erfolgreich angelegt.';
} else {
echo 'Fehler beim Anlegen der Verzeichnisstruktur.';
}
ftp_close($ftp);
?>
// Wichtig · Fallstricke
Sicherheitshinweis: Verzeichnisnamen, die aus Benutzereingaben stammen, sollten niemals ungeprüft an ftp_mkdir() übergeben werden. Andernfalls könnte ein Angreifer durch Path-Traversal-Angriffe (z. B. mit ../../) Verzeichnisse an unerwünschten Stellen auf dem Server anlegen. Eingaben daher immer validieren und bereinigen.
PHP 8.1: Ab PHP 8.1 wurde der Ressource-Typ für FTP-Verbindungen durch das FTP\Connection-Objekt ersetzt. Älterer Code, der den Typ als resource erwartet, muss ggf. angepasst werden.
Wenn das Verzeichnis bereits existiert, gibt ftp_mkdir() false zurück und erzeugt eine PHP-Warnung. Mit @ftp_mkdir() kann die Warnung unterdrückt werden, aber es ist besser, vorher mit ftp_nlist() oder einem ftp_chdir()-Test zu prüfen, ob das Verzeichnis schon vorhanden ist.