Toon posts:

[PHP] FTP download

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik probeer een file van een ftp-server te downloaden (helaas geen ondersteuning voor passive mode, dus fopen lukt niet) en ik zou dit graag willen doen zonder eerst de hele file naar de webserver te downloaden naar een tempfile.
Ik kwam op het volgende (onderdeel van een klasse, het globale idee moet duidelijk zijn denk ik...):
code:
1
2
3
4
5
6
7
8
9
function DownloadFile($name, $tmpfile, $mode)
{
$fp = fopen($tmpfile, "w");
ftp_fget($this->FTPresult, $fp, $name, $mode);
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=$name");
rewind($fp);
fpassthru($fp);
}

Helaas werkt dit niet; het gedownloade bestand heeft geen data. Als ik echter
code:
1
print_r(fstat($fp))

na de "get" plaats krijg ik netjes de correcte statistieken van de file, de filepointer is dus in orde, wat doe ik verkeerd / zou ik moeten doen om dit werkend te krijgen?

Verwijderd

Topicstarter
even voor de goede orde, dit werkt wel:
code:
1
2
3
4
5
6
7
8
9
function DownloadFile($name, $tmpfile, $mode)
{
$fp = fopen($tmpfile, "w");
ftp_fget($this->FTPresult, $fp, $name, $mode);
fclose($fp);
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=$name");
readfile($tmpfile);
}

Maar hierbij wordt dus eerst de hele file naar de webserver gedownload alvorens de download naar de client kan beginnen, graag zou ik hem vanaf een open pointer in één keer "doorpassen", fpassthru lijkt mij hiervoor bedoeld...

  • Jelle Niemantsverdriet
  • Registratie: Februari 2000
  • Laatst online: 11:37
Als je ftp-ondersteuning meegecompileerd hebt in PHP kun je ook de standaard ftp-functies van PHP gebruiken

http://www.php.net/manual/en/ref.ftp.php

  • MikeN
  • Registratie: April 2001
  • Laatst online: 19-09 19:19
Als je hem niet naar een file wil schrijven, waarom gebruik je dan wel fopen en een filepointer?

Verwijderd

Topicstarter
de ftp_get functie kan alleen naar een open file pointer schrijven, vandaar dat ik die gebruik. Ik snap alleen niet waarom het voorbeeld met fpassthru niet werkt, hoewel de filepointer wel in orde is (fstat geeft goede resultaat terug). Iemand?