W3docs

ftp_fput()

Die Funktion ftp_fput() ist eine eingebaute PHP-Funktion, die eine Datei auf den FTP-Server hochlädt. Sie nimmt fünf Parameter entgegen.

Was ist ftp_fput()?

Die Funktion ftp_fput() ist eine eingebaute PHP-Funktion, die eine Datei auf den FTP-Server hochlädt. Die Funktion nimmt fünf Parameter entgegen:

  1. ftp_stream: Der von der Funktion ftp_connect() zurückgegebene Verbindungsidentifikator.
  2. remote_file: Der Name der Remote-Datei, in die die Datei hochgeladen werden soll.
  3. local_file: Ein mit fopen() geöffnetes Datei-Handle, das auf die hochzuladende lokale Datei zeigt.
  4. mode (optional): Der Übertragungsmodus (FTP_ASCII oder FTP_BINARY). Standardmäßig FTP_ASCII.
  5. startpos (optional): Die Startposition in der Remote-Datei für den Upload. Standardmäßig 0.

Die Funktion gibt einen boolean-Wert zurück. Wenn die Datei erfolgreich hochgeladen wurde, gibt sie true zurück. Andernfalls gibt sie false zurück.

Wann ftp_fput() statt ftp_put() verwenden

ftp_put() nimmt einen lokalen Datei-Pfad als string und öffnet die Datei für Sie. ftp_fput() nimmt stattdessen ein bereits geöffnetes Datei-Handle. Verwenden Sie ftp_fput() in folgenden Fällen:

  • Die Daten, die Sie hochladen möchten, sind keine einfache Datei auf der Festplatte — zum Beispiel ein temporärer Stream, der mit php://temp erstellt wurde, oder die Ausgabe einer anderen Ressource, die Sie bereits geöffnet haben.
  • Sie benötigen eine genaue Kontrolle über die Leseposition (in Kombination mit dem Parameter startpos können Sie einen unterbrochenen Upload fortsetzen).
  • Sie haben das Handle bereits aus einem anderen Grund geöffnet und möchten vermeiden, dieselbe Datei zweimal zu öffnen.

Wenn Sie einfach eine vorhandene Datei anhand ihres Namens hochladen möchten, ist ftp_put() einfacher. Für nicht-blockierende (asynchrone) Uploads siehe ftp_nb_fput().

Syntax von ftp_fput()

Die Syntax der Funktion ftp_fput() lautet wie folgt:

Syntax von ftp_fput()

bool ftp_fput ( resource $ftp_stream , string $remote_file , resource $local_file [, int $mode = FTP_ASCII [, int $startpos = 0 ]] )

Verwendung von ftp_fput()

Um die Funktion ftp_fput() zu verwenden, müssen Sie zunächst eine Verbindung zum FTP-Server mithilfe der Funktion ftp_connect() herstellen. Hier ist ein Beispiel:

Verwendung von ftp_fput() in PHP

<?php

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

// Login with your FTP credentials
if (!ftp_login($conn, 'username', 'password')) {
    die("Login failed.");
}

// Open the local file
$local_file = fopen('/local/directory/local_file.txt', 'r');
if (!$local_file) {
    die("Could not open local file.");
}

// Upload the file to the remote FTP server
if (ftp_fput($conn, 'remote_file.txt', $local_file, FTP_ASCII)) {
    echo "File uploaded successfully.\n";
} else {
    echo "Failed to upload the file.\n";
}

// Close the file handle and FTP connection
fclose($local_file);
ftp_close($conn);

In diesem Beispiel stellen wir eine Verbindung zum FTP-Server mithilfe der Funktion ftp_connect() her und überprüfen, ob sie erfolgreich war. Dann melden wir uns mit unseren FTP-Anmeldedaten über ftp_login() an und prüfen auf Fehler. Anschließend öffnen wir die lokale Datei mit fopen(), um das erforderliche Datei-Handle zu erhalten. Schließlich laden wir die Datei mit ftp_fput() auf den Remote-FTP-Server hoch und schließen sowohl das Datei-Handle als auch die FTP-Verbindung mit ftp_close().

Den Übertragungsmodus wählen: FTP_ASCII vs FTP_BINARY

Der Parameter mode steuert, wie Bytes übertragen werden, und ist wichtiger als es zunächst erscheint:

  • FTP_BINARY überträgt die Datei Byte für Byte, unverändert. Verwenden Sie ihn für Bilder, Archive, ausführbare Dateien, PDFs — alles, was kein reiner Text ist. Dies ist der sichere Standardwert für fast alles.
  • FTP_ASCII übersetzt Zeilenenden zwischen den lokalen und Remote-Plattformen (z. B. \n\r\n). Er eignet sich nur für reine Textdateien; bei Binärdaten beschädigt er die Datei stillschweigend.

Wenn Sie das lokale Handle öffnen, passen Sie den fopen()-Modus an die Übertragung an: Verwenden Sie 'rb' (binär lesen) zusammen mit FTP_BINARY, damit PHP die Bytes auf dem Weg nicht verändert:

<?php

$local_file = fopen('/local/directory/photo.jpg', 'rb');
ftp_fput($conn, 'photo.jpg', $local_file, FTP_BINARY);
fclose($local_file);

Fehlerbehandlung in ftp_fput()

Es ist wichtig, Fehler bei der Verwendung der Funktion ftp_fput() ordnungsgemäß zu behandeln. Wenn die Funktion false zurückgibt, bedeutet das, dass die Datei aus einem bestimmten Grund nicht hochgeladen werden konnte. Hier ist ein Beispiel für die Fehlerbehandlung:

Fehlerbehandlung in ftp_fput()

<?php

// Assuming $conn is already established via ftp_connect() and ftp_login()
$local_file = fopen('/local/directory/local_file.txt', 'rb');

if ($local_file === false) {
    echo "Could not open the local file.\n";
} elseif (ftp_fput($conn, 'remote_file.txt', $local_file, FTP_BINARY)) {
    echo "File uploaded successfully.\n";
    fclose($local_file);
} else {
    echo "Failed to upload the file.\n";
    fclose($local_file);
}

Beachten Sie die Reihenfolge der Überprüfungen: Wir bestätigen zunächst, dass fopen() ein gültiges Handle zurückgegeben hat, und rufen dann ftp_fput() auf. Das Aufrufen von fclose() mit einem false-Handle (was passiert, wenn das ursprüngliche Beispiel die Öffnungsprüfung überspringt) gibt eine Warnung aus. Daher schließen wir das Handle nur in den Zweigen, in denen es tatsächlich geöffnet wurde. Dadurch wird verhindert, dass die Erfolgsmeldung ausgegeben wird, wenn der Upload nicht stattgefunden hat.

Häufige Fehler

  • Einen Pfad statt eines Handles übergeben. ftp_fput() erwartet die von fopen() zurückgegebene Ressource, keine Dateinamen-string. Wenn Sie einen Pfad haben, verwenden Sie stattdessen ftp_put().
  • Falscher Übertragungsmodus. Das Hochladen einer Binärdatei mit FTP_ASCII beschädigt sie. Im Zweifelsfall verwenden Sie FTP_BINARY.
  • Handle nicht schließen. Rufen Sie nach Abschluss der Übertragung immer fclose() auf, um die Ressource freizugeben.
  • Passivmodus. Hinter einer Firewall benötigen viele Server den Passivmodus. Rufen Sie ftp_pasv($conn, true) nach dem Anmelden auf, wenn Uploads hängen bleiben.

Fazit

Die Funktion ftp_fput() lädt eine Datei von einem geöffneten Datei-Handle auf einen FTP-Server hoch und ist die richtige Wahl, wenn Ihre Daten bereits in einem Stream vorliegen und keinen festen Pfad auf der Festplatte haben. Verwenden Sie den richtigen Übertragungsmodus, überprüfen Sie sowohl den Rückgabewert von fopen() als auch von ftp_fput(), schließen Sie Ihre Handles — und die Funktion wird zuverlässig in Ihren PHP-Projekten funktionieren.

Übungen

Übung
Was macht die fput-Funktion in PHP?
Was macht die fput-Funktion in PHP?
Was this page helpful?