Problem mit Download.php (Datei um 1 bit verschoben)

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

  • Problem mit Download.php (Datei um 1 bit verschoben)

    Hi,

    mal wieder ein Problem.
    Ich hab einen Datei Download mit einer Weiterleitung zu der Datei download.php realisiert. Das klappt auch alles wunderbar, nur ist die Datei, die man runterläd genau um 1 bit nach rechts verschoben und das erste Zeichen ist ein Leerzeichen (ASCII 20).

    Woran kann das liegen?

    So sieht der Aufruf von download.php aus:
    PHP-Code:
    header('refresh: ' $sec '; url=/upload/download.php'); 
    Und die Datei selbst:

    PHP-Code:

    <?php
     
      
    // wird benötigt, damit dies auch beim IE funktioniert.
      
    session_cache_limiter("private_no_expire, must-revalidate");
      
    session_cache_expire(0);
      
    session_start();
        
      
    $file_path  DIR_TEMP.basename(session_id().".sig");
      
    $file_name $_SESSION["download_name"];


    if(
    file_exists($file_path)) { 
          
      
    header ("Cache-Control: must-revalidate, post-check=0, pre-check=0");
      
    header ("Content-Type: application/octet-stream");
      
    //header('Content-type: application/force-download');
      
    header('Content-Transfer-Encoding: Binary');
      
    header('Content-length: '.filesize($file_path));
      
    header('Content-disposition: attachment;filename="' $file_name '"');
      
    readfile($file_path);
      
    unlink($file_path);
    }
    else {
      echo 
    'Die Datei wurde nicht gefunden.';
    }
    Die Datei liegt richtig im Verzeichnis und die Werte von filesize() und readfile() sind identisch, also die Größe der Datei scheint zu stimmen.

    Verzichte ich auf die download.php und gebe direkt den Link der Datei aus und speichere mit "speichern unter..." die Datei, so stimmt die Datei die runtergeladen wird.


    Jemand ne Idee, woran das liegen kann??

  • #2
    schau malauf meinen beitrag.

    dort steht wie ich es mache... evtl. hilft dir das

    http://www.php-resource.de/forum/sho...threadid=53183

    Die Funktion getmimetype ist wie folgt deklariert:

    PHP-Code:
            function getmimetype($filename)
            {
                static 
    $mimes = array
                (
                    
    '\.jpg$|\.jpeg$'                      => 'image/jpeg',
                    
    '\.gif$'                              => 'image/gif',
                    
    '\.png$'                              => 'image/png',
                    
    '\.htm$|\.html$|\.shtml$'            => 'text/html',
                    
    '\.txt$|\.asc$'                    => 'text/plain',
                    
    '\.xml$|\.xsl$'                    => 'application/xml',
                    
    '\.xls$|\.xla$'                    => 'application/m************cel',
                    
    '\.doc$|\.dot$'                    => 'application/msword',
                      
    '\.ppt$|\.ppz$|\.pps$|\.pot$'            => 'application/mspowerpoint',
                    
    '\.hlp$|\.chm$'                    => 'application/mshelp',
                      
    '\.gz$'                            => 'application/gzip',
                      
    '\.tar$'                            => 'application/x-tar',
                      
    '\.zip$'                            => 'application/zip',
                      
    '\.rar$'                            => 'application/x-rar-compressed',
                      
    '\.bin$|\.exe$|\.com$|\.dll$|\.class$'    => 'application/octet-stream',
                      
    '\.iso$'                            => 'application/octet-stream',
                    
    '\.pdf$'                            => 'application/pdf',
                    
    '\.ai$|\.eps$|\.ps$'                => 'application/postscript'
                
    );
                foreach (
    $mimes as $regex => $mime)
                {
                    if(
    eregi($regex$filename)) return $mime;
                }
                
    // return 'application/octet-stream';
                
    return 'text/plain';
            } 
    Gruß,
    Thomas

    Kommentar


    • #3
      OffTopic:
      würd die funktion verbessern mit:
      PHP-Code:
      if(eregi('.'.$regex.'$'$filename)) return $mime
      dann braucht man die zeichen nicht wiederholt in dem array anzugeben und kann das array u.u. woanders wiederverwenden.

      achja, und preg_match statt eregi würd ich auch nehmen.

      Kommentar


      • #4
        Danke Leute, aber der Esel bin ich selbst :-(


        Hab gerade eben mal die download.php GANZ GENAU mir nochmal angeschaut und festgestellt, dass sich ganz oben außerhalb vom <?php ... ?> ein Leerzeichen eingeschlichen hatte, was natürlich beim Speichern durch den Browser (da ja application/octet-stream) mit in den Download geschrieben wird.


        ARRRRGGGGHHH Und sowas merk ich erst jetzt....ich geh jetzt in den Wald und schrei ne Runde...was des wieder an Zeit gekostet hat.

        Kommentar

        Lädt...
        X