Signatur
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
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);
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);
// 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.