我有一个php脚本,可以从带宽非常低,连接可靠性低的位置将文件上传到ftp服务器。我目前正在使用ftp functions of php。
有时连接会在传输过程中丢失。有没有办法稍后恢复上传?怎么办呢?
修改 人们误解了这是从浏览器发生的。然而,这种情况并非如此。这是一个php cli脚本。所以它是关于一个本地文件被上传到ftp,没有用户交互。
答案 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吧......