Video Datei Download

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

  • Video Datei Download

    Hey,

    Ich habe ein Problem damit Video Files zum Download anzubieten. Wenn ich z.b ein .avi File downloaden möchte, öffnet sich der Downloaddialog des Browsers und die Dateigröße wird korrekt angezeigt. Nach dem Download ist das Video allerdings dann nur 0kb groß und läßt sich nicht abspielen. Das Problem tritt bwi .avi oder .divx etc files auf. Mp3 Files, txt dateien, word dokumente etc lassen sich problemlos downloaden. Der Download wird folgendermaßen eingeleitet:
    PHP-Code:
    $filesize filesize($folder."/".$_GET['filename']);    // Get Filesize
        
    // Set Headers
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header("Content-Disposition: attachment; filename=".basename($_GET['filename'])."");
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header("Content-Length: ".$filesize."");
        
    // Send Output to Browser
    flush();
    readfile($folder."/".$_GET['filename']);
        
    // Exit the Script
    exit; 
    Klappt ja auch soweit, nur bei Videodatein halt nicht. Gibt es bei diesen irgendwas besonders zu beachten oder woran könnte das liegen?

    lg
    2Bad4You
    Zuletzt geändert von 2Bad4You; 24.07.2010, 15:04.

  • #2
    Texteditor nehmen, runtergeladene Datei damit öffnen - Fehlermeldungen?
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Komplett leer das Dokument. Hatte mich oben auch vertan, das File ist nich 1kb sondern 0kb groß. Mit Editor oder Wordpad geöffnet = weiße Seite. Also komplett leer. hmm

      Kommentar


      • #4
        Mit welchem Browser testest du - IE?
        Der ist bei solchen Sachen immer etwas zickig, was die Caching-Header angeht.
        Schmeiß' die drei header-Zeilen vor der letzten mal raus.

        Btw., dass das Script in der Form eine scheunentorgroße Sicherheitslücke aufreißt, weil man darüber sämtliche Dateien von deinem Webspace herunterladen kann, ist dir hoffentlich bewusst.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Ich habe es mit dem Firefox versucht. Im IE8 ist genau das selbe problem. Auch das rausschmeißen der 3 Header Zeilen bringt keine Änderung ...

          Danke für den Hinweis zwecks Sicherheit. Ich habe etwas weiter oben diese Abfrage drin:
          PHP-Code:
          // Check if $_GET Parameter for Folder isset
          if(isset($_GET['folder']) && ($_GET['folder'] != ""))
          {
              
          $folder DOWNLOAD_FOLDER."/".$_GET['folder']; // If it is set, bind Variable to $_GET folder key
          }
          else
          {
              
          $folder DOWNLOAD_FOLDER// If it is not set, bind Variable to Download Folder specified in Config
          }
              
          // Check IF the $_GET Parameter with the filename is correct
          if(!isset($_GET['filename']) || ($_GET['filename'] == "") || (!is_file($folder."/".$_GET['filename'])))
          {
              echo 
          "An Error occured. Please go back to the Main Menu. Use the Link below for this.";
              echo 
          "<br />";
              echo 
          "<a href='index.php?action=listFiles'>Go Back to the Main Page.</a>";
              die();

          Dadruch sollte es doch nicht möglich sein beliebige Dateien über das Script zu downloaden oder? Es werden ja nur Dateien zugelassen die in einem bestimmten Ordner liegen. Oder hab ich da noch irgendwas vergessen? Bin für jeden Tipp dankbar.
          Zuletzt geändert von 2Bad4You; 24.07.2010, 16:05.

          Kommentar


          • #6
            Na dann kommentiere erst mal alle Header aus, und schau ob Fehlermeldungen angezeigt werden.

            error_reporting auf E_ALL und display_errors auf on hast du ja hoffentlich?


            Und nein, deine Sicherheitsprüfung reicht selbstverständlich noch nicht aus, da man aus dem angegebenen Verzeichnis immer noch ganz leicht heraus kommt.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Ja Error Reporting ist an und display Errors auch. Wenn ich die Header auskommentiere und auf einen Download Klicke kommt eine weiße Seite und es werden keine Fehler angezeigt.
              Der Downloadteil des Scriptes sieht jetzt so aus:
              PHP-Code:
              if($action == "downloadFile")
              {
              // Check Access Mode. If private -> check if logged_in 
              // isset to 1 and check if Username is correct, again. For safety reasons.
              if(ACCESS_MODE == "private" && (!isset($_SESSION['logged_in'])) 
              || ((
              ACCESS_MODE == "private") &&  ($_SESSION['logged_in'] == "0")) 
              || ((
              ACCESS_MODE == "private") && (!in_array($_SESSION['username'], $usernamestrue))))     
              {
                  
              header("Location: index.php?action=login");
              }
                  
              // Check if $_GET Parameter for Folder isset
              if(isset($_GET['folder']) && ($_GET['folder'] != ""))
              {
                  
              $folder DOWNLOAD_FOLDER."/".$_GET['folder']; 
                     
              // If it is set, bind Variable to $_GET folder key
              }
              else
              {
                  
              $folder DOWNLOAD_FOLDER
                     
              // If it is not set, bind Variable to Download Folder specified in Config
              }
                  
              // Check IF the $_GET Parameter with the filename is correct
              if(!isset($_GET['filename']) || ($_GET['filename'] == "") || (!is_file($folder."/".$_GET['filename'])))
              {
                  echo 
              "An Error occured. Please go back to the Main Menu. Use the Link below for this.";
                  echo 
              "<br />";
                  echo 
              "<a href='index.php?action=listFiles'>Go Back to the Main Page.</a>";
                  die();
              }
                  
              $filesize filesize($folder."/".$_GET['filename']);    // Get Filesize
                  
              // Set Headers
              //header('Content-Description: File Transfer');
              //header('Content-Type: application/octet-stream');
              //header("Content-Disposition: attachment; filename=".$_GET['filename']."");
              //header('Content-Transfer-Encoding: binary');
              //header('Expires: 0');
              //header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
              //header('Pragma: public');
              //header("Content-Length: ".$filesize."");
                  
              // Send Output to Browser
              flush();
              readfile($folder."/".$_GET['filename']);
                  
              // Exit the Script
              exit;

              Ich weiß nicht woran das liegen soll da es ja bei allen anderen Files auch funktioniert. Habs mal mit einem .wmv File getestet grade und hab festgestellt das es damit z.b auch geht. Also er mag also nur .avi oder .divx nicht.

              Könntest du bitte mal ein Beispiel geben wie man noch leicht aus dem Verzeichnis rauskommt? Ich hab eben mal was getestet in einen anderen Pfad zuspringen aber das hat nicht geklappt. Deswegen dachte ich das wäre dagegen abgesichert. Wäre dir für ein Beispiel sehr dankbar.
              Zuletzt geändert von 2Bad4You; 24.07.2010, 16:33.

              Kommentar


              • #8
                Nimm mal probehalber anstelle von
                PHP-Code:
                flush();
                readfile($folder."/".$_GET['filename']);
                    
                // Exit the Script
                exit; 
                ein
                PHP-Code:
                $file file_get_contents($folder."/".$_GET['filename']);
                echo 
                $file
                Peter
                Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                Meine Seite

                Kommentar


                • #9
                  Ahhhh damit kommt man der Sache schon näher. Jetzt steht eine Fehlermeldung drin in dem gedownloadeten File. Ich habe gar nicht mehr dran gedacht dass das ganze eventuell kein Datei Problem sondern ein Memory Problem sein kann. Folgende Fehlermeldung steht nämlich jetzt drin:
                  Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 731727872 bytes) in G:\xampp\htdocs\filesbay\index.php on line 359
                  Daran hatte ich gar nicht mehr gedacht dass es da zu Problemen kommen kann ... Danke

                  Kommentar


                  • #10
                    Zitat von 2Bad4You Beitrag anzeigen
                    Der Downloadteil des Scriptes sieht jetzt so aus:
                    PHP-Code:
                    if($action == "downloadFile"
                    Und wo kommt $action her?
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      $action kommt aus dem $_GET Array.
                      PHP-Code:
                      if(!isset($_GET['action']) || ($_GET['action'] == ""))        // If action Atribute is empty set $action to login
                      {
                          
                      $action "login";    // If Empty set to default: login
                      }
                      else
                      {
                          
                      $action $_GET['action']; // IF Not Empty set to provided Action

                      Habe nicht das komplette Script gepostet, sondern nur den für den download relevanten Teil.

                      Kommentar

                      Lädt...
                      X