在PHP中识别文件类型的最佳方法

7

在php中,发现文件的文件类型的最佳方法是什么?我听说浏览器可能会被欺骗,那么有没有更好的方法呢?

4个回答

14
你可以使用 finfo_file 函数。
<?php
echo finfo_file(finfo_open(FILEINFO_MIME), "foo.png");
?>

1
请注意,此方法存在其自身的问题(例如返回空字符串或模棱两可的字符串)。 - Sampson

6

5
我认为你的意思是使用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);
?>

3

浏览器返回的Content-Type是不可信的。它基于文件扩展名,很容易被欺骗。

正如stalepretzel所提到的,猜测文件内容类型的最佳方法是使用魔数。如果您的服务器在*nix机器上运行,可以使用此函数:

<?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 以获取更多信息。


2
请注意,使用shell_exec可能存在安全问题。 - josh123a123

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