ftp_nb_get()
(PHP 4 >= 4.3.0, PHP 5, PHP 7)
从 FTP 服务器上获取文件并写入本地文件(non-blocking)
说明
ftp_nb_get(resource $ftp_stream,string $local_file,string $remote_file,int $mode[,int $resumepos]): bool
ftp_nb_get()函数用来获取参数$remote_file指定的的远程文件,并保存到由参数$local_file指定的本地文件。传输模式参数$mode只能为FTP_ASCII(文本模式)或FTP_BINARY(二进制模式)两种。与ftp_get()函数不同的是,此函数上传文件的时候采用的是异步传输模式,也就意味着在文件传送的过程中,你的程序可以继续干其它的事情。
返回FTP_FAILED,FTP_FINISHED或FTP_MOREDATA。
ftp_nb_get()实例
<?php
// 开始下载
$ret = ftp_nb_get($my_connection, "test", "README", FTP_BINARY);
while ($ret == FTP_MOREDATA) {
// 这里可以插入其它代码
echo ".";
// 继续下载...
$ret = ftp_nb_continue ($my_connection);
}
if ($ret != FTP_FINISHED) {
echo "下载中出错...";
exit(1);
}
?>
使用ftp_nb_get()函数断线续传
<?php
// 开始
$ret = ftp_nb_get ($my_connection, "test", "README", FTP_BINARY,
filesize("test"));
// 或: $ret = ftp_nb_get ($my_connection, "test", "README",
// FTP_BINARY, FTP_AUTORESUME);
while ($ret == FTP_MOREDATA) {
// 可以插入其它代码
echo ".";
// 继续传送...
$ret = ftp_nb_continue ($my_connection);
}
if ($ret != FTP_FINISHED) {
echo "下载出错...";
exit(1);
}
?>
用ftp_nb_get()在 100 的位置断线续传并存为"newfile"
// 禁止自动搜寻
ftp_set_option ($my_connection, FTP_AUTOSEEK, FALSE);
// 开始
$ret = ftp_nb_get ($my_connection, "newfile", "README", FTP_BINARY, 100);
while ($ret == FTP_MOREDATA) {
...
// 继续下载...
$ret = ftp_nb_continue ($my_connection);
}在上边的例子中,"newfile"文件比服务器上的文件"README"要小 100 字节。这是因为我们是从文件的偏移量 100 处开始读取的,如果没有禁止FTP_AUTOSEEK,则"newfile"的前 100 字节将会是'0'。
参见ftp_nb_fget(),ftp_nb_continue(),ftp_get()和ftp_fget()。
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.