【发布时间】:2010-01-19 07:03:09
【问题描述】:
我有一个 php 脚本,可以将文件从带宽非常低、连接可靠性低的位置上传到 ftp 服务器。我目前正在使用ftp functions of php。
有时连接会在传输过程中断开。有没有办法稍后恢复上传?如何做到这一点?
编辑: 人们误解了这是从浏览器中发生的。然而,这种情况并非如此。它是一个 php cli 脚本。所以它是关于一个本地文件被上传到 ftp,没有用户交互。
【问题讨论】:
我有一个 php 脚本,可以将文件从带宽非常低、连接可靠性低的位置上传到 ftp 服务器。我目前正在使用ftp functions of php。
有时连接会在传输过程中断开。有没有办法稍后恢复上传?如何做到这一点?
编辑: 人们误解了这是从浏览器中发生的。然而,这种情况并非如此。它是一个 php cli 脚本。所以它是关于一个本地文件被上传到 ftp,没有用户交互。
【问题讨论】:
尝试获取远程文件的大小,然后发出带有差异的 APPE ftp 命令。这将附加到文件中。有关示例,请参阅http://webmasterworld.com/forum88/4703.htm。如果你想真正控制它,我建议使用 PHP 的 cURL 函数。
【讨论】:
我认为之前的所有答案都是错误的。 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);
【讨论】:
ftp_set_option($ftp_connect,FTP_AUTORESUME,true)...?
ftp_(f)put 有一个 $startpos 参数。您应该能够使用此参数执行所需的操作。 (从您服务器上的文件大小开始传输)。
但是我从来没有使用过它,所以我不知道可靠性。你应该试试。
【讨论】:
编辑: Another Example: by 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);
?>
【讨论】:
ftp_set_option($ftp_connect,FTP_AUTORESUME,true)...?
ftp_set_option ($ftp_stream, FTP_AUTOSEEK, true);
FTP_AUTORESUME (integer) Automatically determine resume position and start position for GET and PUT requests (only works if FTP_AUTOSEEK is enabled)
您的意思是您将允许用户从您的网络界面上传简历吗? 这适合你吗? http://www.webmasterworld.com/php/3931706.htm
【讨论】:
只需使用 filezilla 就可以为您完成一切...我的意思是上传过程... 它将保留数据并在关闭后重新打开您将能够继续处理 q...
对于自动化和跟踪,只需使用我们的方式...即 git 和 capistrano php有一个选项 试试谷歌吧……
【讨论】: