ThomasJ: Dateiausgabe als Download

Moin,

äh, nun habe ich etwa mal mit einem Download Stream gerätselt, (siehe ältere Beiträge) und habe nun erfahren, dass ich wohl nicht mehr machen muss, als eine Datei zeilenweise einzulesen und auszugeben... Da ich von Perl keine Ahnung habe, versuche ich das mal mit PHP3...

Mein Code sieht etwa so aus:

$myfile = fopen("work.zip";, "r");
  if(!$myfile) die("error.");

while (!feof($myfile)) {
    $buffer = fgets($myfile, 4096);
    echo $buffer;
  }
  fclose($myfile);

An sich funktioniert das auch schon. Nur dummerweise wird ASCII-Müll auf dem Bildschirm angezeigt.

Meine Fragen:

1. Wie kann ich dem Browser sagen, dass der Dateityp jetzt kein Text ist? (wie genau lautet der mime-type für einen zip-download wie diesen?)

2. Wie sage ich dem Browser, wie der Dateiname lautet?

(Hintergrund: Ich will die Dateiherkunft verstecken. Es soll kein Umweg am Script führen. Sonst wird spätestens während des Downloads die URL angezeigt und könnte "mißbraucht" werden)

Gruß
Thomas J:

  1. Hallo,

    Mein Code sieht etwa so aus:

    $myfile = fopen("work.zip";, "r");
      if(!$myfile) die("error.");

    while (!feof($myfile)) {
        $buffer = fgets($myfile, 4096);
        #echo $buffer;
      }
      fclose($myfile);

    es ist gar nicht notwendig das file einzulesen. jedenfalls nicht zeilenweisse.

    das einzig wichtige dabei ist folgendes:

    du mußt dem browser sagen was du ihm sendest, das macht man mit header(); das mußt du aber ausgeben BEVOR du irgendetwas anderes ausgiebst. (also es darf kein ECHO davor kommen :-)

    für ein zip file wär das zb.:
    header("Content-disposition: filename=$file");
    header("Content-type: application/zip");
    header("Pragma: no-cache");
    header("Expires: 0");

    Ich glaube es müsste genügen wenn du es über den file pointer versuchst. Wenn nicht lies die datei einfach in eine Variable ein und giebs über den header aus.

    Wie gesagt ungetestet.

    lg
    Ludwig