可能重复:
Is it safe to serve an image on the web without an extension?
我想在页面中使用<img src="advertisements/12" style="border: 1px solid">
之类的内容。 FireFox不会显示它,这让我觉得我必须有一个文件的文件扩展名。我是在这里(对于其他浏览器),还是FF像mime类型?
修改
我尝试了各种各样的东西但它仍然无效。我现在正确地对文件进行扩展(例如,Flash的.swf)。我已经更改了目录等等。当我调用file_exists()
时,文件就在那里,都很开心等等,但是我绝对无法在页面上进行渲染。它可以是img
标记中的.PNG,也可以是Flash对象。两者都不起作用。我究竟做错了什么 :-(
此外,如果我将一个未上传的文件重命名为脚本正在查找的文件,那该工作正常,但上传的文件没有...
答案 0 :(得分:29)
是的,你应该可以。
浏览器最初不查看文件名,它们会查看HTTP服务器响应中Content-type标头中列出的MIME类型。如果内容类型是image / jpeg,或png或gif或其他什么东西,那么事情就会很好,它会很乐意渲染图像。
如果没有有效的MIME类型,某些浏览器会尝试猜测类型是什么。他们将查看请求对象的扩展,或者他们将查看前几个字节。如果失败,那么你得到一个redex。
过去曾经在Firefox / Firebird的早期引起一些困境,因为它对mime类型严格,并且经常拒绝渲染没有有效MIME类型的东西。 IE做了一个猜测,这么多草率的网络服务器会提供在IE中呈现良好的页面,但在其他网页中则不然。这些天来,事情要好得多。
因此,只要您的Web服务器在请求img对象时提供正确的MIME类型,您就可以了。如果您遇到问题,请在请求“advertisements / 12”时检查您的Web服务器正在执行的操作。
答案 1 :(得分:9)
什么是服务器返回?实际上,文件扩展名不用于任何内容。浏览器正在检查Content-type
标题,该标题应该类似于image/jpeg
或您正在投放的任何类型的图片。
这经常用于动态提供图像的站点,通常来自数据库。我见过很多像image.aspx?id=37
这样的图片网址,虽然它在技术上有一个“扩展名”并不意味着它是一个图像。它全部在HTTP标头值中。
答案 2 :(得分:2)
提供MIME类型可能会有所帮助,尽管服务器理论上应该提供正确的类型。如果它是为图像提供服务的专用PHP(或类似)脚本,则必须确保将HTTP Content-Type标头设置为适当的MIME类型。
如果您想避免使用<img>
标记,可以将<div>
与CSS背景结合使用,但如果浏览器无法识别advertisements/12
,则无法提供帮助任何已知的图像类型。
答案 3 :(得分:1)
重命名从网络表单上传的图片后,我发现自己有类似的图像查看问题。由于我可以混合使用gif,jpg,jpeg或png文件,因此我查看了文件属性。
我最终做的是检查MIME类型(在处理上传的文件时通常在$ _FILES数组中)并将相关的扩展名附加到文件名。
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';
}
List of common image mime types.
- 这确实解决了我的问题,因为我的浏览器试图将我的图像下载为没有文件扩展名的二进制文件。
服务器 - Debian,Apache 2.2,PHP 5.3
Web客户端 - Kubuntu 11.10,Firefox