(PHP 4 >= 4.3.0, PHP 5)
ftp_nb_fget — Lädt eine Datei vom FTP-Server und schreibt sie in eine lokale Datei (nicht-blockierend)
ftp_nb_fget() lädt eine entfernte Datei von einem FTP-Server.
Der Unterschied zwischen dieser Funktion und ftp_fget() ist, dass diese Funktion die Datei asynchron überträgt, so dass Ihr Programm noch andere Operationen ausführen kann während die Datei gespeichert wird.
Der Verbindungshandler der FTP-Verbindung.
Ein geöffneter Dateizeiger, in dem die Daten gespeichert werden.
Der Pfad zur Datei auf dem Server.
Der Transfer-Modus. Muss entweder FTP_ASCII oder FTP_BINARY sein.
Gibt FTP_FAILED oder FTP_FINISHED oder FTP_MOREDATA zurück.
Beispiel #1 ftp_nb_fget()-Beispiel
<?php
// Öffne eine Datei zum Lesen
$file = 'index.php';
$fp = fopen($file, 'w');
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// Download initialisieren
$ret = ftp_nb_fget($conn_id, $fp, $file, FTP_BINARY);
while ($ret == FTP_MOREDATA) {
// Irgendwas machen
echo ".";
// Download forsetzen
$ret = ftp_nb_continue($conn_id);
}
if ($ret != FTP_FINISHED) {
echo "Es gab einen Fehler bei der Übertragung.";
exit(1);
}
// Dateizeiger schließen
fclose($fp);
?>
If you want to monitor the progress of the download, you may use the filesize()-Function.
But note: The results of said function are cached, so you'll always get 0 bytes. Call clearstatcache() before calling filesize() to determine the actual size of the downloaded file.
This may have performance implications, but if you want to provide the information, there's no way around it.
Above sample extended:
<?php
// get the size of the remote file
$fs = ftp_size($my_connection, "test");
// Initate the download
$ret = ftp_nb_get($my_connection, "test", "README", FTP_BINARY);
while ($ret == FTP_MOREDATA) {
clearstatcache(); // <- this is important
$dld = filesize($locfile);
if ( $dld > 0 ){
// calculate percentage
$i = ($dld/$fs)*100;
printf("\r\t%d%% downloaded", $i);
}
// Continue downloading...
$ret = ftp_nb_continue ($my_connection);
}
if ($ret != FTP_FINISHED) {
echo "There was an error downloading the file...";
exit(1);
}
?>
Philip