dateiname beim download

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

  • dateiname beim download

    hi,
    ich habe ein problem, an dem ich seit stunden sitze, aber ich komme einfach nicht weiter. Tut mir Leid, ich bin kein PHP-Crack.

    Also ich will nen Download erzwingen und möchte dazu den Dateinamen anzeigen lassen. Da ich das mit nem downloadscript mache, gibt es da Probleme. Entweder zeigt er mit den Skriptnamen an oder die ID. Ich komme einfach nicht weiter.
    Soweit bin ich (meine letzte Idee)

    $datei = "data/test.txt"; // Name der Datei (Jede Zeile(=ID) ist der spezielle Dateiname)
    $array = file($datei); // Datei in ein Array einlesen
    $blub = $array[$_GET['id']]; //ist glaube ich sinnlos
    header('Content-type: application/pdf');
    header('Content-Disposition: attachment; filename="'.$blub.'"');
    readfile('filename');

    was macht er? nichts ... er öffnet die pdf-datei im browser.

    kann mir jemand bitte helfen!!!

    Lg kevin.

    P.S.: Falls jemand ne andere gute Idee hat, nehme ich die auch ... jedoch ist das Problem, dass die url der dateien jeweils unterschiedlich lang ist

  • #2
    Re: dateiname beim download

    Original geschrieben von unnamedkh
    was macht er? nichts ... er öffnet die pdf-datei im browser.
    Wenn du das in deinem Browser für Ressourcen des Content-Types application/pdf so eingestellt hast, läuft doch also alles wunderbar ...


    Wenn du wirklich entgegen dieser Nutzerentscheidung handeln willst, dann nutze einen Content-Type, den der Client höchstvermutlich nicht kennt, für den er also als Default-Aktion den Downloaddialog öffnet - Suchfunktion benutzen, das leidige Thema hatten wir schon sehr oft.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      das ist mir klar. mir geht es auch nicht um das öffnen des dialogfeldes. das funktioniert ja, jedoch nicht mit dem dateinamen. den versuche ich halt so hinzubekommen, aber er hat scheinbar probleme mit der ausgabe des arrays...

      denn wenn ich statt

      header('Content-Disposition: attachment; filename="'.$blub.'"');

      das hier angebe

      header('Content-Disposition: attachment; filename="'.$_GET['id'].'"');

      gibt er die id als dateiname an ...

      grüße

      Kommentar


      • #4
        Original geschrieben von unnamedkh
        aber er hat scheinbar probleme mit der ausgabe des arrays...
        "er" in diesem Falle == du?

        PHP-Code:
        $array file($datei); // Datei in ein Array einlesen
        $blub $array[$_GET['id']]; //ist glaube ich sinnlos 
        Wie sieht der Inhalt der Datei aus?
        Was ergab deine Kontrollausgabe des eingelesenen Inhaltes, also print_r oder var_dump von $array? Gibt es dort einen Eintrag mit dem Key, den du in $_GET['id'] übergibst?
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          der inhalt sie bspw. so aus

          1|test.pdf
          2|test.pdf
          3|test.pdf
          test.pdf
          test.pdf
          test.pdf

          die ids werde ich vorn noch wegnehmen.

          var_dump von $_GET['id'] --> string(1) "1"
          var_dump von $blub--> string(10) "2|test.pdf"

          Kommentar


          • #6
            Ich würde mal
            PHP-Code:
            header("Content-Type: application/octet-stream"); 
            für den zu sendenden Header machen.
            Hast du dir mal $blub ausgeben lassen ? Ist das der korrekte Dateiname ? Und hast du auchmal $array mittels var_dump() augegeben lassen ? Sind das in etwa die erwarteten Ergebnisse ?

            Gruss

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

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

            Kommentar


            • #7
              Sorry aber du sagst ja selber, dass der Dateiname so nicht korrekt ist 2|test.pdf ist bestimmt kein Name den readfile() auf deiner Platte finden würde.
              Und was bezweckst du mit dieser Zeile
              PHP-Code:
              readfile('filename'); 
              Hast du denn eine Datei Names filename auf deiner Platte ? Ich meinte die sollte test.pdf heissen.

              Gruss

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

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

              Kommentar


              • #8
                ich habe es jetzt anders gemacht.

                ich hole mir den Namen als Get-Variable. Der Dateiname wird mir jetzt auch perfekt angezeigt. aber jetzt gibt es ein anderes Problem und ich habe keine Ahnung, woran das liegen könnte: Er kann die Datei nicht mehr öffnen. Grund: "Dateityp nicht unterstützt oder Datei beschädgit (z.b. wenn sie als Dateianhang geschickt wurde und nicht korrekt dekodiert wurde)"

                Eine Idee?

                das sieht jetzt so bei mir aus:

                header('Content-type: application/octet-stream');
                header('Content-Disposition: attachment; filename="'.$_GET['name'].'.pdf"');
                readfile('filename');

                Kommentar


                • #9
                  Liest du die Posts anderer Leute auch
                  PHP-Code:
                  readfile('filename'); 
                  oder warum hast du immer noch diese nutzlose Zeile drin. Er findet die Datei nicht. Weil du keine hast die 'filename' heisst !
                  Ist der Groschen (Eurocent) jetzt gefallen ???

                  Gruss

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

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

                  Kommentar


                  • #10
                    sry, das hatte ich schon verändert. das alte war nur noch im zwischenspeicher. tut mir leid.

                    so zieht das jetzt alles aus ...

                    #Header("Location: ".$url);
                    header("Expires: Mon, 10 Jan 1970 01:01:01 GMT");
                    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
                    header("Cache-Control: no-store, no-cache, must-revalidate");
                    header("Pragma: no-cache");
                    header('Content-type: application/octet-stream');
                    header('Content-Disposition: attachment; filename="'.$_GET['name'].'.pdf"');
                    readfile($url) or die("File not found.");


                    fehler:
                    <br />
                    <b>Warning</b>: readfile(http://test.de/blub/blub/blub/Einheit_01.pdf
                    ) [<a href='function.readfile'>function.readfile</a>]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
                    in <b>/var/www/vhosts/test.de/httpdocs/test/counter/count.php</b> on line <b>86</b><br />
                    File not found.

                    Kommentar


                    • #11
                      Vielleicht solltest du mal keinen HTTP-URL an readfile übergeben, sondern einen Pfad/Dateinamen aus dem lokalen Dateisystem des Servers ...?
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        das habe ich auch schon probiert, da kommt das:

                        <br />
                        <b>Warning</b>: readfile(../../blub/blub/blub/test.pdf
                        ) [<a href='function.readfile'>function.readfile</a>]: failed to open stream: No such file or directory in <b>/var/www/vhosts/test.de/httpdocs/test/counter/count.php</b> on line <b>86</b><br />
                        File not found.

                        aber ich bin mir zu 100% sicher, dass der file existiert und auch das die adresse/der pfad stimmt!!

                        tut mir echt Leid, dass ich das nicht klappen will.

                        grüße

                        P.S.: Denkt dran, ich bin kein php-pro ... ich versuch ja mein Bestes!

                        Kommentar


                        • #13
                          Wenn du dir "100%ig sicher" bist, und PHP aber anderer Meinung ist - tja, wem glaube ich dann wohl eher ...?
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #14
                            mmh, natürlich mir, weil ich die url, die er mir als "falsch" angibt, direkt im browser eingebe (oder halt reinkopiere) und schups (wunderwerk der technik) öffnet er die pdf datei ... mmh, wem glaube ich jetzt mehr? dem fehler oder meinen augen?

                            so, jetzt mal wieder etwas sachlicher (btw: seid ihr immer so schlecht gelaunt bzw. gereizt oder nur bei mir??).

                            noch jemand eine idee, oder soll ich euch mal das komplette script geben? ich kenn mich wie gesagt mit php nicht so gut aus, so dass es sein kann, dass ich nen gedankenfehler habe. ich häng es mal dran:

                            PHP-Code:
                            function counten($url)
                            {
                            global 
                            $email;
                            #Header("Location: ".$url);
                            header("Expires: Mon, 10 Jan 1970 01:01:01 GMT");
                            header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT");
                            header("Cache-Control: no-store, no-cache, must-revalidate");
                            header("Pragma: no-cache");
                            header('Content-type: application/octet-stream');
                            header('Content-Disposition: attachment; filename="'.$_GET['name'].'.pdf"');
                            readfile($url) or die("File not found."); 
                            Zuletzt geändert von unnamedkh; 09.11.2006, 15:52.

                            Kommentar


                            • #15
                              Original geschrieben von unnamedkh
                              mmh, natürlich mir, weil ich die url, die er mir als "falsch" angibt, direkt im browser eingebe (oder halt reinkopiere) und schups (wunderwerk der technik) öffnet er die pdf datei ...
                              Und was hat ein URL mit dem Dateisystem zu tun?

                              Die Angabe bei readfile bezieht sich, wenn du sie relativ machst, natürlich auf den Ausführungsort des Scriptes.
                              Ist der Pfad unter dem Gesichtspunkt immer noch richtig ...?
                              mmh, wem glaube ich jetzt mehr? dem fehler oder meinen augen?
                              Wenn soll ich mehr glauben - PHP, dass eine eindeutige Fehlermeldung ausgibt, oder dem x-ten hier reingeschneiten Newbee, der es besser zu wissen meint?


                              Und den Code brichst du bitte schnellstens um, so wie es in den Regeln steht.
                              I don't believe in rebirth. Actually, I never did in my whole lives.

                              Kommentar

                              Lädt...
                              X