PHP fileinfo 函数是查看文件内部还是只检查文件的扩展名

PHP Does fileinfo function look inside file or just checks the extension of file

我们有一个 PHP 7.4 代码用于上传视频文件。 所有 MP4 都被视为 MIME=video/mp4。 然而,在极少数情况下,mp4 文件会被 PHP 检测为 video/quicktime,这是我们不允许的。

HTTP Post 说它是 video/mp4。

        $finfo = finfo_open(FILEINFO_MIME_TYPE);
        $mime = finfo_file($finfo, $file['file']['tmp_name']);
        finfo_close($finfo); 

如果扩展名相同,为什么 mime 会改变? php 是否在文件中查找视频格式?

您正在使用的功能是检查文件的内容而不是文件名以确定适当的 MIME 类型是什么。

来自 finfo_* 函数族的 Fileinfo extension documentation

The functions in this module try to guess the content type and encoding of a file by looking for certain magic byte sequences at specific positions within the file. While this is not a bullet proof approach the heuristics used do a very good job.

您遇到的极少数情况可能是由于有人使用错误的扩展名保存或重命名 QuickTime 文件造成的。