2009-12-26 59 views
0

如果单击视图,你可以打开浏览器,文件,如何在PHP中正确实现一般的Mime类型?

我已经试过:

readfile('test.jpg'); 

,但似乎在Firefox失败。

+0

您可以定义“它失败“?比如,你是否收到错误信息?文件是否存在(并在当前目录中)? – 2009-12-26 13:28:29

+0

它给了我很多杂乱的字符,而不是一个图像。 – user198729 2009-12-26 13:30:16

回答

1

只要提供一个链接到该文件,浏览器将完成其余的。如果这个文件存储在你的服务器上,你可能正在寻找一个脚本,将它暴露给外部世界。这个脚本应该设置正确的MIME类型,然后readfile应该做到这一点。

<?php 
header('Content-type: image/gif'); 
readfile('/path/to.your/file.gif'); 
exit(); 
+0

如果该文件是.pdf,该怎么办?是否有一个通用的解决方案? – user198729 2009-12-26 13:31:48

+1

搜索MIME类型。 – deerchao 2009-12-26 13:49:01

2

如果你想获得的MIME类型的文件时,你至少有两种选择,在PHP中:

第一种是使用(废弃)功能mime_content_type

返回MIME 格式的内容类型,如text/plainapplication/octet-stream


第二是使用新的扩展Fileinfo(可作为PECL扩展为PHP < 5.3,和集成在PHP> = 5.3);该finfo_file功能似乎是你需要的一个:

返回的文件名参数的 内容的文字说明,或 FALSE如果发生错误。

和给定的例子(引用)

$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension 
foreach (glob("*") as $filename) { 
    echo finfo_file($finfo, $filename) . "\n"; 
} 
finfo_close($finfo); 

给出了这样的输出:

text/html 
image/gif 
application/vnd.ms-excel 

哪种对应的到你需要使用的是什么Content-type您的应用程序可能需要发送的HTTP标头;-)

+0

如果有很多并发用户,你可能会考虑以某种方式缓存结果,因为MIME魔法模式测试不是“最便宜”的功能;-) – VolkerK 2009-12-26 14:40:19

+0

finfo_open无法加载魔法数据库,php 2.5 – user198729 2009-12-26 15:44:22

+0

嗯,有一些你必须把它放在正确的位置(我尝试了几次,这不是那么容易设置,但不是**也很难)。有一些关于http://www.php.net/manual/en/function.finfo-open.php的信息可能会引导你更进一步。 – 2009-12-26 15:53:48