Start · Sprachen · PHP · Referenz · ftp_mkdir

ftp_mkdir

Funktion

Erstellt ein neues Verzeichnis auf einem FTP-Server und gibt bei Erfolg den Namen des erstellten Verzeichnisses zurück.

seit PHP 4.0.0 Kategorie: io

Signatur

ftp_mkdir(FTP\Connection $ftp, string $directory): string|false

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

Typ
string|false
Beschreibung
Gibt bei Erfolg den Namen des erstellten Verzeichnisses zurück, wie ihn der Server meldet. Schlägt die Erstellung fehl (z. B. wegen fehlender Rechte oder bereits vorhandenem Verzeichnis), wird 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);
?>
Verzeichnis erfolgreich erstellt: uploads/2024

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);
?>
Verzeichnisstruktur erfolgreich angelegt.

// 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.