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

Posted

技术标签:

【中文标题】Mime 类型检测在 PHP 5.3.8 上使用 fileinfo 失败【英文标题】:Mime type detection fails with fileinfo on PHP 5.3.8 【发布时间】:2011-12-14 09:44:26 【问题描述】:

在 CentOS 服务器上安装 php 5.3.8 时,我无法检测带有 fileinfo 的简单 PNG 文件的 mime 类型。

问题

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

<?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 环境变量以及在 finfo_open 调用中指定文件路径(如上)来指定 magic.mime 文件.

我尝试更新 PHP。

...现在我别无选择了。


如果有人能帮我解决这个问题,我会通过太空发送幸福的波浪,这样他/她就可以从此过上幸福的生活。

干杯

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

嗯,是的,在我得到更可靠的东西之前,这可能会作为一种临时破解。谢谢。

以上是关于Mime 类型检测在 PHP 5.3.8 上使用 fileinfo 失败的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter:在 mac safari 中未检测到 vcf mime 类型

MIME 类型检测是检测一种文件的最佳方法吗?

docx 的 PHP mimetype 检测

如何使用 php 在文件上设置 mime 类型?

检测从数据库中提取的文件的 MIME 类型

给 PHP 添加 MIME 类型知识