如何从php恢复上传到ftp

时间:2010-01-19 07:03:09

标签: php ftp

我有一个php脚本,可以从带宽非常低,连接可靠性低的位置将文件上传到ftp服务器。我目前正在使用ftp functions of php

有时连接会在传输过程中丢失。有没有办法稍后恢复上传?怎么办呢?

修改 人们误解了这是从浏览器发生的。然而,这种情况并非如此。这是一个php cli脚本。所以它是关于一个本地文件被上传到ftp,没有用户交互。

6 个答案:

答案 0 :(得分:2)

尝试获取远程文件的大小,然后发出带差异的APPE ftp命令。这将附加到该文件。有关示例,请参阅http://webmasterworld.com/forum88/4703.htm。如果你想真正控制它,我建议使用PHP的cURL函数。

答案 1 :(得分:1)

我认为之前的所有答案都是错误的。 PHP管理简历,因为必须激活FTP_AUTODESK,并且您必须在上载期间激活FTP_AUTORESUME。代码应该是这样的:

$ftp_connect = ftp_connect($host, $port);
ftp_set_option ($ftp_connect, FTP_AUTOSEEK, TRUE);
$stream = fopen($local_file, 'r');
$upload = ftp_fput($ftp_connect, $file_on_ftp, $stream, FTP_BINARY, FTP_AUTORESUME);
fclose($stream);

答案 2 :(得分:0)

ftp_(f)put有一个$ startpos参数。您应该能够使用此参数执行所需操作。 (从服务器上的文件大小开始传输)。 但是我从来没用过它,所以我不知道它的可靠性。你应该试试。

答案 3 :(得分:0)

编辑: Another Example:来自cballou

Look here。一个非常简单而好的例子。

你可以这样做:

<?php
     $host = 'your.host.name';
     $user = 'user';
     $passwd = 'yourpasswd';


     $ftp_stream = ftp_connect($host);
     //EDIT
     ftp_set_option($ftp_stream, FTP_AUTOSEEK, 1);
     if ( ftp_login($ftp_stream,$user,$passwd) ){
        //activate passive mode
        //ftp_pasv($ftp_stream, TRUE);

        $ret = ftp_nb_put($ftp_stream, $remotefile, $localfile, FTP_BINARY,FTP_AUTORESUME);
        while ( FTP_MOREDATA == $ret ) {
            // continue transfer
            $ret = ftp_nb_continue($ftp_stream);
        }

        if (FTP_FINISHED !== $ret){
           echo 'Failure occured on transfer ...';
        } 
     }
     else {
         print "FAILURE while login ...";

     }

     //free
     ftp_close($ftp_stream);
?>

答案 4 :(得分:-1)

您是否意味着您将允许用户从您的网络界面继续上传? 这适合你吗? http://www.webmasterworld.com/php/3931706.htm

答案 5 :(得分:-2)

只需使用filezilla即可为您完成一切......我的意思是上传过程...... 它将保留数据并在关闭后重新打开,您将能够继续处理q ...

用于自动化和跟踪,只需使用我们的方式......这是git和capistrano php有一个选项 试试google吧......