Download via Header - Problem...

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

  • Download via Header - Problem...

    Hiho...

    Also irgendwie find ich den Fehler nicht....
    Und nachdem ich passendes im Forum gefunden hab, wurds nur schlimmer
    Ich hab das hier
    PHP-Code:
    $type=explode(".",$_GET[file]);
    header("Content-type: application/$type[1]");
    header("Content-Disposition: attachment; filename=$_GET[file]");
    readfile($_GET[file]); 
    Und benutze den Code um Bilder auf meiner Page zu öffnen, ohne den direkten Link rauszurücken. Der Ordner is zusätzlich ia htaccess gesperrt, so dass also kein rankommen per Fremdlink ist... schön und gut...
    Jetzt will ich aber diese Datei auch benutzen um Downloads von meiner Seite zu ermöglichen.
    Hier gilt eben das Gleiche, kein Pfad, kein Zugriff - nur über die Datei.
    Auch der Download funzt - nur dass jedes File den Namen der PHP Datei hat (file.php) - benennt man die um, ist alles ok, also haut die Übertragung hin.
    Wie bekomme ich den jetzt dazu, dass er den richtigen Namen nimmt.
    Kann ich mit den Header Befehlen irgendwie einen Namen 'vortäuschen'?
    Oder bin ich mit dem Code ganz auf dem falschen Weg??
    Ich hatte halt den Code in der Form schon öfter hier im Forum gefunden, aber niemand hatte scheinbar dieses Problem...

    ((2b) || !(2b))
    Wenn etwas schiefgeht, weißt du nur, dass du eine ungerade Anzahl von Fehlern gemacht hast...

  • #2
    arrays sollte man nicht einfach in einen string schreiben. entweder den string öffnen und schliessen oder {} verwenden.

    öffnen/schliessen
    PHP-Code:
    $type=explode(".",$_GET[file]);
    header("Content-type: application/".$type[1]);
    header("Content-Disposition: attachment; filename=".$_GET[file]);
    readfile($_GET[file]); 
    {}
    PHP-Code:
    $type=explode(".",$_GET[file]);
    header("Content-type: application/{$type[1]}");
    header("Content-Disposition: attachment; filename={$_GET[file]}");
    readfile($_GET[file]); 
    wahrscheinlich ist das schon des problems lösung.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Ne Sorry... aber das hat nix geändert... die DL-Datei heißt immernoch file.php

      ((2b) || !(2b))
      Wenn etwas schiefgeht, weißt du nur, dass du eine ungerade Anzahl von Fehlern gemacht hast...

      Kommentar


      • #4
        mach mal diese zusätzlichen header() rein.

        PHP-Code:
        header("Content-transfer-encoding: binary");
        header("Pragma: no-cache");
        header("Expires: 0"); 
        der erste ist denke ich der wichtigste.


        btw. das habe ich im forum gefunden. hättest du gesucht, wärest du schon am ziel gewesen...
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          Hättest du gelesen, was ich geschrieben hab, hättest du die Antwort sparen können

          Hab nämlich genau das im Forum gefunden und schon ausprobiert... egal ob ich Binary drin hab oder nicht, die Datei wird immer als file.php geladen... eigentlich ja auch logisch, denn schließlich wird sie ja durch file.php 'erzeugt' und an den Browser geschickt.... aber da wo du das im Forum gefunden hast (und ich auch... ) war es immer als Download Script gedacht... und ich denke kaum, dass die das Problem hatten.... also wo liegt mein Fehler?

          Man klickt bei mir auf den DL Link, der ruft die Seite neu auf und zählt einen Counter in der DB hoch und öffnet die file.php über einen META Befehl - wie die Datei aufgerufen wird, sollte aber doch egal sein, oder?

          ((2b) || !(2b))
          Wenn etwas schiefgeht, weißt du nur, dass du eine ungerade Anzahl von Fehlern gemacht hast...

          Kommentar


          • #6
            was mir noch aufgefallen ist.

            PHP-Code:
            $type=explode(".",$_GET[file]);
            header("Content-type: application/{$type[1]}"); 
            du nimmst immer die dateiendung als type.

            das ist eigentlich nicht richtig. da muss was anderes rein. frag mich jetztt aber nicht was...
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              ?


              PHP-Code:
              header("Content-Disposition: attachment; filename={$_GET[file]}"); 
              Filename is doch der komplette Dateiname (mit Pfad)

              PHP-Code:
              $type=explode(".",$_GET[file]);
              header("Content-type: application/{$type[1]}"); 
              Das ist doch dazu da den MimeType rauszufinden... oder?
              application/jpg oder wie auch immer das war....

              ((2b) || !(2b))
              Wenn etwas schiefgeht, weißt du nur, dass du eine ungerade Anzahl von Fehlern gemacht hast...

              Kommentar


              • #8
                Original geschrieben von Lawless
                Das ist doch dazu da den MimeType rauszufinden... oder?
                application/jpg oder wie auch immer das war....
                filename ist schon ok.

                mime hast du auch rausgefunden. aber application/jpg ist kein mime. das ist image/jpg oder image/jpeg
                INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                Kommentar


                • #9
                  Ja gut, irgendwie sowas wars

                  Nur ob das mit meinem Problem zusammenhängt?
                  Denn ansich funzts ja halt... Bilder werden angezeigt, Dateien richtig runtergeladen - nur der Name stimmt nich........

                  ((2b) || !(2b))
                  Wenn etwas schiefgeht, weißt du nur, dass du eine ungerade Anzahl von Fehlern gemacht hast...

                  Kommentar


                  • #10
                    änder doch einfach mal den mime in einen richtigen wert.
                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Kommentar


                    • #11
                      Irgendwie hilft das alles nicht.
                      Ich bezweifle langsam dass es überhaupt an den Header Befehlen liegt - denn wie gesagt, der DL an sich funzt one Probleme...
                      Ich hab das Ganze jetzt hier mal an nem anderen Rechner (IE5) probiert und siehe da - jetzt steht Speichern von Meinedatei.zip von URL.... aber sobald man auf Speichern geht, steht wieder NUR file.php als Dateiname zur Verfügung.... die verschiedenen Versionen interpretieren das also auch noch anders... mich wundert nur, dass er ja den richtigen Namen zu kennen scheint, dann aber doch wieder file.php als Namen nimmt..... grummel.....

                      ((2b) || !(2b))
                      Wenn etwas schiefgeht, weißt du nur, dass du eine ungerade Anzahl von Fehlern gemacht hast...

                      Kommentar


                      • #12
                        poste mal deine aktuellen header.
                        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                        Kommentar


                        • #13
                          PHP-Code:
                          $type=explode(".",$_GET[file]);
                          header("Content-type: application/{$type[1]}");
                          header("Content-Disposition: attachment; filename=\"{$_GET[file]}\"");
                          readfile($_GET[file]); 
                          Hab die Variable bei Filename manuell gesetzt und siehe da, DAS stand dann auch da... also scheint er mit dem $_GET[file] nicht zurecht zu kommen.... so jetzt.... in $file steht nicht nur der Dateiname drinne, sondern ein ganzer Pfad - kann es sein, dass er das nicht kapiert und dann einfach als Fehlerbehandlung den Defaultnamen file.php nimmt?
                          Wie bekomme ich aus nem Pfad den Dateinamen raus?
                          Ohne jetzt mit String-Such-Verränkungen.....

                          ((2b) || !(2b))
                          Wenn etwas schiefgeht, weißt du nur, dass du eine ungerade Anzahl von Fehlern gemacht hast...

                          Kommentar


                          • #14
                            Probier mal $_GET[filename] !
                            *winks*
                            Gilbert
                            ------------------------------------------------
                            Hilfe für eine Vielzahl von Problemen!!!
                            http://www.1st-rootserver.de/

                            Kommentar


                            • #15
                              http://www.php.net/manual/de/function.basename.php

                              aber warum übergibst du nicht nur den bildnamen?
                              so wie ich das verstandenhab, isses ja eh immer das selbe verzeichnis oder?
                              Ich denke, also bin ich. - Einige sind trotzdem...

                              Kommentar

                              Lädt...
                              X