Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

WebFTP downloaden

_arno_
3 antwoorden
  • Hallo heren,
    Ik ben bezig met een webftp programmatje te schrijven, tot nu toe heb ik geen grote problemen ondervonden.
    Helaas zit ik met een klein dingetje wat me extreem irriteert.

    Het browsen van directorys en files gaat prima, maar nu wil ik dat een file gedownload gaat worden.

    Nu heb ik verschillende opties:
    [quote:caa82ba050]
    ftp_nb_fget – Ontvangt een bestand van de FTP server en schrijft het naar een open bestand (non-blocking)
    ftp_nb_get – Ontvangt een bestand van de FTP server en schrijft het naar een lokaal bestand (non-blocking)
    ftp_fget – Download een bestand van de FTP server en slaat hem op naar een open bestands pointer
    ftp_get – Download een bestand van de FTP server
    [/quote:caa82ba050]

    Feit is dat de file eerst gedownload moet worden naar de lokale server ( waar webftp draait ) en dan pas naar de client gestuurd kan worden.
    Na wat dingetjes geprobeert te hebben blijkt dus dat de execution time erg lang kan duren voordat je de eigenlijke file gestuurd krijgt.

    Wat wil ik bereiken, op het moment dat de webserver begint met het downloaden van het bestand.
    Wil ik dat de user meteen de data binnen krijgt, dus dat eigenlijk de webserver de data die hij verkrijgt meteen doorsluist.

    Het lijkt mij dat ik dit kan realizeren met 1 van de nonblocking opties?!
    Helaas weet ik niet heel goed hoe ik moet beginnen, dus we pakken even voorbeeld van php.net eruit:
    [code:1:caa82ba050]
    $ret = ftp_nb_get($my_connection, "test", "README", FTP_BINARY);
    while ($ret == FTP_MOREDATA) {

    // Doe wat je ook maar wil
    echo ".";

    // Ga door met downloaden…
    $ret = ftp_nb_continue ($my_connection);
    }
    if ($ret != FTP_FINISHED) {
    echo "Er was een fout met het downloaden van het bestand…";
    exit(1);
    }
    [/code:1:caa82ba050]
    Dus op het moment van de eerste '.' moet de download gestart worden en door blijven gaan tot alle data binnen is.
    [code:1:caa82ba050]
    $i = 0;
    $ret = ftp_nb_get($my_connection, "test", "README", FTP_BINARY);
    while ($ret == FTP_MOREDATA) {

    // Doe wat je ook maar wil
    if ( $i === 0 ) {
    $i = 1;
    Start downloading?!
    }

    // Ga door met downloaden…
    $ret = ftp_nb_continue ($my_connection);
    }
    if ($ret != FTP_FINISHED) {
    Stop Downloading?!?!
    }
    [/code:1:caa82ba050]

    Mijn vraag is dus eigenlijk, hoe kan ik het starten en stoppen van de download realizeren.

    Groeten,
    Arno
  • Updateje,
    Het downloaden kan ik starten met :

    [code:1:e1633d2772]
    header("Pragma: public"); // required
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private",false); // required for certain browsers
    header("Content-Type: $ctype");
    header("Content-Disposition: attachment; filename=". basename($strFile) . ";" );
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ". $FileSize );
    readfile($filename);
    [/code:1:e1633d2772]
    Op 1 of andere manier blijft hij maar 2.17 kb willen downloaden.
    $FileSize is ook de grootte van het daadwerkelijke bestand, maar hij blijft hier op hangen.

    Heeft er niemand een idee?
  • staat de time-out misschien te laag?

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.