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 референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
ftp_nb_get
Референца за `function.ftp-nb-get.php` со подобрена типографија и навигација.
ftp_nb_get
(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
ftp_nb_get — Презема датотека од FTP серверот и ја запишува во локална датотека (неблокирачки)
= NULL
FTP\Connection
$ftp,string
$local_filename,string
$remote_filename,int
$mode = FTP_BINARY,int
$offset = 0): int|false
ftp_nb_get() презема оддалечена датотека од FTP серверот и ја зачувува во локална датотека.
Разликата помеѓу оваа функција и ftp_get() е што оваа функција ја презема датотеката асинхроно, така што вашата програма може да извршува други операции додека датотеката се презема.
Параметри
ftp-
Еден FTP\Connection instance.
local_filename-
Локалната патека на датотеката (ќе биде препишана ако датотеката веќе постои).
remote_filename-
ја зачувува локалната датотека на FTP-серверот.
mode-
Патеката до локалната датотека.
FTP_ASCIIorFTP_BINARY. offset-
Позицијата во оддалечената датотека од која ќе започне преземањето.
Вратени вредности
Патеката до PHP скриптата што треба да се провери. FTP_FAILED or FTP_FINISHED
or FTP_MOREDATA, или false при неуспех при отворање на локалната датотека.
Дневник на промени
| Верзија | = NULL |
|---|---|
| 8.1.0 |
На ftp параметарот очекува FTP\Connection
инстанца сега; претходно, а resource се очекуваше.
|
| 7.3.0 |
На mode Позицијата во далечинската датотека за почеток на поставувањето.
|
Примери
Пример #1 ftp_nb_get() example
<?php
// Initiate the download
$ret = ftp_nb_get($ftp, "test", "README", FTP_BINARY);
while ($ret == FTP_MOREDATA) {
// Do whatever you want
echo ".";
// Continue downloading...
$ret = ftp_nb_continue($ftp);
}
if ($ret != FTP_FINISHED) {
echo "There was an error downloading the file...";
exit(1);
}
?>Пример #2 Продолжување на преземање со ftp_nb_get()
<?php
// Initiate
$ret = ftp_nb_get($ftp, "test", "README", FTP_BINARY,
filesize("test"));
// OR: $ret = ftp_nb_get($ftp, "test", "README",
// FTP_BINARY, FTP_AUTORESUME);
while ($ret == FTP_MOREDATA) {
// Do whatever you want
echo ".";
// Continue downloading...
$ret = ftp_nb_continue($ftp);
}
if ($ret != FTP_FINISHED) {
echo "There was an error downloading the file...";
exit(1);
}
?>Пример #3 Продолжување на преземање од позиција 100 во нова датотека со ftp_nb_get()
<?php
// Disable Autoseek
ftp_set_option($ftp, FTP_AUTOSEEK, false);
// Initiate
$ret = ftp_nb_get($ftp, "newfile", "README", FTP_BINARY, 100);
while ($ret == FTP_MOREDATA) {
/* ... */
// Continue downloading...
$ret = ftp_nb_continue($ftp);
}
?>
Во горниот пример, newfile е 100 бајти помала од README на FTP серверот бидејќи започнавме со читање од поместување 100. Ако не го оневозможевме
FTP_AUTOSEEK, првите 100 бајти од
newfile ќе биде '\0'.
Види Исто така
- ftp_nb_fget() - Презема датотека од FTP серверот и ја запишува во отворена датотека (неблокирачки)
- ftp_nb_continue() - Продолжува со преземање/испраќање датотека (неблокирачки)
- ftp_fget() - Презема датотека од FTP серверот и ја зачувува во отворена датотека
- ftp_get() - Презема датотека од FTP серверот