Zum Inhalt springen

ftp_exec()

Die PHP-Funktion ftp_exec() verstehen

Dieses Tutorial erklärt die historische Funktion ftp_exec(), warum sie entfernt wurde und wie Sie in modernem PHP Remote-Befehle sicher ausführen können.

Was ist ftp_exec()?

Die Funktion ftp_exec() war eine integrierte PHP-Funktion, mit der Sie einen Befehl auf einem entfernten FTP-Server ausführen konnten. Sie benötigte zuvor zwei Parameter:

  1. ftp_stream: Die Verbindungs-ID, die von der Funktion ftp_connect() zurückgegeben wird.
  2. command: Der Befehl, den Sie auf dem FTP-Server ausführen möchten.

Die Funktion gab einen booleschen Wert zurück. Wenn die Ausführung des Befehls erfolgreich war, gab sie true zurück. Andernfalls gab sie false zurück.

Wichtig: ftp_exec() setzte voraus, dass der FTP-Server den Befehl SITE EXECUTE unterstützt. Aufgrund schwerwiegender Sicherheitsrisiken war diese Funktion auf den meisten modernen FTP-Servern (wie vsftpd und ProFTPD) standardmäßig deaktiviert. Noch wichtiger ist, dass ftp_exec() in PHP 5.3.0 als veraltet markiert und in PHP 7.0.0 entfernt wurde, wodurch sie in modernen PHP-Versionen vollständig nicht mehr verfügbar ist.

Syntax von ftp_exec()

Die historische Syntax der Funktion ftp_exec() lautete wie folgt:

Syntax von ftp_exec()

php
bool ftp_exec ( resource $ftp_stream , string $command )

(Hinweis: Diese Funktion akzeptierte historisch eine resource-Verbindungs-ID. Die OOP-Klasse FTP\Connection wurde in PHP 8.0 eingeführt, nachdem ftp_exec() bereits entfernt worden war.)

Sichere Ausführung von Remote-Befehlen

Da ftp_exec() entfernt wurde und FTP keine sichere Befehlsausführung bietet, sollten Sie stattdessen SSH-basierte Bibliotheken verwenden. Die Erweiterung ssh2 oder phpseclib sind die Standardlösungen für modernes PHP.

Verwendung mit der ssh2-Erweiterung

php
<?php

// Set up an SSH connection
$conn = ssh2_connect('ftp.example.com', 22);
if (!$conn) {
    die("Could not connect to server.");
}

// Login with SSH credentials
if (!ssh2_auth_password($conn, 'username', 'password')) {
    die("SSH login failed.");
}

// Execute a command
$stream = ssh2_exec($conn, 'ls -al');
if ($stream === false) {
    die("Failed to execute command.");
}

// Read output
$output = stream_get_contents($stream);

// Close the connection
ssh2_disconnect($conn);

In diesem Beispiel stellen wir eine SSH-Verbindung mit der Funktion ssh2_connect() her. Anschließend authentifizieren wir uns mit ssh2_auth_password(). Schließlich führen wir einen Befehl mit ssh2_exec() aus und schließen die Verbindung mit ssh2_disconnect().

Fehlerbehandlung bei der modernen Remote-Ausführung

Es ist wichtig, Fehler bei der Ausführung von Remote-Befehlen ordnungsgemäß zu behandeln. Wenn die Funktion false zurückgibt, bedeutet dies, dass der Befehl aus irgendeinem Grund nicht ausgeführt werden konnte. Hier ist ein Beispiel, wie Fehler behandelt werden können:

Fehlerbehandlung in ssh2_exec()

php
<?php

$stream = ssh2_exec($conn, 'ls -al');
if ($stream === false) {
    echo "Failed to execute the command.\n";
} else {
    echo "Command executed successfully.\n";
}

In diesem Beispiel prüfen wir den Rückgabewert der Funktion ssh2_exec(). Falls er false ist, wird eine Fehlermeldung angezeigt; andernfalls eine Erfolgsmeldung.

Fazit

Die Funktion ftp_exec() wurde in PHP 5.3.0 als veraltet markiert und in PHP 7.0.0 aufgrund von Sicherheitslücken und der fehlenden sicheren Befehlsausführung über FTP entfernt. Für die Remote-Befehlsausführung in modernem PHP sollten Sie immer SSH-basierte Lösungen wie die Erweiterung ssh2 oder phpseclib verwenden.

Practice

Was ist der Zweck des FTP-Exec-Befehls in PHP?

Finden Sie das nützlich?

Dual-run-Vorschau — vergleichen Sie mit den Symfony-Routen live.