我正试图用ftp_nb_fput将文件上传到服务器,只是它从文件上传的字节数不超过4096,文件大约有700kb。
$connection_to = ftp_connect($host_to);
$ftp_to = ftp_login($connection_to, $user_to, $pass_to);
$fp = fopen($directory_to_move_files.$file_to_move, 'r');
ftp_nb_fput($connection_to, $file_to_move, $fp, FTP_ASCII);
ftp_close($connection_to);
我感兴趣的是使用这个函数,而不是file_put_contents或CURL。我没有犯任何错误。
使用ftp 中的ftp_nb_put函数时,需要考虑两件事
-
它是异步工作的,所以它使用块来工作,这意味着
ftp_nb_put($my_connection,"test.remote","test.local",ftp_BINARY);
只会导致上传一小段数据,并且从ftp_nb_put函数返回的标志FTP_MOREDATA
出现,因此要使用此命令完成上传,您需要迭代:
$ret = ftp_nb_put($my_connection, "test.remote", "test.local", FTP_BINARY);
while ($ret == FTP_MOREDATA) {
$ret = ftp_nb_continue($my_connection);
}
- 有以下指令需要考虑,以便您可以上传大尺寸的文件,这些指令位于
php.ini
中,不能从当前脚本中修改:
上载文件的最大允许大小。upload_max_filesize=XXM
必须大于或等于upload_max_filesizepost_max_size=XXM
其中XX是Mb的数目。不要忘记放M,在任何修改之后,都需要重新启动服务器。
如果您想一次传输整个文件,请使用ftp_put()
,而不是ftp_nb_fput()
。它会让你的代码变得简单一点:
$connection_to = ftp_connect($host_to);
$ftp_to = ftp_login($connection_to, $user_to, $pass_to);
$local_file = $directory_to_move_files . $file_to_move;
ftp_put($connection_to, $file_to_move, $local_file, FTP_BINARY);
ftp_close($connection_to);
附带说明:除非您绝对确定要传输的文件是纯文本,否则不要使用FTP_ASCII
。它将损坏二进制文件,包括图像。使用FTP_BINARY
总是安全的。