Signatur
Beschreibung
ftp_exec() sendet den FTP-Befehl SITE EXEC an den verbundenen FTP-Server. Damit kann ein Programm oder Skript auf dem Server ausgeführt werden – sofern der FTP-Server diese Funktion unterstützt und der angemeldete Benutzer die erforderlichen Rechte besitzt. Die meisten öffentlich zugänglichen FTP-Server unterstützen SITE EXEC aus Sicherheitsgründen nicht.
Die Funktion gibt true zurück, wenn der Server den Befehl akzeptiert (d. h. mit einem Erfolgscode antwortet), und false im Fehlerfall. Dabei wird keine Ausgabe des ausgeführten Programms zurückgeliefert – die Funktion bestätigt lediglich, ob der Befehl angenommen wurde.
Typische Einsatzgebiete sind interne Serversysteme oder spezielle FTP-Setups, bei denen nach einem Datei-Upload automatisch ein serverseitiges Verarbeitungsskript gestartet werden soll. Für allgemeine FTP-Aufgaben sind andere FTP-Funktionen wie ftp_put() oder ftp_exec() geeigneter.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ftp Pflicht | FTP\Connection | Eine aktive FTP-Verbindungsressource, die mit ftp_connect() oder ftp_ssl_connect() erstellt wurde. |
|
| $command Pflicht | string | Der Befehl, der auf dem FTP-Server ausgeführt werden soll. Dieser wird als Argument des SITE EXEC-Befehls übergeben. |
Rückgabewert
true zurück, wenn der Server den SITE EXEC-Befehl erfolgreich akzeptiert hat, andernfalls false. Ein true bedeutet lediglich, dass der Befehl angenommen wurde – nicht zwingend, dass das Programm erfolgreich ausgeführt wurde.Beispiele
Serverseitiges Skript nach Upload ausführen
<?php
$ftp = ftp_connect('ftp.example.com');
if (!$ftp) {
die('Verbindung fehlgeschlagen.');
}
if (!ftp_login($ftp, 'benutzer', 'geheimesPasswort')) {
die('Anmeldung fehlgeschlagen.');
}
// Datei hochladen
ftp_put($ftp, '/remote/daten.csv', '/local/daten.csv', FTP_BINARY);
// Serverseitiges Verarbeitungsskript starten
if (ftp_exec($ftp, '/scripts/verarbeite_daten.sh')) {
echo 'Befehl wurde vom Server akzeptiert.' . PHP_EOL;
} else {
echo 'SITE EXEC wird vom Server nicht unterstützt oder Befehl fehlgeschlagen.' . PHP_EOL;
}
ftp_close($ftp);
Fehlerbehandlung bei nicht unterstütztem SITE EXEC
<?php
$ftp = ftp_connect('ftp.example.com');
ftp_login($ftp, 'benutzer', 'geheimesPasswort');
// Alte Fehlerbehandlung sicherstellen
$result = @ftp_exec($ftp, 'ls -la /remote/pfad');
if ($result === false) {
echo 'Der FTP-Server unterstützt SITE EXEC nicht oder der Befehl wurde verweigert.' . PHP_EOL;
} else {
echo 'Befehl erfolgreich gesendet.' . PHP_EOL;
}
ftp_close($ftp);
// Wichtig · Fallstricke
Sicherheitshinweis: ftp_exec() ermöglicht die Ausführung beliebiger Befehle auf dem FTP-Server. Übergeben Sie niemals ungeprüfte Benutzereingaben als $command-Argument, da dies zu einer schwerwiegenden Command-Injection-Schwachstelle führen kann. Validieren und escapen Sie alle Eingaben sorgfältig, bevor Sie sie verwenden.
Die meisten öffentlichen und kommerziell betriebenen FTP-Server deaktivieren SITE EXEC aus Sicherheitsgründen. Die Funktion ist daher vor allem in kontrollierten, internen Umgebungen sinnvoll einsetzbar.
Ab PHP 8.1 ist der Typ des Parameters $ftp von resource auf FTP\Connection geändert worden.