Start · Sprachen · PHP · Referenz · ftp_pasv

ftp_pasv

Funktion

Schaltet den passiven Modus für eine FTP-Verbindung ein oder aus.

seit PHP 4.0.0 Kategorie: io

Signatur

ftp_pasv(FTP\Connection $ftp, bool $enable): bool

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

Typ
bool
Beschreibung
Gibt 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);
?>
datei1.txt datei2.csv bilder/

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);
?>
Datei erfolgreich hochgeladen.

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