Ankündigung

Einklappen
Keine Ankündigung bisher.

anonymer Download

Einklappen

Neue Werbung 2019

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

  • anonymer Download

    Hallo,
    ich versuche mich gerade an einem script, um anonymen Download zu erzeugen.
    Dafür habe ich eine download.php gemacht, in der folgender Code steht:
    PHP-Code:
     Der Ordner indem sich die Dateien befinden
     
    */
    $download_dir "http://meins.de/downloads/";

    /*
     * Die herunterladbare Datei:
     */
    $files "test1.pdf";
    /*
     * Den kompletten Pfad der Datei (+Dateiname) in $file speichern
     */
    $file $download_dir.$files;

    /*
     * Header-Einstellungen
     */
    header("Content-Type: x-type/subtype");
    header("Content-Length: ".filesize($file));
    header("Content-Disposition: attachment; filename=".$files);

    /*
     * Das "Speichern-Unter"-Fenster erscheinen lassen
     */
    readfile($file); 
    Nun, in diesem sehr einfach dargestellten Beispiel erscheint mir das Speichern unter-Fenster, allerdings will er immer die download.php downloaden und nicht die test1.pdf


  • #2
    Hi,

    bin mir zwar nicht 100% sicher ob es daran liegt aber die MIME-Type für PDF-Dateien ist ein anderer als der von dir angegebene.

    Schau dir mal das an: http://web-development-blog.de/pdf-download-erzwingen/
    Gruß,
    SebTM

    Kommentar


    • #3
      hab den mimetype jetzt ausgebessert aber es passiert genau das selbe. Nicht das pdf-Dokument sondern die download.php wird runtergeladen.

      Kommentar


      • #4
        PHP-Code:
        define('BASEPATH'realpath(dirname(__FILE__)));
        $dldir realpath(BASEPATH.'/downloads');
        header("Content-Type: application/octet-stream");
        header("Content-Length: ".filesize($dldir.'/'.$files));  
        header("Content-Disposition: attachment; filename=Datei.pdf");
        readfile($dldir.'/'.$files);

        /* Absoluter Pfad in $dldir - /var/www/......../downloads */ 
        Du solltest bei readfile mit lokalen absoluten Pfaden arbeiten, ansonsten belastest du den Interpreter und den Apache2 doppelt, das sollte nicht in deinem Sinne sein.

        PDF als Octet-Stream und die Filesize auch über den absoluten Pfad ziehen.

        Just try it

        style

        Kommentar


        • #5
          Was ist denn der Inhalt der Datei die du runterlädst? Falls dir das /* bzw. <?php im Original-Quelltext auch fehlt, wird das Script nicht korrekt ausgeführt und du bekommst wahrscheinlich text/plain als MIME-Type.

          Kommentar


          • #6
            code sieht jetzt so aus, mit dem selben Ergebnis:
            PHP-Code:
            $files "test1.pdf";
            define('BASEPATH'realpath(dirname(__FILE__)));
            $dldir realpath(BASEPATH.'http://www.meinedomain.at/unterlagen');
            header("Content-Type: application/octet-stream");
            header("Content-Length: ".filesize($dldir.'/'.$files));  
            header("Content-Disposition: attachment; filename=".$files);
            readfile($dldir.'/'.$files); 
            er will also immer noch die download.php downloaden und nicht das file.
            @Tropi: Kann ich irgendwie abfragen, welcher mimetype ausgeführt wird?

            Kommentar


            • #7
              PHP-Code:
              $dldir realpath(BASEPATH.'http://www.meinedomain.at/unterlagen'); 
              das wird nicht funktionieren. Du kannst nicht den absoluten Pfad mit dem Web-Pfad mischen.

              PHP-Code:
              define('BASEPATH'realpath(dirname(__FILE__)));
              echo 
              BASEPATH
              guck mal was da drin steht. Von da aus kannst du weiter gehen. Ich gehe mal davon aus, das das Define in deiner Index.php bzw im Webroot liegt. Somit wäre $dldir folgendermaßen:

              PHP-Code:
              $dldir realpath(BASEPATH.'/unterlagen'); 
              style

              Kommentar


              • #8
                Tropi hat doch ne ganz klare Frage gestellt. Wie sieht der Inhalt der runtergeladenen Datei aus?

                Kommentar


                • #9
                  was meint ihr denn bitte mit Inhalt der runtergeladenen Datei. Das ist ein normales Word-Dokument, dass als pdf umgewandelt wurde, also ein pdf-file, dass runtergeladen werden soll. Der Inhalt der Datei wird ja wohl egal sein oder?

                  Kommentar


                  • #10
                    Wir wollen wissen ob dein PHP-Code in der Datei steht die dein Browser bekommt oder nicht

                    Kommentar


                    • #11
                      Du sagst aber es wird als "download.php" angezeigt und nicht mit deinem gewählten Dateinamen, also wäre es eben interessant ob wenigstens der Inhalt korrekt, oder, wie sehr wahrscheinlich, nicht korrekt ist. Den MIME-Type kannst du wenn du die Web Developer Tools (Entwicklertools) aufmachst, im Network Tab sehen.

                      Kommentar


                      • #12
                        ach so, jetzt weiß ich was ihr meint. Hab die Datei jetzt mal runtergeladen und da steht folgendes drin:
                        Code:
                        <br />
                        <b>Warning</b>:  filesize() [<a href='function.filesize'>function.filesize</a>]: stat failed for http://www.meinedomain.de/unterlagen/test1.pdf in <b>/www/htdocs/wxxx/download.php</b> on line <b>43</b><br />
                        <br />
                        <b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /www/htdocs/wxxx/download.php:43) in <b>/www/htdocs/wxxxx/download.php</b> on line <b>43</b><br />
                        <br />
                        <b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /www/htdocs/wxxxx/download.php:43) in <b>/www/htdocs/wxxx/download.php</b> on line <b>44</b><br />
                        <br />
                        <b>Warning</b>:  readfile(http://meinedomain/unterlagen/test1.pdf) [<a href='function.readfile'>function.readfile</a>]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
                         in <b>/www/htdocs/wxxx/download.php</b> on line <b>49</b><br />

                        Kommentar


                        • #13
                          Was genau ist an deinem Download denn anonym ?
                          [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                          Kommentar


                          • #14
                            sry, etwas falsch ausgedrückt. Anonym daran ist eigentlich nur, dass vorher eine id per get an die download.php übergeben wird und dann eine db-abfrage statt findet, in der der pfad und die Datei drin stehen, zu der die id gehört.
                            Anonym ist im endeffekt also eigentlich nur der pfad und der genaue dateiname.

                            Kommentar


                            • #15
                              Und davon versprichst du dir genau was ?
                              [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                              Kommentar

                              Lädt...
                              X