8
votes

PHP Header - Type de contenu: Image / JPEG - Ne fonctionne pas pour Internet Explorer

Nous détestons tous Internet Explorer lors de la construction de modèles HTML ou de modification de sites Web. Eh bien, j'ai récemment construit un script d'image PHP pour masquer l'emplacement de l'URL. Cela fonctionne bien pour Firefox, Chrome et même Safari.

Internet Explorer refuse d'afficher l'image à partir du script PHP. Il ne donne même pas aux icônes d'image cassées. Simplement des carrés vierges. P>

Android a également le même problème, mais je peux arriver à cela un autre temps et pourrait être associé. P>

Voici mon code pour le script d'image: P >

$image_id = $_GET['id'];

include "mysql_connect.php";
$sql = "SELECT * FROM images WHERE code='$image_id'";
$result = mysql_query($sql);
$r=mysql_fetch_array($result);

$imagepath=$r['path'];

// Produce proper Image
header("Content-type: image/jpeg");

echo file_get_contents("$imagepath");


6 commentaires

Quelle est la sortie brut de ce script? A-t-il l'air identique aux données JPEG sur le disque? Pas de sortie traction ou précédente?


Pour Firefox, il affiche l'image. Internet Explorer indique le code ASCII qu'il apparaît. J'ai aussi essayé d'utiliser Inclure ($ imagePath);


Soit vous émettez des espaces bleus avant ou après les données d'image ou vous manquez une en-tête de longueur de contenu. Vous avez également un problème d'injection SQL avec ce script.


Pouvez-vous relier la page Web? Je veux le tester


Désolé, je ne peux pas lier. Signé une NDA et c'est un site porno;)


J'ai trouvé le problème ... Apparemment Internet Explorer n'aimait pas mon attribut Hauteur. Enlevé, et cela a fonctionné. Devinez que je devrais faire fonctionner mon script miniature, comme cela m'a résolu mon problème de toute façon ... Merci pour l'aide de tout le monde. echo $ ecg_title;?>


4 Réponses :


10
votes

Le nom d'en-tête de type de contenu est écrit avec une T. majuscules, je ne suis pas sûr de ne pas être le problème, mais certains navigateurs peuvent ne pas reconnaître l'en-tête de type de contenu lorsqu'il est écrit avec une t. Ainsi, vous devez utiliser:

header("Content-Type: image/jpeg");


1 commentaires

Correction de la capitale T. Pour le moment, je ne teste que avec JPEG.



2
votes

Internet Explorer utilise le type MIME image / pjpeg code>. Vous utilisez pJpeg code> pour IE et jpeg code> pour les autres navigateurs.

header("Content-Type: image/pjpeg");


2 commentaires

Internet Explorer a besoin d'image / PJPEG en tant que type de contenu uniquement pour les JPEG encodés progressifs


Je lis ça quelque part et je l'ai essayé. Essayé à nouveau. Toujours pas de chance.



0
votes

Définissez l'en-tête de longueur de contenu.

header("Content-Length: " . filesize($imagepath));


1 commentaires

Bonne suggestion, j'ai ajouté cela il y a un peu de temps lorsque la source de données l'a recommandé. Il n'y a pas d'espaces blancs traînants non plus.



-1
votes

Je pense que je sais ce que le problème est.

Internet Explorer s'attend à ce que vous utilisiez l'image / JPEG et non Image / JPG. P>

Essayez ceci: p>

Header("Content-Type: image/jpeg"); 


1 commentaires

Cela a fonctionné pour moi. J'ai eu un site où aucun des JPG est affiché dans Internet Explorer. Il s'est avéré que j'avais mis le type de contenu à l'image / JPG. Quand je l'ai changé à l'image / JPEG, tout a fonctionné correctement.