web-dev-qa-db-fra.com

Puis-je utiliser des images sans extension dans <img>?

Duplicata possible:
Est-il sûr de diffuser une image sur le Web sans extension?

Je voudrais utiliser quelque chose comme <img src="advertisements/12" style="border: 1px solid"> Dans une page. FireFox ne l'affichera pas, ce qui me fait penser que je dois avoir une extension de fichier pour le fichier. Suis-je ici (pour les autres navigateurs aussi), ou FF aime-t-il les types MIME?

[~ # ~] modifier [~ # ~]

J'ai essayé toutes sortes de choses et ça ne marchera toujours pas. Je mets maintenant une extension sur le fichier correctement (.swf pour Flash, par exemple). J'ai changé de répertoire, etc etc. Quand j'appelle file_exists(), le fichier est là, tout content et tel, mais je n'arrive absolument pas à le rendre sur la page. Il peut s'agir d'un fichier .PNG dans une balise img ou d'un objet Flash. Ni l'un ni l'autre ne fonctionne. Qu'est-ce que je fais mal :-( De plus, si je renomme un fichier non téléchargé en fichier que le script recherche, cela fonctionne bien, mais ceux téléchargés ne le font pas ...

34
Bojangles

Oui, vous devriez pouvoir.

Les navigateurs ne regardent pas initialement le nom de fichier, ils regardent le type MIME répertorié dans l'en-tête Content-type dans la réponse du serveur HTTP. Si le type de contenu est image/jpeg, ou png ou gif ou autre, les choses vont bien et cela rendra l'image avec plaisir.

S'il n'y a pas de type MIME valide, certains navigateurs essaieront de deviner quel est le type. Ils regarderont l'extension de l'objet en cours de demande, ou ils examineront les premiers octets. Si cela échoue, vous obtenez un redex.

Cela causait des problèmes aux premiers jours de Firefox/Firebird, car il était strict sur les types MIME et refusait souvent de rendre quelque chose sans type MIME valide. IE a fait une supposition, et tant de serveurs Web bâclés serviraient des pages qui rendraient bien dans IE, mais pas dans d'autres. De nos jours cependant, les choses vont beaucoup mieux.

Donc, tant que votre serveur Web fournit le bon type MIME lorsque l'objet img est demandé, vous serez prêt à partir. Si vous rencontrez des problèmes, vérifiez ce que fait votre serveur Web lorsque "publicités/12" est demandé.

31
whatsisname

Qu'est-ce que le serveur retourne? L'extension de fichier n'est vraiment utilisée pour rien. Le navigateur vérifie la Content-type en-tête, qui devrait ressembler à image/jpeg ou le type d'image que vous diffusez.

Ceci est utilisé assez souvent dans les sites qui servent dynamiquement des images, souvent à partir d'une base de données. J'ai vu de nombreuses URL d'images comme image.aspx?id=37 ce qui, bien qu'il ait techniquement une "extension" ne signifie pas vraiment que c'est une image. Tout est dans les valeurs d'en-tête HTTP.

9
David

Fournir un type MIME peut aider, bien que le serveur devrait théoriquement fournir le bon. S'il s'agit d'un script spécialisé PHP (ou similaire) qui sert l'image, vous devez vous assurer de définir l'en-tête HTTP Content-Type sur le type MIME approprié.

Si vous voulez éviter d'utiliser le <img> tag, vous pouvez utiliser <div> en conjonction avec les arrière-plans CSS, mais cela ne va pas aider si le navigateur ne reconnaît pas advertisements/12 comme tout type d'image connu.

2
digitlworld

Je me suis retrouvé avec des problèmes de visualisation d'images similaires après avoir renommé des images téléchargées à partir de formulaires Web. Comme je pouvais avoir un mélange de fichiers gif, jpg, jpeg ou png, je suis allé voir les propriétés du fichier.

J'ai fini par vérifier le type MIME (qui se trouve généralement dans le tableau $ _FILES lors du traitement des fichiers téléchargés) et ajouter une extension associée au nom du fichier.

if($_FILES[$fieldname]['type'][$key]=='image/gif') {
     $ext='.gif';
}

if($_FILES[$fieldname]['type'][$key]=='image/jpeg') {
     $ext='.jpg';
}

if($_FILES[$fieldname]['type'][$key]=='image/pjpeg') {
     $ext='.jpg';
}

if($_FILES[$fieldname]['type'][$key]=='image/png') {
     $ext='.png';
}

Liste des types de mime d'image courants.

- Ce qui a résolu mon problème car mon navigateur essayait de télécharger mes images sous forme de fichiers binaires sans l'extension de nom de fichier.

Serveur - Debian, Apache 2.2, PHP 5.3

Client Web - Kubuntu 11.10, Firefox

1
BradChesney79