PHP FTP üzerinden bir dosya parçasını indirmek için nasıl?

2 Cevap php

Ben bir FTP sunucusunda dosyaların parçaları indirmek istiyoruz. Ben bu çözümü var:

  $opts = array('ftp'=>array('overwrite'=>false, 'resume_pos'=> 5*16+12));      
  $context = stream_context_create($opts);

  $version = file_get_contents
    (
     'ftp://'.$ftpAccount["username"].':'.$ftpAccount["password"].'@'.$ftpAccount["server"].'/firm/'.$file, FILE_BINARY, $context, -1, 20
    );

Her dosya için yeni bir bağlantı açar, çünkü bu çözüm sevmiyorum. Herkes daha iyi bir çözüm (etkin bir) biliyor mu?

Teşekkür ederiz!

2 Cevap

Heres a similar question asked of the curl library. http://curl.haxx.se/mail/lib-2005-01/0176.html

Eğer http aksine, ftp ile bağlantılarını yeniden olamaz gibi görünüyor.

Kendimi bu sorun için bir çözüm ararken ben, bu sayfada geldi. Ben bir şey buldum, ben kendim kadar şey yaptı.

Güzel çözüm olabilir, ama bu benim için çalıştı değil:

Bu 512000 bayt parçalarını içinde uzak dosyayı indirir. Tüm parçalarını indirilen zaman, yerel dosyayı koyar ve parçaları kaldırır. Her zaman yerel dosyayı (aslında kendisine parçalarını yazmaya başlamadan önce yerel dosyayı siler) üzerine yazar.

Ben bu kimse yardımcı olur umarım.

Ben temiz ben uzaktan dosya boyutunu belirlemek için de kıvırın kullanabilirsiniz yapmaya istekli olsaydı sanırım. Ama 'kanal bant-programcı' daha fazla duyuyorum. Bu şekilde çalışır ve bu :-) benim için bütün mesele bu

$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";