PHP Conference Japan 2024

ftp_nb_fput

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

ftp_nb_fput将文件从打开的文件存储到 FTP 服务器(非阻塞)

描述

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

ftp_nb_fput() 将数据从文件指针上传到 FTP 服务器上的远程文件。

此函数与 ftp_fput() 的区别在于,此函数异步上传文件,因此您的程序可以在文件上传时执行其他操作。

参数

ftp

一个 FTP\Connection 实例。

remote_filename

远程文件路径。

stream

本地文件的打开文件指针。读取在文件末尾停止。

mode

传输模式。必须是 FTP_ASCIIFTP_BINARY

offset

开始上传到的远程文件中的位置。

返回值

返回 FTP_FAILEDFTP_FINISHEDFTP_MOREDATA

变更日志

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

示例

示例 #1 ftp_nb_fput() 示例

<?php

$file
= 'index.php';

$fp = fopen($file, 'r');

$ftp = ftp_connect($ftp_server);

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

// 初始化上传
$ret = ftp_nb_fput($ftp, $file, $fp, FTP_BINARY);
while (
$ret == FTP_MOREDATA) {

// 做任何你想做的事情
echo ".";

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

fclose($fp);
?>

参见

添加注释

用户贡献注释 2 条注释

jascha at bluestatedigital dot com
19 年前
有一种简单的方法可以检查上传文件时的进度。只需使用 ftell 函数来监视文件句柄中的位置。ftp_nb_fput 会随着文件的传输增加位置。

示例

<?

$fh = fopen ($file_name, "r");
$ret = ftp_nb_fput ($ftp, $file_name, $fh, FTP_BINARY);
while ($ret == FTP_MOREDATA) {
print ftell ($fh)."\n";
$ret = ftp_nb_continue($ftp);
}
if ($ret != FTP_FINISHED) {
print ("上传错误\n");
exit(1);
}
fclose($fh);

?>

这将打印出到目前为止传输的字节数,每次循环运行时都会打印。将其转换为百分比只是将传输的字节数除以文件的总大小的问题。
marcopardo at gmx dot de
4 年前
FTP_FAILED = 0
FTP_FINISHED = 1
FTP_MOREDATA = 2
To Top