Dümmling: Dateiausgabe als Download dauert unverhältnismäßig lange

Guten Tag Zusammen,

ich erzeuge mit fputcsv() eine .csv Datei, die ca. 54 KB groß ist. Diese Datei möchte ich anschließend direkt downloaden. Das klappt auch soweit, bis auf die Tatsache, dass der Download bei einer 6000er Leitung mehr als 10 Sek. dauert. Für meine Begriffe ist das zu lange oder?! Rechnerisch wären diese 10 Sek. bei einer 28.8 (kbps) realistisch, aber bei ~6 mbps?!

Hier noch die Ausgabe als Download:

  
	header('Pragma: public');  
	header('Expires: 0');  
	header('Content-Description: File Transfer');  
	header("Content-type: application/force-download");  
	header('Content-Type: application/octet-stream');  
	header('Content-Disposition: attachment; filename="lxArtikel.csv"');  
	header("Content-Length: ".filesize('./lxArtikel.csv')."");  
	readfile('./lxArtikel.csv');  
	exit;  

Irgendjemand ne Idee? :)

Schon mal Danke im voraus.
Heiner

  1. Irgendjemand ne Idee? :)

    Wenn der Download solange dauert, ist entweder der Server oder die Leitung langsam.

    Du musst aber unterscheiden, ob es 10 Sekunden dauert, bis die Datei erzeugt wurde oder ob sie 10 sekunden braucht _nachdem_ sie erzeugt wurde.

    Wenn die Datei onTheFly generiert wird, kann es auch sein, dass der Server einfach zu schwach ist, die Daten schneller zu liefern. Schau dir doch wärend des Generierens mal die Serverauslastung an.

    1. Hallo M,

      Du musst aber unterscheiden, ob es 10 Sekunden dauert, bis die Datei erzeugt wurde oder ob sie 10 sekunden braucht _nachdem_ sie erzeugt wurde.

      Die Erzeugung der .csv durch den Server dauert Millisekunden. Die fertige Datei und muss "nur" noch mit ..

      Wenn die Datei onTheFly generiert wird, kann es auch sein, dass der Server einfach zu schwach ist, die Daten schneller zu liefern. Schau dir doch wärend des Generierens mal die Serverauslastung an.

      .. readfile() in den Puffer und zum Browser geschickt werden.

      Ich kann mir aber nicht vorstellen, dass readfile() so lange braucht, um 54 KB zu lesen und in den Ausgabepuffer zu schreiben.

      Danke.

      Gruß
      Heiner

      1. Ich würde dir raten, teste von anderen Standorten, also lass andere Leute testen, auch mit Handy per mobilen Internet usw. Dann siehst du, obs am Server liegt oder evtl. an deiner Leitung

      2. Die Erzeugung der .csv durch den Server dauert Millisekunden. Die fertige Datei und muss "nur" noch mit ..

        Wie lange dauert der normale "download" einer Website von Deinem Server.
        Wie lange dauert es die Datei runterzuladen, wenn Sie bereits generiert auf dem Server liegt?
        Was dauert wie lange (Verbinden, Transfer). Stichwort: Firebug.

        Cheers,
        Baba

  2. Guten Tag Zusammen,

    Irgendjemand ne Idee? :)

    Ich weiß immer noch nicht, warum manche immer wieder diese Daten erst in eine Datei schreiben und dann senden.

    header('Pragma: public');
            header('Expires: 0');

    Hm. Du schaltest erst mal das öffentliche Caching ein, um dann mitzuteilen, dass die Seite schhon ungültig ist.

    header('Content-Description: File Transfer');

    Wofür ist das gut?

    header("Content-type: application/force-download");
            header('Content-Type: application/octet-stream');

    Was denn nun?

    header('Content-Disposition: attachment; filename="lxArtikel.csv"');
            header("Content-Length: ".filesize('./lxArtikel.csv')."");

    Ah. Ja. Soweit, so gut.

    readfile('./lxArtikel.csv');
            exit;

    Besser wäre einfach:
            echo $data;
            exit;

    als:

    file_put_contents('./lxArtikel.csv', $data);
            readfile('./lxArtikel.csv');
            exit;

    Vielleicht ist ja aus irgendwelchen Gründen das Dateisystem so lahm, wenn Du erst schreibst und dann gleich wieder lesen willst. Da könnte was blockieren.

    Jörg Reinholz