Note that you may have to keep calling ftp_nb_continue in order to complete the download. For example, if you do this:
<?php
ftp_nb_get($conn,$localfile,$remotefile,FTP_BINARY)
//do some LONG time work
while(ftp_nb_continue($conn)!=FTP_FINISHED){}
?>
Your local file may only contains a few kilobytes and the later ftp_nb_continue will keep raising warning of no more data (due to connection time out, I guess).
So you may want to do this instead:
<?php
$dl=ftp_nb_get($conn,$localfile,$remotefile,FTP_BINARY)
//part of long time work
if(ftp_nb_continue($conn)==FTP_MOREDATA) {}
//part of long time work
if(ftp_nb_continue($conn)==FTP_MOREDATA) {}
//continue to do this until you finish the long time work
while(ftp_nb_continue($conn)==FTP_MOREDATA){}
?>
This happened on my Windows XP + PHP 5.3.8 under CLI. Hope this helps someone.
ftp_nb_get
(PHP 4 >= 4.3.0, PHP 5)
ftp_nb_get — FTP sunucusundan (engellenmeyen kipte) bir dosya indirir
Açıklama
$ftp_akımı
, string $yerel_dosya
, string $uzak_dosya
, int $kip
[, int $devam_yeri = 0
] )
ftp_nb_get() işlevi FTP sunucusundan
uzak_dosya dosyasını alır, yerel dosya sistemine
yerel_dosya adıyla kaydeder.
Bu işlevin ftp_get() işlevinden farkı bu işlevin dosyayı eşzamansız olarak indirmesidir. Yani indirme işlemi sırasında başka işlemler yapabilirsiniz.
Değiştirgeler
-
ftp_akımı -
FTP bağlantısının bağlantı tanıtıcısı.
-
yerel_dosya -
Yerel dosyanın yolu (dosya varsa üzerine yazılır).
-
uzak_dosya -
Dosyanın FTP sunucusundaki yolu.
-
kip -
Aktarım kipi.
FTP_ASCIIveyaFTP_BINARYolabilir. -
devam_yeri
Dönen Değerler
FTP_FAILED veya FTP_FINISHED
ya da FTP_MOREDATA döner.
Örnekler
Örnek 1 - ftp_nb_get() örneği
<?php
// İndirmeyi başlatalım
$ret = ftp_nb_get($my_connection, "test", "README", FTP_BINARY);
while ($ret == FTP_MOREDATA) {
// Başka bir şeyler yapalım
echo ".";
// İndirmeye devam...
$ret = ftp_nb_continue($my_connection);
}
if ($ret != FTP_FINISHED) {
echo "Dosya indirilirken bir hata oluştu...";
exit(1);
}
?>
Örnek 2 - ftp_nb_get() ile indirmeyi devam ettirmek
<?php
// İndirmeyi tekrar başlatalım
$ret = ftp_nb_get($my_connection, "test", "README", FTP_BINARY,
filesize("test"));
// VEYA: $ret = ftp_nb_get($my_connection, "test", "README",
// FTP_BINARY, FTP_AUTORESUME);
while ($ret == FTP_MOREDATA) {
// Başka şeyler yapalım
echo ".";
// İndirmeye devam...
$ret = ftp_nb_continue($my_connection);
}
if ($ret != FTP_FINISHED) {
echo "Dosya indirilirken bir hata oluştu.....";
exit(1);
}
?>
Örnek 3 - ftp_nb_get() ile indirmeyi yeni bir dosyanın 100. baytından sürdürmek
<?php
// Özdevinimli konumlamayı kapatalım
ftp_set_option($my_connection, FTP_AUTOSEEK, false);
// İndirmeyi başlatalım
$ret = ftp_nb_get($my_connection, "yenidosya", "BENiOKU", FTP_BINARY, 100);
while ($ret == FTP_MOREDATA) {
/* ... */
// İndirmeye devam...
$ret = ftp_nb_continue($my_connection);
}
?>
Yukarıdaki örnekte, yenidosya, FTP sunucusundaki
BENiOKU dosyasından 100 bayt kısa olacaktır. Bunun
sebebi indirmenin 100. bayttan başlatılmış olmasıdır. Eğer
FTP_AUTOSEEK seçeneğine FALSE atamasaydık
yenidosya dosyasının ilk 100 baytı
'\0' karakterleriyle doldurulacaktı.
Ayrıca Bakınız
- ftp_nb_fget() - FTP sunucusundan dosyayı (engellenmeyen kipte) indirip bir dosya tanıtıcısına yazar
- ftp_nb_continue() - Dosya alımını/gönderimini (engellenmeyen kipte) kaldığı yerden devam ettirir
- ftp_fget() - FTP sunucusundan dosyayı indirip bir dosya tanıtıcısına yazar
- ftp_get() - FTP sunucusundan bir dosya indirir
