ftp_nb_fput传输不超过4096个字节

时间:2015-02-07 16:21:02

标签: php

我正在尝试使用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。 我没有错误。

2 个答案:

答案 0 :(得分:2)

使用ftp中的ftp_nb_put函数时需要考虑两件事

  1. 它以异步方式工作,因此它使用块来工作,这意味着

    ftp_nb_put($ my_connection,“test.remote”,“test.local”,FTP_BINARY);

  2. 只会导致上传一小块数据并且从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);
    }
    
    1. 需要考虑以下指令,以便您可以上传大小的文件,此指令位于php.ini,无法从当前脚本进行修改:
    2. 上传文件的最大允许大小。 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始终是安全的。