我正在寻找在大多数PHP 5.2安装中可能性最高且仍在积极开发的情况下检测文件MIME类型的最佳方法。
我知道mime_content_type()
方法和Fileinfo扩展,但是mime_content_type()
不可靠且已弃用,而Fileinfo不包含在“标准”PHP(5.2)安装中。
我还有其他选择吗?
我正在寻找在大多数PHP 5.2安装中可能性最高且仍在积极开发的情况下检测文件MIME类型的最佳方法。
我知道mime_content_type()
方法和Fileinfo扩展,但是mime_content_type()
不可靠且已弃用,而Fileinfo不包含在“标准”PHP(5.2)安装中。
我还有其他选择吗?
抱歉,我意识到这个问题已经几个月前就被提出了,但是没关系。这里介绍一种方法...
如果你使用的是*nix服务器,你可以使用file命令。
file -bi <filepath>
我猜你需要在PHP中使用"exec"来实现这个?我对PHP还很陌生,所以不要引用我的话...
$content_type = exec("file -bi " . escapeshellarg($filepath));
我没有测试过,所以你可能需要转义路径字符串并格式化输出。
不知道这是否比其他方法更可靠。
你可以向正在运行的Web服务器发出子请求,然后解析头文件以获取MIME类型。由于这很慢,使用curl仅获取标头而不是完整请求。如果您正在查看大型文件,则这很重要。
如果您正在运行Apache并使用php作为模块,请查看VIRTUAL函数。这是比使用curl更快的执行子请求的方法。
否则,您可以通过扩展名查找MIME类型。这将使所有命名良好的文件正常工作。