Problem mit download mit header

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

  • Problem mit download mit header

    Hi Leute,
    wenn ich die frisch erstellte Datei "backup.sql" mit header runterladen will enthalt die heruntergeladene datei den quelltext der im Browser angezeigten Seite, also nich die ganze php-Datei
    und in mitten dieser Datei befindet sich nun der Ihalt der backup Datei.

    Ich hab mir gedacht das liegt vielleicht daran dass ich nicht den ganzen Pfad (ich hätts mit rtrim(dirname(\$_SERVER['PHP_SELF']), '/\\') ) der backup-datei angegeben habe aber das hat auch net gefuntzt.

    Wie kann ich das ganze zum laufen bringen?

    Vielen Dank schon im voraus.


    Code:
         
          $fp = fopen("backup.sql","w");
          fwrite ($fp,$sql);
          fclose($fp);
    
    
    
    $file='backup.sql';
       $len = filesize($file);
    
    
       header("Pragma: public");
       header("Expires: 0");
       header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
       header("Cache-Control: public"); 
       header("Content-Description: File Transfer");
       header("Content-Type: application/octet-stream");
    
    
       header("Content-Disposition: attachment, filename=".$filename."");       
       header("Content-Transfer-Encoding: binary");
       header("Content-Length: ".$len);
       readfile($file);


    Gruß Sebi

  • #2
    Re: Problem mit download mit header

    enthalt die heruntergeladene datei den quelltext der im Browser angezeigten Seite, also nich die ganze php-Datei
    kannst du das verständlich formulieren?

    ich verstehe dich so, daß vor dem eigentlichen inhalt der datei noch html steht? dann frage ich dich: wieso gibst du html aus, bevor du einen header sendest?

    bitte beschreib nochmal, was du machst und welche probleme auftreten.
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      ich mein dass die heruntergeladene Datei den html-Code, der von der phpDatei ausgegeben wird, enthält + den Inhalt der backup.sql Datei.

      Und wenn ich bei header("Content-Disposition: attachment, filename=".$filename.""); filename weglasse wird der name der php Datei als Dateiname der zu herunterladenden Datei vorgeschlagen. scheinbar lädt er die php-Datei in der sich dieser code befindet und nicht einfach nur, so wie ich es will die backup.sql .

      ich hoffe du/ihr versteht was ich meine.

      Ich versteh net warum des alles net klappt will doch nur die backup.sql runterladen. Oder gibts da noch eine andere Möglichkeit.

      Gruß Sebi

      Kommentar


      • #4
        Original geschrieben von php-sebi
        ich mein dass die heruntergeladene Datei den html-Code, der von der phpDatei ausgegeben wird, enthält + den Inhalt der backup.sql Datei.
        Ja, dann solltest du die Ausgabe des HTML-Codes vielleicht mal unterlassen ...?

        scheinbar lädt er die php-Datei in der sich dieser code befindet und nicht einfach nur, so wie ich es will die backup.sql .
        Natürlich tut "er" das - "er" hat eine HTTP-Ressource angefordert, der Webserver verbindet diese mit deinem PHP-Script, das PHP-Script erzeugt Ausgaben, diese werden an den Client gesendet.

        Jemanden mit Ahnung von dem, was er da tut, sollte das nicht überraschen dürfen.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          PHP-Code:
          header("Content-type: application/force-download"); 
          auch mal ausprobieren.

          gruß
          peter
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Kommentar


          • #6
            Hallo,

            ich habe das gleiche Problem.
            Ich verstehe auch, wo das Problem liegt. Allerdings weiß ich in meinem Fall nicht, wie ich das Problem lösen soll.
            Bei mir siehts so aus, dass ich eine index.php habe, die im Content-Bereich die entsprechenden Seiten included. Für den Download wird die Datei download.php?load=XX aufgerufen. XX steht dabei für die DB-ID.
            Der Aufruf sieht demnach z.B. insgesamt so aus: /index.php?site=download&load=13

            download.php
            PHP-Code:
            if(!isset($load))
              {
              if(!
            $cat)
                {
                  echo(
            "
                  Choose file-category:<br />
                  <a href=\"
            $PHP_SELF?site=download&cat=lng\">Language Files</a><br />
                  <a href=\"
            $PHP_SELF?site=download&cat=hld\">Holiday Files</a>
                  "
            );
                }
              else
                {
                  if(
            $cat == "lng")
                    {
                      echo(
            "<table border=\"1\">");
                      
            get_files($cat,0);
                    } 
            // if($cat == "lng")
                  
            elseif($cat == "hld")
                    {
                      echo(
            "<table border=\"1\">");
                      
            get_files($cat,0);
                    } 
            // if($cat == "lng")
                
            //else zu if(!$cat)
              
            }
            else
              {
              
            download($load);
              } 
            In der Funktion download($load); wird dann der ganze Kram mit header() und so gebaut...

            //edit
            Nachtrag:
            es wird der HTML-Code der index.php ausgegeben. Soll das etwa heißen, dass ich die download.php in diesem Fall besser direkt aufrufen soll, um mit einem meta refresh direkt auf die download.php per index.php zurückzuleiten?!
            // edit ende

            Nun frage ich mich: wo setze ich am besten an, um den Fehler zu beheben!!!

            Hat einer von euch eine Idee?

            Fetten Dank!

            Vossen
            Zuletzt geändert von Vossen; 11.07.2006, 16:32.

            Kommentar


            • #7
              fehlermeldungen? lies dir auch mal das durch

              gruß
              peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Kommentar


              • #8
                Hallo Peter,

                danke für deine schnelle Antwort!

                Nein, ich erhalte keine Fehlermeldung. Ich kann die Datei einwandfrei runterladen. Der Inhalt ist auch vollkommen korrekt. Allerdings wird dem eigentlich Inhalt der Datei noch die HTML-Ausgabe eingefügt.

                Wie gesagt: den Grund habe ich verstanden, weiß aber keinen Ansatzpunkt für eine Lösung....

                Gruß

                Bene

                Kommentar


                • #9
                  du solltest in der download.php keine ausgaben machen. nimm die auswahl z.b. in der index.php vor.
                  btw: mehr code würde weiterhelfen.

                  gruß
                  peter
                  Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                  Meine Seite

                  Kommentar


                  • #10
                    könnte es sein, dass die html Ausgabe vom gratis provider kommt?

                    irgendwoher muss sie ja kommen. und die beiden Frager werden ja wohl kaum eigenes html mit echo produzieren (bevor sie readfile() machen), und sich dann wundern dass es kommt?

                    Vielleicht heisst die Frage auch: wie mache ich zwei Ausgaben auf einmal:
                    (1) <html>hier ist dein Download</html>
                    (2) der eigentliche Download
                    Zuletzt geändert von mäander_; 11.07.2006, 16:55.

                    Kommentar


                    • #11
                      Hallo Peter, hallo mäander_

                      in der download.php mache ich ja eigentlich keine Ausgaben. Da ja beim Aufruf die Var $load gesetzt ist, wird ja nur die download($load); ausgeführt. Die sieht so aus:
                      PHP-Code:
                      function download($file)
                      // BEGIN function download
                        
                      connect_db(); 
                        
                      $sql_get_file "SELECT filename 
                                          FROM "
                      .$GLOBALS['db_prefix']."bv_files
                                          WHERE id = 
                      $file
                                          LIMIT 1
                                          "
                      ;
                        
                      $result_get_file mysql_query($sql_get_file);
                        list(
                      $file) = mysql_fetch_row($result_get_file);
                        
                      header"Content-type: text/plain ");
                        
                      header"Content-Length: " filesize("./files/".$file ) );
                        
                      $dateiname basename$file );
                        
                      header"Content-Disposition: attachment; filename=$dateiname");
                        
                      readfile("./files/".$file );
                      // END function download 
                      Ich habe gerade noch mal genau geschaut, welcher Code in die Datei geschrieben habe. Es ist tatsächlich Code aus der index.php...

                      Zu deiner Vermutung, mäander_, es könnte sich um einen Gratis-Provider handeln: ich teste das Skript im Moment noch auf localhost. Ansonsten bin ich aber auch Kunde von all-inkl.com (gilt das schon als Werbung? Soll keine sein!)


                      Gruß

                      Bene
                      Zuletzt geändert von Vossen; 11.07.2006, 16:56.

                      Kommentar


                      • #12
                        dann darfst du die download.php nicht includen, sondern mußt sie per link aufrufen.

                        gruß
                        peter
                        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                        Meine Seite

                        Kommentar


                        • #13
                          Oh man... Wie blöd! Warum habe ich das vorher nicht geschnallt??!
                          Soll heißen:
                          es funzt, wenn ich die download.php direkt verlinke! Ich musste dann zwar noch ein wenig mit den notwendigen includes und so rumspielen, weil sie die Pfade verändert haben (die download.php ist in "/modules", die index.php in "/" ...), aber es funzt!

                          Vielen Dank, Peter!

                          Gruß

                          Bene

                          Kommentar


                          • #14
                            Original geschrieben von Kropff
                            dann darfst du die download.php nicht includen, sondern mußt sie per link aufrufen.
                            Dann sind wir eventuell bei der Frage, wie man eine Ausgabe macht und noch separat, aber gleichzeitig, einen download auslöst.

                            Was meinen die beiden Fragenden, stimmt diese Problembeschreibung?

                            PS Ich habe das mal mit <IFRAME> getestet, es könnte aber auch mit einem pseudo <IMG> gehen oder mit Javascript. Jedenfalls kenne ich keine php-seitige Lösung, sondern nur pull's vom HTML her.

                            Kommentar


                            • #15
                              Hmm...
                              Eigentlich reicht es mir, dass die Datei runtergeladen werden kann. Insofern ist die Fragestellung nicht primär interessant.

                              Bene

                              Kommentar

                              Lädt...
                              X