我正在尝试使用ftp_nb_fput将文件上传到服务器,只是它没有从文件上传超过4096个字节,文件大约有700 kb。
$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。 我没有错误。
答案 0 :(得分:2)
使用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_filesize post_max_size = XXM
其中XX是Mb的数量。不要忘了把M, 在任何修改之后,重启服务器是必要的。
答案 1 :(得分:1)
如果您想一次传输整个文件,请使用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
始终是安全的。