2010-08-19 18 views
1

J'essaye de forcer le téléchargement d'une image qui est dans un répertoire au-dessus de la racine de mon site Web. Le téléchargement se passe bien, et le nom de fichier correct est enregistré. Cependant, le fichier final n'est pas une image valide et ne s'ouvrira pas ou ne s'affichera pas correctement. Voici mon code:PHP: forcer un téléchargement d'image à partir de la racine du répertoire ci-dessus?

 $photograph = new ViewPhotograph($photograph_id); 
     $photograph->setPhotographVars(); 

     $file = $photograph->getPath('small'); 
     $filename = '1.jpg'; 

     header('Content-Description: File Transfer'); 
     header('Content-Type: image/jpg'); 
     header('Content-Disposition: attachment; filename=' . $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($file)); 
     ob_clean(); 
     flush(); 
     readfile($file); 
     exit; 

Répondre

3

faire un ob_start avant d'appeler ob_clean()

une fois quelque chose outputed en utilisant l'écho ou similaire, vous ne pouvez pas vous débarrasser de ce fait, à l'exception, lorsque vous démarrez un tampon avant

+0

avant les en-têtes? – ThinkingInBits

+0

Wooo ... travaillé. Merci! – ThinkingInBits

+0

peut-être au début du fichier, pour intercepter toutes les erreurs ou sorties – xXx

0

Il y a peut-être un avertissement PHP corrompant le flux.

Commentez les en-têtes et voyez si vous voyez un avertissement. Si vous le faites, corrigez-le. (Notez que vous ne devriez pas avoir display_errors activé sur les serveurs de production).

+0

Quand je en commentaire les en-têtes, je reçois l'avis: Avis: ob_clean() [ref.outcontrol]: échec de la suppression du tampon. Pas de tampon à supprimer. dans C: \ xampp \ htdocs \ invivid \ download.php sur la ligne 35 et un tas de binaire sur la fenêtre du navigateur – ThinkingInBits

+0

@ Thin Supprimer complètement les appels 'ob_', avec' flush'. Je ne sais pas pourquoi tu les mets là. – Artefacto