2009-02-17 13 views
0

J'essaie d'afficher une image en utilisant un script PHP. Fondamentalement, le script php est transmis sur le chemin complet de l'image, puis il affiche cette image dans le navigateur. J'ai vérifié pour m'assurer que l'image existe, elle est lue correctement, etc., cependant dans le navigateur je vois juste la boîte d'image cassée (par exemple la petite croix rouge dans IE) si j'y vais.Afficher des images en utilisant PHP ne fonctionne pas

Mon script envoie ces en-têtes:

<?php 
header('Last-Modified: ' . gmdate('D, d M Y H:i:s T', filemtime($file))); 
header('Content-Type: '.$mime); 
header('Content-Length: '.filesize($file)."\n\n"); 
header('Etag: '.md5($file)); 
echo $file; 
die; 

$file contient quelque chose comme '/var/www/htdocs/images/file.jpg' qui fonctionne. le $mime est 'image/jpeg'.

J'ai également essayé de faire écho file_get_contents($file) mais cela ne fonctionnait pas non plus.

Quel est le problème, des idées?

+1

Parce que c'est une mauvaise question. –

+1

Espace ou contenu supplémentaire avant Miguel

+0

Merci, Miguel. Je n'ai pas été en mesure d'obtenir des images à charger à partir du fichier readfile en raison de son contenu avant ' jarmerson

Répondre

1

J'ai trouvé la réponse, j'avais des espaces supplémentaires après la balise ?> qui causait l'en-tête de ne pas fonctionner. grrrrrrr

+1

J'ai souvent fait aussi cette erreur .. haha ​​ – roa3

+0

C'est pourquoi j'ai récemment arrêté d'utiliser la balise PHP de fin ... –

+0

Il est courant que les gens n'incluent pas la balise PHP de fin, sauf s'il y a du HTML après cela, cela fait aussi partie des standards de codage Zend. – Jrgns

2

simplicité ... En quête de

<?php 
header('Content-type:' . mime_content_type($file)); 
readfile($file); 

devrait fonctionner comme prévu.

+0

ne fonctionne pas :(montre la même icône d'image brisée :(tapant l'URL de l'image directement dans le navigateur fonctionne, et si je tape echo readfile ($ fichier) et omettre l'en-tête, je peux voir tout le charabia compose l'image –

+2

Pas besoin de taper echo readfile() car readfile() écrit directement dans le buffer de sortie L'ajout d'echo ne ferait que polluer l'image en renvoyant le nombre d'octets renvoyés – Matt

3
<?php 
$filename = basename($file); 
$file_extension = strtolower(substr(strrchr($filename,"."),1)); 
switch($file_extension) 
    { 
    case "gif": 
     $ctype="image/gif"; 
     break; 
    case "png": 
     $ctype="image/png"; 
     break; 
    case "jpeg": 
    case "jpg": 
     $ctype="image/jpeg"; 
     break; 
    default: 
    } 
ob_clean(); // add this before header 
header('Content-type: ' . $ctype); 
readFile($file); 
?> 

quelque temps un espace supplémentaire peut être produit dans tout autre file.So ces espaces supplémentaires peuvent être retirés en appelant ob_clean() avant-tête() est appelée.

+0

histoire vraie bro, ob_clean() sauver ma vie, merci! – Ryosaku

+0

* ob_clean(); * Ceci devrait être la réponse acceptée. Je vous remercie – Kareem