Zum Inhalt springen

ftp_nb_fget()

Die PHP-Funktion ftp_nb_fget() verstehen

Die ftp\_nb\_fget()-Funktion ist eine integrierte PHP-Funktion, die eine Datei von einem FTP-Server abruft und sie im nicht-blockierenden Modus in eine lokale Datei schreibt. Dieser Artikel bietet einen umfassenden Leitfaden zur Verwendung in Ihren PHP-Projekten.

Was ist ftp_nb_fget()?

Die ftp\_nb\_fget()-Funktion ruft eine Remote-Datei ab und schreibt sie in einen lokalen Dateizeiger, ohne die Skriptausführung zu blockieren. Sie erfordert drei Parameter:

  1. ftp_stream: Die Verbindungs-ID, die von der Funktion ftp_connect() zurückgegeben wird.
  2. handle: Ein geöffneter Dateizeiger im lokalen Dateisystem.
  3. remote_file: Der Pfad zur Remote-Datei.

Die Funktion gibt eine der folgenden Konstanten zurück: FTP_FINISHED, wenn der Vorgang erfolgreich abgeschlossen wurde, FTP_MOREDATA, wenn sich der Transfer noch im Gange befindet, oder FTP_FAILED, wenn ein Fehler aufgetreten ist.

Syntax von ftp_nb_fget()

Die Syntax der ftp\_nb\_fget()-Funktion lautet wie folgt:

Syntax von ftp_nb_fget()

php
int ftp_nb_fget ( resource $ftp_stream , resource $handle , string $remote_file , int $mode [, int $resumepos = 0 ] )

Der Parameter ftp_stream ist die Verbindungs-ID, die von ftp_connect() zurückgegeben wird. Der Parameter handle ist ein geöffneter Dateizeiger. Der Parameter remote_file ist der Pfad zur Remote-Datei auf dem FTP-Server. Der Parameter mode gibt den Übertragungsmodus an, entweder FTP_ASCII oder FTP_BINARY. Der Parameter resumepos gibt die Position in der Remote-Datei an, ab der der Download fortgesetzt werden soll. Standardmäßig ist resumepos auf 0 gesetzt, was bedeutet, dass der Download am Anfang der Datei beginnt.

Verwendung von ftp_nb_fget()

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

Verwendung von ftp_nb_fget()

php
<?php

// Set up an FTP connection
$conn = ftp_connect('ftp.example.com');
ftp_login($conn, 'username', 'password');

// Open a file for writing
$handle = fopen('local_file.txt', 'w');

// Initiate an asynchronous FTP operation
$result = ftp_nb_fget($conn, $handle, 'remote_file.txt', FTP_BINARY);

// Continue the asynchronous FTP operation
while ($result === FTP_MOREDATA) {
    // Do something else while waiting for the FTP operation to complete
    $result = ftp_nb_continue($conn);
}

// Check final result
if ($result === FTP_FINISHED) {
    echo "Download completed successfully.";
} else {
    echo "Download failed.";
}

fclose($handle);
ftp_close($conn);
?>

In diesem Beispiel stellen wir eine Verbindung zum FTP-Server mit ftp_connect() her. Anschließend melden wir uns mit ftp_login() an. Wir öffnen eine Datei zum Schreiben mit fopen() und starten einen asynchronen FTP-Vorgang mit ftp_nb_fget(). Wir setzen den Vorgang mit ftp_nb_continue() innerhalb einer while-Schleife fort, die auf die Konstante FTP_MOREDATA prüft. Abschließend prüfen wir das Ergebnis und schließen die Datei sowie die FTP-Verbindung.

Fehlerbehandlung in ftp_nb_fget()

Es ist wichtig, Fehler bei der Verwendung der ftp\_nb\_fget()-Funktion ordnungsgemäß zu behandeln. Die Funktion und ftp_nb_continue() geben Zustandskonstanten und keine einfachen Booleschen Werte zurück. Hier ist ein Beispiel, wie Fehler behandelt und Übertragungszustände überprüft werden können:

Fehlerbehandlung in ftp_nb_fget()

php
<?php

// Assuming $conn is an established FTP connection
$handle = fopen('local_file.txt', 'w');
$result = ftp_nb_fget($conn, $handle, 'remote_file.txt', FTP_BINARY);

if ($result === FTP_FAILED) {
    echo "Failed to start download.\n";
} else {
    while ($result === FTP_MOREDATA) {
        $result = ftp_nb_continue($conn);
    }

    if ($result === FTP_FINISHED) {
        echo "Download completed successfully.\n";
    } else {
        echo "Download failed during transfer.\n";
    }
}

fclose($handle);
ftp_close($conn);
?>

Fazit:

Zusammenfassend ist die ftp\_nb\_fget()-Funktion ein nützliches Werkzeug zum Abrufen von Dateien von einem FTP-Server im nicht-blockierenden Modus. Sie ermöglicht es Ihnen, mit anderen Operationen fortzufahren, während Sie auf den Abschluss des FTP-Downloads warten. Durch das Verständnis der Funktionsweise können Sie Dateien effizient zwischen Ihrem lokalen Rechner und einem FTP-Server übertragen, was die Leistung und Produktivität Ihrer PHP-Projekte verbessert. Denken Sie daran, immer die Rückgabekonstanten (FTP_FINISHED, FTP_MOREDATA, FTP_FAILED) zu überprüfen, um den Erfolg Ihrer FTP-Operationen sicherzustellen.

Hinweis: Die FTP-Erweiterung gilt als veraltet. Für moderne Anwendungen sollten Sie SFTP (über ssh2 oder phpseclib) oder asynchrone HTTP-Clients für bessere Sicherheit und Leistung in Betracht ziehen.

Praxis

Was macht die PHP-Funktion FTP_NB_FGET?

Finden Sie das nützlich?

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