PDF: Download erzwingen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • PDF: Download erzwingen

    hallo,

    wie kann man es bewerkstelligen, dass ein in einer html-seite zum download
    angebotenes pdf-dokument nicht automatisch angezeigt wird, sondern ein
    "speichern unter..."-dialog erscheint?


    mfg
    el pollo diablo

  • #2
    Indem man es zippt.
    Ich habe auch nach einer solchen Möglichkeit gesucht, aber auch
    beim zippen hängengeblieben.
    Oder über (nur IE) <iframe> direkt anzeigen.

    Bruno
    1402: Für einen Wimpernschlag der Zeit herrschte Gerechtigkeit auf Nord- und Ostsee...

    Comment


    • #3
      du kannst auch einen Download über PHP erzwingen, natürlich vorausgesetzt, du hast PHP zur Verfügung. Dann kannst du ein Skript bei Klick auf Download-Link aufrufen, welches ungefähr so aussehen kann:
      PHP Code:
      header("Content-Type: application/pdf");
      header("Content-Disposition: attachment; filename=\"Mein_gewuenschter_Downloadname.pdf\"");
      include 
      'pfadangabe/reale_pdf_file.pdf';
      exit(); 
      natürlich kannst du das Skript so umbauen, dass für den File eine Variable eingesetzt wird, d.h. wenn du viele Links für unterschiedliche Downloads hast.

      Comment


      • #4
        erstmal danke für die antworten.

        die zip-variante möchte ich nicht verwenden, da die seite von vielen daus benutzt wird,
        welche eigentlich auch schon so ihre probleme mit der bedienung eines computers haben.

        die php-lösung würde ich gerne benutzen, jedoch habe ich dabei das problem, dass nur
        285 bytes von 65 kbytes der pdf-datei übertragen werden.

        das pdf-dokument liegt im selben verzeichnis wie die php-datei und der verwendete code
        sieht so aus:

        PHP Code:
        <?php
            header
        ("Content-Type: application/pdf");
            
        header("Content-Disposition: attachment; filename=\"hallo.pdf\"");
            include 
        "test.pdf";
            exit();
        ?>
        wo könnte der fehler liegen?


        mfg
        el pollo diablo

        Comment


        • #5
          hmm, seltsam. So ein Problem hatte ich noch nie. Die Leserechte scheinen ja okay zu sein, sonst könntest du ja wohl gar nix lesen. Obwohl... vielleicht sind besagte 285 Byte ja nur eine PHP-Fehlermeldung -> füg doch mal als erste Zeile

          error_reporting(255);

          ein. Und kommentiere die header()-Zeilen aus. Dann sehen wir weiter.

          Gerade fällt mir noch ein: kann auch sein, dass du Dateien im selben Verzeichnis mit einem Punkt referenzieren mußt -> abhängig von Server-Konfiguration. Versuch also mal:

          include ("./test.pdf");

          Comment


          • #6
            ok, habe ich gemacht. es treten folgende fehler auf:

            Warning:
            Unexpected character in input: '' (ASCII=15) state=1 in /pfadangabe/test.pdf on line 403
            Parse error: parse error, unexpected '~' in /pfadangabe/test.pdf on line 403

            irgendwie scheint er wohl den inhalt des pdf-dokuments nicht zu mögen... ein test mit einer normalen
            textdatei funktionierte einwandfrei.

            Comment


            • #7
              na gut, dann versuch's mal anders, damit PHP da nix parst:
              PHP Code:
              <?php
                  header
              ("Content-Type: application/pdf");
                  
              header("Content-Disposition: attachment; filename=\"hallo.pdf\"");
                  
              $fp fopen("test.pdf","rb");
                  if (
              $fp) {
                      while (!
              feof($fp)) {
                          
              $buffer fgets($fp128000);
                          echo 
              $buffer;
                          }
                      
              fclose($fp);
                      }
                  exit();
              ?>

              Comment


              • #8
                ok, das problem ist offenbar gelöst.

                hiermit bedanke ich mich bei allen beteiligten für die geposteten lösungsansätze.
                besonders jedoch bei brain bug, welcher mich durch seinen letzter vorschlag auf
                die jetzige lösung gebracht hat.

                hier der code, der sich zum vorherigen nur in der verwendung der funktion fread()
                statt fgets() unterscheidet:

                PHP Code:
                <?php
                    header
                ("Content-Type: application/pdf");
                    
                header("Content-Disposition: attachment; filename=\"test1.pdf\"");
                    
                $filename "test1.pdf";
                    
                $fp fopen($filename"rb");
                    if (
                $fp)
                    {
                        
                $buffer fread ($fpfilesize ($filename));
                        echo 
                $buffer;
                        
                fclose($fp);
                    }
                    exit();
                ?>
                mfg
                el pollo diablo
                Last edited by El_Pollo_Diablo; 14-09-2002, 02:07.

                Comment


                • #9
                  diesen code müsste ich dann also mit for den link setzten, richtig? wie sieht der link dann aus? könnt ihr mir den quelltext für den link noch zeigen?
                  http://www.nanc-angel.de

                  Comment


                  • #10
                    Original geschrieben von BrainBug
                    na gut, dann versuch's mal anders, damit PHP da nix parst:
                    PHP Code:
                    <?php
                        header
                    ("Content-Type: application/pdf");
                        
                    header("Content-Disposition: attachment; filename=\"hallo.pdf\"");
                        
                    $fp fopen("test.pdf","rb");
                        if (
                    $fp) {
                            while (!
                    feof($fp)) {
                                
                    $buffer fgets($fp128000);
                                echo 
                    $buffer;
                                }
                            
                    fclose($fp);
                            }
                        exit();
                    ?>
                    Hab mal ne frage, was bringt bei fopen rb?


                    Floriam
                    PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

                    Comment


                    • #11
                      Original geschrieben von Floriam
                      Hab mal ne frage, was bringt bei fopen rb?
                      zitat manual:

                      "Anmerkung: Zusätzlich kann mode der Buchstabe 'b' hinzugefügt werden, der die Behandlung von Binärdateien erlaubt. Dies ist nur auf Systemen sinnvoll, welche zwischen Binär- und Text-Dateien unterscheiden (z.B. Windows. Ist bei Unix sinnlos). Wenn das Feature nicht gebraucht wird, wird es einfach ignoriert. Sie sollten den 'b' Flag verwenden, um Ihre Skripte portabler zu machen."


                      aber warum überhaupt fopen, tut's den readfile() nach den headern nicht genauso gut?

                      (dass include hier mist ergibt, ist aber eigentlich logisch - dann versucht er wohl, die pdf-daten als php-code zu interpretieren ...)
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Comment


                      • #12
                        Originally posted by BrainBug View Post
                        du kannst auch einen Download über PHP erzwingen, natürlich vorausgesetzt, du hast PHP zur Verfügung. Dann kannst du ein Skript bei Klick auf Download-Link aufrufen, welches ungefähr so aussehen kann:
                        PHP Code:
                        header("Content-Type: application/pdf");
                        header("Content-Disposition: attachment; filename=\"Mein_gewuenschter_Downloadname.pdf\"");
                        include 
                        'pfadangabe/reale_pdf_file.pdf';
                        exit(); 
                        natürlich kannst du das Skript so umbauen, dass für den File eine Variable eingesetzt wird, d.h. wenn du viele Links für unterschiedliche Downloads hast.
                        Hallo! Ich weiß der Beitrag ist schon etwas älter aber ich finde leider nix vergleichbares. Würde gerne wissen wie man die Variable setzt damit ich mehrere Links in den Script einbauen kann ohne zig download.php erstellen zu müssen ;-)
                        Danke im vorraus!

                        Comment


                        • #13
                          Hallo,

                          wenn du die download.php mit Get-Parametern aufrufst, z. B.
                          http://example.com/download.php?file=projekte
                          http://example.com/download.php?file=kunden

                          kannst du in der download.php über $_GET["file"] abrufen, welche Datei gemeint ist. Dort steht dann in diesem Beispiel entweder "projekte" oder "kunden" drin.

                          Siehe PHP: Vordefinierte Variablen - Manual und PHP: $_GET - Manual

                          Gruß,

                          Amica
                          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                          Super, danke!
                          [/COLOR]

                          Comment


                          • #14
                            Danke für die schnelle Antwort!

                            Genau so will ich es haben! Ich weiß jetzt nur nicht wie ich die Variable in den Code einbringe. ich meine ich kann ja nicht nach dem header $_GET["file] schreiben.
                            bin noch relativ neu im PHP und ich weiß das variablen setzen zu den grundlagen gehört aber trotzdem bekomm ich es mit dem Get-Parameter nicht. Wäre echt cool wenn du mir das an einen Code Beispiel zeigen könntest!

                            Comment


                            • #15
                              Du kannst $_GET["file"] aber mit anderen Strings verketten. Da musst du aber selbst durch, wenn du was lernen willst.
                              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                              Super, danke!
                              [/COLOR]

                              Comment

                              Working...
                              X