在PHP 5.3.8上使用fileinfo进行Mime类型检测失败

时间:2011-10-24 19:14:58

标签: php centos fileinfo

我在使用fileinfo检测简单PNG文件的mime类型时遇到问题,在CentOS服务器上安装了PHP 5.3.8。

问题

基本上,如果我有以下代码:

<?php
$const = defined('FILEINFO_MIME_TYPE') ? FILEINFO_MIME_TYPE : FILEINFO_MIME;
$handle = finfo_open($const, '/usr/share/file/magic.mime');
$result = finfo_file($handle, '/var/vhosts/v4dev/public/Melvin.png');
echo $result;
unset($handle);
?>

如您所见,该文件是PNG图像。已检查文件的头字节并且是正确的。但是这个页面输出的结果不正确:

application/octet-stream

我想这是因为无法检测到文件类型,fileinfo返回了默认响应,但我发现没办法检查它。

我尝试了什么

为了检查magic.mime文件的正确性,我使用了文件控制台命令:

file -m /usr/share/file/magic.mime /var/vhosts/v4dev/public/Melvin.png

返回了预期结果:

/var/vhosts/v4dev/public/Melvin.png: image/png

我还尝试了Apache提供的另一个magic.mime文件,但问题仍然存在。

我尝试通过默认的fileinfo位置(使用符号链接和文件副本),MAGIC环境变量指定magic.mime文件,并指定finfo_open调用中的文件路径(如上所述)。

我尝试更新PHP。

......现在我没有选择。


如果有人能帮助我,我会在太空中发出幸福的浪潮,这样他/她就能过上幸福的生活。

干杯

1 个答案:

答案 0 :(得分:1)

那么为什么不从脚本中调用file命令呢?

$result = `file -bm /usr/share/file/magic.mime /var/vhosts/v4dev/public/Melvin.png`

当然,它并不完美,但它是一种选择。