Dateidownload mit header

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Dateidownload mit header

    Hallo,

    wenn ich eine Datei mit header zum Download anbieten will, darf ich weder vorher noch nachher Ausgaben mit echo, print etc machen, weil diese Ausgaben dann in der Datei landen (die Erfahrung habe ich schon hinter mir).

    Wie gehe ich denn vor, wenn ich dem User zusätzlich zum Download-Popup noch eine Weiterführung des Dialogs anbieten will? In diesem Fall muß ich doch parallel zum Download noch weitere Ausgaben machen können.

    Danke für Eure Tips

  • #2
    User klickt auf "Download", Browser sendet einen Request und darauf darf es nach RFC auch nur eine Antwort geben. Diese kann entweder die Datei sein, die heruntergeladen werden soll oder eine normale Webseite (oder irgendwas anderes).

    Ist es die Datei, zeigt der Browser den Downloaddialog, empfängt im Hintergrund die Datei und wenn der User bestätigt, speichert der Browser sie oder öffnet sie oder was auch immer. Ist der Download abgeschlossen, sendet der Browser keinen neuen Request, etwa nach einer Webseite, die du gern nach dem Download anzeigen würdest.

    Deine einzige Chance wäre, den Download in einem neuen Fenster/Tab zu starten und im alten gleichzeitig die nächste Seite zu laden. Das geht mit Javascript ganz locker. Allerdings gibt es keine Möglichkeit, einen Reload durch das Ende des Downloads triggern zu lassen oder das neue Fenster aus dem alten heraus zu schließen ohne den Download zu gefährden.

    Kommentar


    • #3
      Danke für den Tip.

      Es wäre wohl zu aufwendig für Dich, wenn Du mir noch nen Hinweis zu der Javascript-Lösung gibst? Gebe ich den Javascript Code per echo aus und wenn ja wo kann ich nachlesen wie der aussehen muß?
      rgds

      Kommentar


      • #4
        Code:
        <a href="download.dat" onclick="window.location.href='http://example.com/page.htm';">Download</a>

        Kommentar


        • #5
          Download.dat (oder besser download.php) ware dann das Script, das den Download startet und http://example.com/page.htm' waere die Weiterführung des Dialogs, d. h. dort würde ich meine neue Seite laden?

          rgds

          Kommentar


          • #6
            Hallo,

            mein Script gibt nun folgenden Code aus:

            <fieldset class='ordnerdaten'>
            <legend>Neueste Dokumente </legend>
            <a href='login.php?id=abc.txt' onclick="window.location.href='download.php';">abc.txt</a><br>
            <a href='login.php?id=cde.txt' onclick="window.location.href='download.php';">cde.txt</a><br>
            <a href='login.php?id=fgh.txt' onclick="window.location.href='download.php';">fgh.txt</a><br>
            </fieldset>

            Die download.php startet aber nicht, d. h. es wird kein zusätzliches Download-WIndow geöffnet. Gibt es dafür irgendwelche Erklärungen?

            rgds

            Kommentar


            • #7
              Die download.php startet aber nicht, d. h. es wird kein zusätzliches Download-WIndow geöffnet. Gibt es dafür irgendwelche Erklärungen?
              Und wo übergibst du die Parameter an Download damit diese weiss, welches File eingelesen werden soll ?
              Und überhaupt warum verweist der href auf ein anderes file als JS ? Geht's denn beim href nicht zum Dowload ?

              Gruss

              tobi
              Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

              [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
              Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

              Kommentar


              • #8
                Wo Du recht hast, hast Du recht. Ich habe die ID an das falsche Script übergeben. Habe das korrigiert - die download.php startet trotzdem nicht (es wird zumindest kein Window geöffnet. Folgender Code wird nun ausgegeben:

                <fieldset class='ordnerdaten'>
                <legend>Neueste Dokumente </legend>
                <a href='login.php' onclick="window.location.href='download.php?id=abc.txt';">abc.txt</a><br>
                <a href='login.php' onclick="window.location.href='download.php?id=cde.txt';">cde.txt</a><br>
                </fieldset>

                Kommentar


                • #9
                  Noch ne Erklärung zu den hrefs:

                  Den Tip von onemorenerd habe so interpretiert, dass ich ein zweites Fenster öfnnen muß um dort die Datei herunterladen zu können (download.php). In der login.php führe ich den Dialog mit dem Uer weiter. Sollte ich da etwas falsch interpretiert haben?

                  Kommentar


                  • #10
                    Jetzt wäre es interessant zu sehen was du in download.php hast. Via dem übergebenen Paramter sollte das Script ja wissen, welche Datei ausgelesen und an den Client geschickt werden soll.
                    Also schreib mal etwas Quellcode aus download.php hier rein, oder hänge ihn an wenn es zu viel ist.

                    Gruss

                    tobi
                    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                    Kommentar


                    • #11
                      In der login.php führe ich den Dialog mit dem Uer weiter. Sollte ich da etwas falsch interpretiert haben?
                      Würde ich meinen. Es kann nur entweder oder geben. Entweder der User hat JS an und der onclick führt zum Download oder der User hat JS nicht an und der href führt zur login.php.
                      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                      Kommentar


                      • #12
                        Hier die download.php. Aufrund der ID wird ein Dokument aus einer DB geholt und heruntergeladen.

                        Wie interpretierst Du denn den Tip von onemorenerd, der schreibt:

                        "Download in einem neuen Fenster/Tab zu starten und im alten gleichzeitig die nächste Seite zu laden"



                        $userid = $_SESSION['userid'];
                        $unternehmen = $_SESSION['unternehmen'];
                        $dateiname = $_GET["id"];

                        $sql = "SELECT * FROM dokumente
                        WHERE UserID='$userid' AND Unternehmen='$unternehmen' AND Name='$dateiname' \n";
                        $result = mysql_query($sql)or die("<p class='fehlermessage'>zentral.php Abfrage der dokumente DB fehlgeschlagen: " . mysql_error());
                        $row = mysql_fetch_array($result, MYSQL_BOTH);

                        $datei = $row["Dokument"];
                        $mime = $row["MIME"];

                        $save_as_name = basename($dateiname);
                        header("Pragma: public");
                        header("Expires: 0");
                        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
                        if (preg_match("/MSIE/i", $_SERVER["HTTP_USER_AGENT"])) {
                        header("Content-Type: " . $mime);
                        header("Content-Transfer-Encoding: binary");
                        header("Content-Length: " . strlen($datei));
                        header("Content-Disposition: attachment; filename=\"$save_as_name\"");
                        print($datei);
                        } else {
                        header("Content-Type: " . $mime);
                        header("Content-Length: " . strlen($datei));
                        header("Content-Disposition: attachment; filename=\"$save_as_name\"");
                        print($datei);
                        }
                        Download in einem neuen Fenster/Tab zu starten und im alten gleichzeitig die nächste Seite zu laden

                        Kommentar


                        • #13
                          Ich vermute mal du versuchst so
                          PHP-Code:
                          print($datei); 
                          die Datei an den Client zu bringen. Du printest bestenfalls den Dateinamen aus (vgl var_dump($datei)). Schau dir mal readfile() an. Das dürfte das sein was du brauchst um die Datei an den Mann zu bringen.

                          Gruss

                          tobi
                          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                          Kommentar


                          • #14
                            In Datei steht definiv die Datei und nicht der Name drin - der Download hat bereits funktioniert. Ich hatte nur das Problem, dass zusätzlich zum Dateiinhalt auch noch mein echo-Ausgaben zur Weiterführung des Dialogs in der Datei gelandet sind.

                            Kommentar


                            • #15
                              PHP-Code:
                              $datei $row["Dokument"]; 
                              Dann hast du den Inhalt des Files in der DB gespeichert ?
                              Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                              [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                              Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                              Kommentar

                              Lädt...
                              X