Start · Sprachen · PHP · Referenz · ftp_raw

ftp_raw

Funktion

Sendet ein beliebiges Raw-Kommando an den FTP-Server und gibt die Server-Antwort als Array zurück.

seit PHP 5.0.0 Kategorie: io

Signatur

ftp_raw(FTP\Connection $ftp, string $command): array|null

Beschreibung

ftp_raw() ermöglicht es, ein beliebiges FTP-Kommando direkt an den verbundenen FTP-Server zu senden, ohne dass PHP das Kommando interpretiert oder validiert. Dies ist nützlich, wenn spezifische FTP-Befehle benötigt werden, für die PHP keine dedizierte Wrapper-Funktion bietet (z. B. SITE-Befehle oder serverspezifische Erweiterungen).

Die Funktion gibt die rohe Antwort des Servers als Array von Strings zurück, wobei jedes Element einer Zeile der Serverantwort entspricht. Dadurch kann die Antwort flexibel ausgewertet werden. Im Unterschied zu ftp_exec() liefert ftp_raw() die vollständige Server-Antwort zurück, während ftp_exec() nur einen booleschen Wert zurückgibt.

Typische Anwendungsfälle sind das Abfragen von Server-Features (FEAT), das Wechseln des Transfer-Modus (TYPE), das Setzen von Dateirechten über SITE CHMOD oder das Abrufen von Verzeichnis-Details mit MLSD. Die Funktion setzt eine aktive FTP-Verbindung voraus, die zuvor mit ftp_connect() und ftp_login() hergestellt wurde.

Hinweis: Da keinerlei Validierung des Kommandos stattfindet, ist Vorsicht geboten, wenn das Kommando aus Benutzereingaben stammt. Benutzereingaben müssen grundsätzlich validiert und gefiltert werden, bevor sie an diese Funktion übergeben werden.

Parameter

Name Typ Default Beschreibung
$ftp Pflicht FTP\Connection Eine gültige FTP-Verbindungsinstanz (FTP\Connection), die zuvor mit ftp_connect() oder ftp_ssl_connect() erstellt wurde.
$command Pflicht string Das FTP-Kommando, das als Rohstring an den Server gesendet werden soll, z. B. 'FEAT', 'SITE CHMOD 0644 datei.txt' oder 'MLSD'.

Rückgabewert

Typ
array|null
Beschreibung
Gibt ein Array von Strings zurück, wobei jedes Element einer Zeile der Serverantwort entspricht. Gibt null zurück, wenn keine gültige FTP-Verbindung vorhanden ist oder das Kommando nicht gesendet werden konnte.

Beispiele

Server-Features mit FEAT abfragen

<?php
$ftp = ftp_connect('ftp.beispiel.de');
if (!$ftp) {
    die('Verbindung fehlgeschlagen.');
}

if (!ftp_login($ftp, 'benutzer', 'passwort')) {
    die('Login fehlgeschlagen.');
}

// Rohen FEAT-Befehl senden, um unterstützte Features abzufragen
$antwort = ftp_raw($ftp, 'FEAT');

if ($antwort !== null) {
    echo "Server-Features:" . PHP_EOL;
    foreach ($antwort as $zeile) {
        echo $zeile . PHP_EOL;
    }
}

ftp_close($ftp);
Server-Features: 211-Features: MDTM REST STREAM SIZE UTF8 211 End

Dateirechte per SITE CHMOD setzen

<?php
$ftp = ftp_connect('ftp.beispiel.de');
if (!$ftp) {
    die('Verbindung fehlgeschlagen.');
}

if (!ftp_login($ftp, 'benutzer', 'passwort')) {
    die('Login fehlgeschlagen.');
}

// Dateirechte auf 0644 setzen
$datei = 'public_html/index.php';
$antwort = ftp_raw($ftp, 'SITE CHMOD 0644 ' . $datei);

if ($antwort !== null) {
    // Der Antwort-Code steht am Anfang der ersten Zeile
    $code = (int) substr($antwort[0], 0, 3);
    if ($code === 200) {
        echo "Dateirechte erfolgreich gesetzt." . PHP_EOL;
    } else {
        echo "Fehler beim Setzen der Dateirechte: " . $antwort[0] . PHP_EOL;
    }
}

ftp_close($ftp);
Dateirechte erfolgreich gesetzt.

// Wichtig · Fallstricke

Sicherheitshinweis: Da ftp_raw() keinerlei Validierung des übergebenen Kommandos durchführt, darf der command-Parameter niemals direkt aus nicht vertrauenswürdigen Benutzereingaben stammen. Andernfalls könnten Angreifer beliebige FTP-Kommandos einschleusen (FTP-Command-Injection). Eingaben müssen stets geprüft und auf eine Whitelist erlaubter Befehle beschränkt werden.

Ab PHP 8.1.0 akzeptiert die Funktion ein FTP\Connection-Objekt statt einer Ressource vom Typ resource. Ältere Ressourcen aus ftp_connect() werden automatisch in das neue Objekt konvertiert, aber der Code sollte entsprechend aktualisiert werden.

Im Gegensatz zu ftp_exec(), das nur true oder false zurückgibt, liefert ftp_raw() die vollständige Serverantwort, was eine detailliertere Fehlerauswertung ermöglicht.