如何使用php查找文件的mime类型?

时间:2020-03-06 14:44:13  来源:igfitidea点击:

好的,所以我有一个index.php文件,它必须处理许多不同的文件类型。我如何猜测基于REQUEST_URI的文件类型。

如果我请求http:// site / image.jpg,并且所有请求都通过index.php重定向,如下所示

<?php
   include('/www/site'.$_SERVER['REQUEST_URI']);
?>

我将如何使其正常工作?

我应该根据所请求文件的扩展名进行测试,还是可以获取文件类型?

解决方案

如果确定只使用图像,则可以签出getimagesize()exif_imagetype()PHP函数,该函数尝试返回图像的mime类型。

如果我们不介意外部依赖性,则还可以签出出色的getID3库,该库可以确定许多不同文件类型的mime类型。

最后,我们可以签出mime_content_type()函数,但Fileinfo PECL扩展名已弃用该函数。

我没有使用过它,但是有一个PECL扩展名来获取文件的mimetype。官方文档在手册中。

根据目的,可以使用文件扩展名,但由于更改很容易,因此文件扩展名不是很可靠。

根据php手册,finfo-file函数是执行此操作的最佳方法。但是,我们将需要安装FileInfo PECL扩展。

如果没有扩展名,则可以使用过时的mime_content_type函数。

如果只处理图像,则可以使用[[getimagesize()] [1]`函数,该函数包含有关图像的各种信息,包括类型。

更通用的方法是使用PECL的FileInfo扩展名。可以在以下位置找到此扩展的PHP文档:http://us.php.net/manual/en/ref.fileinfo.php

有些人对该扩展程序有严重的抱怨……因此,如果我们遇到严重问题或者由于某种原因而无法安装该扩展程序,则可能需要检查不推荐使用的函数mime_content_type()

mime_content_type()已被弃用,因此我们将无法指望它将来能正常工作。有一个" fileinfo" PECL扩展名,但是我还没有听说过。

如果我们在* nix服务器上运行,则可以执行以下操作,这对我来说效果很好:

$file = escapeshellarg( $filename );
$mime = shell_exec("file -bi " . $file);
$filename should probably include the absolute path.