Start · Sprachen · PHP · Referenz · ftp_exec

ftp_exec

Funktion

Sendet einen SITE EXEC-Befehl an den FTP-Server und fordert damit die serverseitige Ausführung eines Programms an.

seit PHP 4.0.3 Kategorie: io

Signatur

ftp_exec(FTP\Connection $ftp, string $command): bool

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

Typ
bool
Beschreibung
Gibt 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);
Befehl wurde vom Server akzeptiert.

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);
Der FTP-Server unterstützt SITE EXEC nicht oder der Befehl wurde verweigert.

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