什么是发现PHP中的文件的文件类型的最佳方式?我听说浏览器可能被欺骗,所以什么是这样做的更好的办法?

有帮助吗?

解决方案

可以使用 finfo_file

<?php
echo finfo_file(finfo_open(FILEINFO_MIME), "foo.png");
?>

其他提示

看“幻数”。文件的前几个字节通常确定它是什么类型的文件。例如,GIF的firts几个字节或者是47 49 46 38 37 61或47 49 46 38 39 61,ASCII为GIF89a的或GIF87a。还有很多其他“幻数”。请参阅 http://en.wikipedia.org/wiki/Magic_number_(编程)#Magic_numbers_in_files

编辑:我相信这是比在PHP MIME功能更可靠的

我想你的意思 finfo_file()发现MIME类型

这php.net示例:

<?php
$finfo = finfo_open(FILEINFO_MIME); // return mime type ala mimetype extension
foreach (glob("*") as $filename) {
    echo finfo_file($finfo, $filename) . "\n";
}
finfo_close($finfo);
?>

您无法通过浏览器返回的Content-Type的信任。它是基于文件扩展名,可以很容易欺骗。

作为<强> stalepretzel 提到,猜测文件内容类型最好的办法是使用幻数。如果你的服务器是Unix和Linux机器上运行,你可以使用此功能:

<?php

function get_file_type($file) {
  if(function_exists('shell_exec') === TRUE) {
    $dump = shell_exec(sprintf('file -bi %s', $file));
    $info = explode(';', $dump);
    return $info[0];
  }
  return FALSE;
}

?>

Usage: $file_type = get_file_type('my_file_name.ext');

PD:检查/usr/share/magic.mime到更多信息

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top