ftp_nb_fget

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

ftp_nb_fget从 FTP 服务器检索文件并将其写入打开的文件(非阻塞)

描述

ftp_nb_fget(
    FTP\Connection $ftp,
    资源 $stream,
    字符串 $remote_filename,
    整数 $mode = FTP_BINARY,
    整数 $offset = 0
): 整数

ftp_nb_fget() 从 FTP 服务器检索远程文件。

此函数与 ftp_fget() 的区别在于,此函数异步检索文件,因此您的程序可以在下载文件时执行其他操作。

参数

ftp

一个 FTP\Connection 实例。

stream

一个用于存储数据的打开的文件指针。

remote_filename

远程文件路径。

mode

传输模式。必须是 FTP_ASCIIFTP_BINARY

offset

远程文件中开始下载的位置。

返回值

返回 FTP_FAILEDFTP_FINISHEDFTP_MOREDATA

变更日志

版本 描述
8.1.0 ftp 参数现在需要一个 FTP\Connection 实例;以前,需要一个 资源
7.3.0 mode 参数现在是可选的。以前它是强制性的。

范例

范例 #1 ftp_nb_fget() 例子

<?php

// 打开一些文件以供读取
$file = 'index.php';
$fp = fopen($file, 'w');

$ftp = ftp_connect($ftp_server);

$login_result = ftp_login($ftp, $ftp_user_name, $ftp_user_pass);

// 初始化下载
$ret = ftp_nb_fget($ftp, $fp, $file, FTP_BINARY);
while (
$ret == FTP_MOREDATA) {

// 做任何你想要做的
echo ".";

// 继续下载...
$ret = ftp_nb_continue($ftp);
}
if (
$ret != FTP_FINISHED) {
echo
"下载文件时出现错误...";
exit(
1);
}

// 关闭文件指针
fclose($fp);
?>

参见

  • ftp_nb_get() - 从 FTP 服务器检索文件并将其写入本地文件(非阻塞)
  • ftp_nb_continue() - 继续检索/发送文件(非阻塞)
  • ftp_fget() - 从 FTP 服务器下载文件并保存到打开的文件中
  • ftp_get() - 从 FTP 服务器下载文件

添加备注

用户贡献备注 1 个备注

6
pilif at pilif dot ch
19 年前
如果您想监控下载进度,可以使用 filesize() 函数。

但请注意:该函数的结果会被缓存,因此您始终会得到 0 字节。在调用 filesize() 之前调用 clearstatcache() 以确定下载文件的实际大小。

这可能会影响性能,但如果您想提供信息,就无法避免。

上面的示例扩展

<?php
// 获取远程文件的大小
$fs = ftp_size($my_connection, "test");

// 初始化下载
$ret = ftp_nb_get($my_connection, "test", "README", FTP_BINARY);
while (
$ret == FTP_MOREDATA) {

clearstatcache(); // <- 这很重要
$dld = filesize($locfile);
if (
$dld > 0 ){
// 计算百分比
$i = ($dld/$fs)*100;
printf("\r\t%d%% 已下载", $i);
}

// 继续下载...
$ret = ftp_nb_continue ($my_connection);
}
if (
$ret != FTP_FINISHED) {
echo
"下载文件时出现错误...";
exit(
1);
}
?>

Philip
To Top