當我自己尋找這個問題的解決方案時,我遇到了這個頁面。我什麼也沒找到,所以我自己創造了一些東西。
可能不是最漂亮的解決方案,但這個工作對我來說:
它下載在512000個字節的塊遠程文件。當所有的塊被下載時,它將放在一起的本地文件並刪除塊。它總是覆蓋本地文件(實際上它在開始將塊寫入它之前會刪除本地文件)。
我希望這可以幫助別人。
我想如果我願意讓它更乾淨我也可以使用curl來確定遠程文件的大小。但我更像是'管道磁帶程序員'。它以這種方式工作,這對我來說很重要:-)
$server = '...'; //for example ftp.testftp.nl
$full_remoteURI = '...'; // for example ftp://ftp.testftp.nl/exports/dump.xml
$username = '...';
$passwrd = '...';
$remote_ftp_path = '...'; // for exmple /exports
$remote_filename = '...';
$local_filename = '...';
$ftpconnect = ftp_connect($server);
if($ftpconnect) $login = ftp_login($ftpconnect, $username, $passwrd);
else print "<p>FTP verbinding mislukt.</p>\n";
if($login) {
ftp_chdir($ftpconnect, $remote_ftp_path);
$fsize = ftp_size($ftpconnect, $remote_filename);
if(isset($_GET['f'])) $f = $_GET['f'];
else $f = 0;
if($f > 0) $start = ($f * 512001);
else $start = 0;
if($start < $fsize) {
$curl = curl_init();
$file = fopen($local_filename . $f, 'w');
curl_setopt($curl, CURLOPT_URL, $full_remoteURI); #input
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FILE, $file); #output
curl_setopt($curl, CURLOPT_RANGE, $start . "-" . ($start + 512000));
curl_setopt($curl, CURLOPT_USERPWD, $username . ":" . $passwrd);
curl_exec($curl);
$voltooid = number_format(100 * $start/$fsize, 0, '','');
print "<p>XML bestanden downloaden $voltooid %.</p>
<script type=\"text/javascript\">
<!--
document.onload = top.location = 'sync.php?f=" . ($f + 1) . "';
-->
</script>\n";
}
else {
$del = unlink($local_filename);
if(!$del) print "<p>Oude bestand verwijderen mislukt!</p>\n";
$fh = fopen($local_filename, 'w');
for($i = 0; $i < $f; $i++) {
$data = file_get_contents($local_filename . $i);
fwrite($fh, $data);
unlink($local_filename . $i);
}
fclose($fh);
print "<p>Downloaden voltooid.</p>\n";
}
}
else print "<p>Login failed</p>\n";