在PHP中检测MIME类型

6

我正在寻找在大多数PHP 5.2安装中可能性最高且仍在积极开发的情况下检测文件MIME类型的最佳方法。

我知道mime_content_type()方法和Fileinfo扩展,但是mime_content_type()不可靠且已弃用,而Fileinfo不包含在“标准”PHP(5.2)安装中。

我还有其他选择吗?

4个回答

11

抱歉,我意识到这个问题已经几个月前就被提出了,但是没关系。这里介绍一种方法...

如果你使用的是*nix服务器,你可以使用file命令。

file -bi <filepath>

我猜你需要在PHP中使用"exec"来实现这个?我对PHP还很陌生,所以不要引用我的话...

$content_type = exec("file -bi " . escapeshellarg($filepath));

我没有测试过,所以你可能需要转义路径字符串并格式化输出。

不知道这是否比其他方法更可靠。


5

谢谢。这并不是最理想的解决方案,因为它只是尝试使用我已经提到的两种方法,另外一种方法在某些系统上无法正常工作(例如Windows),然后通过扩展名检测进行回退,但目前看来这似乎是我最好的选择。 - Jack Sleight

0

你可以向正在运行的Web服务器发出子请求,然后解析头文件以获取MIME类型。由于这很慢,使用curl仅获取标头而不是完整请求。如果您正在查看大型文件,则这很重要。

如果您正在运行Apache并使用php作为模块,请查看VIRTUAL函数。这是比使用curl更快的执行子请求的方法。

否则,您可以通过扩展名查找MIME类型。这将使所有命名良好的文件正常工作。


0

它并没有被弃用,尽管之前似乎被错误地标记为已弃用。它仍然存在于PHP 7中,并且没有被标记为弃用。 - dbenton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接