Signatur
Beschreibung
ftp_pasv() aktiviert oder deaktiviert den passiven Modus für eine bestehende FTP-Verbindung. Im passiven Modus (PASV) baut der Client die Datenverbindung zum Server auf, anstatt – wie im aktiven Modus – auf eine eingehende Verbindung vom Server zu warten. Dies ist besonders nützlich, wenn der Client hinter einer Firewall oder einem NAT-Router sitzt, da keine eingehenden Verbindungen erlaubt werden müssen.
In modernen Netzwerkumgebungen (z. B. Shared Hosting, Docker-Container, Cloud-Instanzen) ist der passive Modus die Standardempfehlung, weil aktive FTP-Verbindungen häufig durch Firewalls blockiert werden. ftp_pasv() sollte unmittelbar nach dem erfolgreichen Login via ftp_login() aufgerufen werden, bevor Dateiübertragungen oder Verzeichnislisten angefordert werden.
Der passive Modus kann nicht auf einer SSL-FTP-Verbindung (ftp_ssl_connect()) in allen PHP-Versionen zuverlässig verwendet werden – hier empfiehlt sich ein Test unter der Zielumgebung. Außerdem muss ftp_pasv() nach jedem erneuten Login erneut gesetzt werden, da der Modus nicht persistent über Verbindungen hinweg gespeichert wird.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ftp Pflicht | FTP\Connection | Eine aktive FTP-Verbindungsressource, die zuvor mit ftp_connect() oder ftp_ssl_connect() erstellt wurde. |
|
| $enable Pflicht | bool | true, um den passiven Modus zu aktivieren; false, um ihn zu deaktivieren und zum aktiven Modus zurückzukehren. |
Rückgabewert
true zurück, wenn der Modus erfolgreich gesetzt wurde, andernfalls false.Beispiele
FTP-Verbindung mit passivem Modus und Dateilisting
<?php
$ftp = ftp_connect('ftp.example.com');
if ($ftp === false) {
die('Verbindung fehlgeschlagen.');
}
if (!ftp_login($ftp, 'benutzername', 'geheimesPasswort')) {
die('Login fehlgeschlagen.');
}
// Passiven Modus aktivieren (empfohlen hinter Firewalls/NAT)
if (!ftp_pasv($ftp, true)) {
die('Passiver Modus konnte nicht aktiviert werden.');
}
// Verzeichnisliste abrufen
$dateien = ftp_nlist($ftp, '.');
if ($dateien !== false) {
foreach ($dateien as $datei) {
echo $datei . PHP_EOL;
}
} else {
echo 'Verzeichnis konnte nicht gelesen werden.';
}
ftp_close($ftp);
?>
Datei-Upload mit passivem Modus
<?php
$ftp = ftp_connect('ftp.example.com');
ftp_login($ftp, 'benutzername', 'geheimesPasswort');
// Passiven Modus aktivieren
ftp_pasv($ftp, true);
$lokale_datei = '/tmp/bericht.pdf';
$remote_datei = '/public_html/bericht.pdf';
if (ftp_put($ftp, $remote_datei, $lokale_datei, FTP_BINARY)) {
echo 'Datei erfolgreich hochgeladen.';
} else {
echo 'Upload fehlgeschlagen.';
}
ftp_close($ftp);
?>
// Wichtig · Fallstricke
Reihenfolge beachten: ftp_pasv() muss nach ftp_login() aufgerufen werden, da einige Server den Modus beim Login zurücksetzen. Ein Aufruf vor dem Login hat keine Wirkung.
SSL-FTP: Bei Verbindungen über ftp_ssl_connect() kann der passive Modus je nach Server- und PHP-Konfiguration Probleme verursachen. In solchen Fällen bietet sich die Verwendung von curl mit FTPS-Unterstützung als robustere Alternative an.
PHP 8.1: Ab PHP 8.1 ist der Typ des $ftp-Parameters offiziell FTP\Connection (Objekt), nicht mehr die ältere resource-Schreibweise.