PHP 5.3.8中fileinfo的Mime类型检测失败


Mime type detection fails with fileinfo on PHP 5.3.8

我在检测一个简单的PNG文件fileinfo的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返回默认响应,但我没有办法检查。

What I tried

检查魔法。mime文件的正确性,我使用文件控制台命令:

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

返回预期结果:

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

我还试了另一种魔法。Apache提供的mime文件,但问题仍然存在。

我试着说明魔法。通过默认的fileinfo位置(带有文件的符号链接和副本),使用MAGIC环境变量,并通过在finfo_open调用中指定文件路径(如上所述)来指定mime文件。

I tried updating PHP.

…现在我没有选择了。


如果有人能帮我,我会通过太空发送幸福的波,让他/她从此过上幸福的生活。

欢呼

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

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

当然,这并不完美,但这是一个选择。