PHP en Sortie de Fichier des pièces Jointes avec des en-Têtes

Après la lecture de quelques posts ici, j'ai formulé cette fonction qui est une sorte de méli-mélo d'un tas d'autres:

function outputFile( $filePath, $fileName, $mimeType = '' ) {
    //Setup
    $mimeTypes = array(
        'pdf' => 'application/pdf',
        'txt' => 'text/plain',
        'html' => 'text/html',
        'exe' => 'application/octet-stream',
        'zip' => 'application/zip',
        'doc' => 'application/msword',
        'xls' => 'application/vnd.ms-excel',
        'ppt' => 'application/vnd.ms-powerpoint',
        'gif' => 'image/gif',
        'png' => 'image/png',
        'jpeg' => 'image/jpg',
        'jpg' => 'image/jpg',
        'php' => 'text/plain'
    );

    //Send Headers
    //-- next line fixed as per suggestion --
    header('Content-Type: ' . $mimeTypes[$mimeType]); 
    header('Content-Disposition: attachment; filename="' . $fileName . '"');
    header('Content-Transfer-Encoding: binary');
    header('Accept-Ranges: bytes');
    header('Cache-Control: private');
    header('Pragma: private');
    header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
    readfile($filePath);

}

J'ai une page php (file.php) qui fait quelque chose comme ça (beaucoup d'autres codes supprimés):

   //I run this thru a safe function not shown here
$safe_filename = $_GET['filename']; 
outputFile ( "/the/file/path/{$safe_filename}", 
             $safe_filename, 
             substr($safe_filename, -3) );

Semble comme il devrait fonctionner, et c'est presque fait, mais j'ai les problèmes suivants:

  1. Lorsque son d'un fichier texte, je reçois un étrange symbole que la première lettre dans le texte du document
  2. Lorsque ses un doc word, il est corrompu (sans doute le même premier bit ou octet de jeter des choses).
  3. Je présume que tous les autres types de fichiers sont corrompus n'ont même pas essayé

Toutes les idées sur ce que je fais de mal?

Grâce -

Mise à JOUR: changé de ligne de code, comme l'a suggéré - toujours la même question.

Supprimer Accept-Ranges . Parce qu'il a besoin de plus de code...

OriginalL'auteur OneNerd | 2009-05-22