Finfo_file返回错误的类型

时间:2019-01-12 23:39:10

标签: php pdf mime-types

美好的一天!

此pdf文件的代码返回错误的类型。对于另一个pdf文件,此代码很好。

    $finfo = @finfo_open(FILEINFO_MIME);
    $mime = @finfo_file($finfo, 'upload/123.pdf');
    finfo_close($finfo);

    print_r($mime);

这是答案: 应用/八位字节流; charset = binary

这是我需要的: 应用/ pdf

这是pdf文件 https://dropmefiles.com/x6slw

谢谢!

1 个答案:

答案 0 :(得分:0)

我很好奇,下载了文件,是的,在运行代码时,它没有给我application/pdf而是给了application/octet-stream; charset=binary

由于finfo函数依赖文件签名(字节)来查找文件MIME类型,所以我猜了-签名一定有问题,因此我在十六进制查看器下对其进行了分析,这就是我发现的内容< / p>

您的文件 enter image description here

普通文件 enter image description here

要正确识别,PDF签名应该从一开始就出现,但是在您的文件中它偏移了4个字节。由于finfo找不到正确的MIME类型,因此回退到其通用“ application / octet-stream; charset = binary”

那么如何解决?

我必须承认php的内置函数非常适合执行常规任务,但是有时在这里和那里,您可能会遇到那些“边缘情况”,这是第三方开放源代码库出现的地方,在这里,我发现可以为您修复它。 / p>

PhpMimeType https://github.com/katzien/PhpMimeType

$type = \MimeType\MimeType::getType('123.pdf');
print_r($type); //"application/pdf"
                // Yay!