ConFoo 2025

ftp_nb_get

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

ftp_nb_getFTP sunucusundan (engellenmeyen kipte) bir dosya indirir

Açıklama

ftp_nb_get(
    FTP\Connection $ftp,
    string $yerel_dosya,
    string $uzak_dosya,
    int $kip = FTP_BINARY,
    int $devam_yeri = 0
): int|false

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.

Bağımsız Değişkenler

ftp

Bir FTP\Connection nesnesi.

yerel_dosya

Yerel dosyanın yolu (dosya varsa üzerine yazılır).

uzak_dosya

Dosyanın FTP sunucusundaki yolu.

kip

Aktarım kipi. FTP_ASCII veya FTP_BINARY olabilir.

devam_yeri

Uzak dosyada indirmenin başlayacağı konum.

Sürüm Bilgisi

Sürüm: Açıklama
8.1.0 ftp bağımsız değişkeni artık FTP\Connection nesnesi kabul ediyor; evvelce ftp özkaynağı kabul ediyordu.
7.3.0 kip bağımsız değişkeni artık seçimlik, evvelce zorunluydu.

Dönen Değerler

FTP_FAILED veya FTP_FINISHED ya da FTP_MOREDATA veya yerel_dosya açılamazsa false döner.

Örnekler

Örnek 1 - ftp_nb_get() örneği

<?php

// İndirmeyi başlatalım
$ret = ftp_nb_get($ftp, "test", "README", FTP_BINARY);
while (
$ret == FTP_MOREDATA) {

// Başka bir şeyler yapalım
echo ".";

// İndirmeye devam...
$ret = ftp_nb_continue($ftp);
}
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($ftp, "test", "README", FTP_BINARY,
filesize("test"));
// VEYA: $ret = ftp_nb_get($ftp, "test", "README",
// FTP_BINARY, FTP_AUTORESUME);
while ($ret == FTP_MOREDATA) {

// Başka şeyler yapalım
echo ".";

// İndirmeye devam...
$ret = ftp_nb_continue($ftp);
}
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

// otomatik konumlamayı kapatalım
ftp_set_option($ftp, FTP_AUTOSEEK, false);

// İndirmeyi başlatalım
$ret = ftp_nb_get($ftp, "yenidosya", "BENiOKU", FTP_BINARY, 100);
while (
$ret == FTP_MOREDATA) {

/* ... */

// İndirmeye devam...
$ret = ftp_nb_continue($ftp);
}
?>

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

add a note

User Contributed Notes 1 note

up
-1
passerbyxp at gmail dot com
12 years ago
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.
To Top