在没有 MIME 或扩展名的 PHP 中确定文件类型
Posted
技术标签:
【中文标题】在没有 MIME 或扩展名的 PHP 中确定文件类型【英文标题】:Determining file type in PHP without MIME or extension [duplicate] 【发布时间】:2013-11-11 13:15:23 【问题描述】:我有一个可以上传文件的 php 网站,我希望能够根据文件类型执行某些操作。但是我不想相信浏览器说它是什么类型的文件,而宁愿阅读文件的标题来确定它。 PHP中是否存在为此的任何库?或者这是我需要从头开始写的东西?
【问题讨论】:
【参考方案1】:PHP 中有一个名为fread()
的函数,您可以使用它来读取二进制文件:
http://php.net/manual/en/function.fread.php
您可以使用它读取文件的前几个字节以获取标题并确定文件类型。
【讨论】:
这远不是确定文件类型的完整方法。 No s*** Sherlock - 显然他必须分析他从文件中读取的内容以确定文件类型。再次阅读他的问题:“......宁愿阅读文件的标题来确定它。PHP 中是否存在任何库?或者这是我需要从头开始编写的东西?” 我读了他的问题。有几种方法可以做到这一点,而无需重新发明***。【参考方案2】:使用为您执行此操作的 finfo
函数。
以前可以使用 mime_content_type 函数,现在已弃用,所以改为使用
$finfo = new finfo(FILEINFO_MIME);
$type = $finfo->file('path/filename');
【讨论】:
我不确定为什么这被否决了。虽然,是的,它使用 MIME - 它没有使用浏览器报告的 MIME 类型。 是用文件名来确定MIME吗?还是读取文件头? 我想它使用 mime.magic 更好的方法:$type = finfo_open($path_to_image); @directedition 它不使用文件名来确定 MIME。即使文件上的文件扩展名不正确,这也会报告正确的文件类型,而不管它具有什么扩展名。 mime_content_type ( $path_to_file ) 也可以。【参考方案3】:文件信息功能可以给你文件类型
$finfo = finfo_open(FILEINFO_MIME_TYPE);
echo finfo_file($finfo, $filename);
它可以给出类似的输出
text/html
image/gif
application/vnd.ms-excel
【讨论】:
【参考方案4】:curl_getinfo 应该可以帮助http://php.net/curl_getinfo 与此问题相关:Get mime type of external file using cURL and php
【讨论】:
以上是关于在没有 MIME 或扩展名的 PHP 中确定文件类型的主要内容,如果未能解决你的问题,请参考以下文章
在 DRUPAL 中验证 PDF 文件上传中的 MIME 类型