我正在尝试使用PHP的Fileinfo扩展(基于libmagic)来确定文件的类型。 Microsoft Outlook邮件文件有一个奇怪的案例(使用.msg扩展名的邮件)。 file(1)将这些报告为application / CDFV2-corrupt。我不确定为什么" -corrupt",但CDFV2是正确的,虽然不具体:https://en.wikipedia.org/wiki/Compound_File_Binary_Format
我的问题是,当使用PHP finfo_buffer()
时,获得的类型是application / msword。 CDFV2文件可能是Microsoft Word文档,但情况并非总是如此,并非如此。但是,如果我使用finfo_file()
确定类型,我会得到预期的应用程序/ CDFV2损坏。
这些函数的文档不太清楚,但如果我理解正确,下面的测试用例在其结果数组中应该具有相同的值,无论文件内容是什么,但Outlook邮件不是这种情况(例如,https://dev.tiki.org/dl1120)。我误解了finfo_buffer()
,还是有错误?
<?php
$object = new finfo(FILEINFO_MIME_TYPE);
$path = 'C:/testCDFV.msg';
$results = array();
{
$results ['direct'] = $object->file($path);
$contents = file_get_contents($path);
$results['contentsOO'] = $object->buffer($contents);
$resource = finfo_open(FILEINFO_MIME_TYPE);
$results['contentsProcedural'] = finfo_buffer($resource, $contents);
}
var_dump($results);
?>
我没有找到跟踪此类错误的故障单。在GNU / Linux上的PHP 5.5.9和Windows上的PHP 5.6.30上的行为是相同的。我没有测试PHP 7的行为(如果拥有它的人可以,那将不胜感激)。