【问题标题】:Using /usr/bin/file to determine file type?使用 /usr/bin/file 来确定文件类型?
【发布时间】:2011-09-16 06:17:51
【问题描述】:

我打算使用这个系统程序 /usr/bin/file 来确定上传的文件内容类型,然后采取相应的行动。

这是个好主意还是有什么我需要注意的? (或者使用完全不同的东西)

【问题讨论】:

  • 需要更多上下文...标签'file-upload'意味着您正在处理上传的文件,在这种情况下文件类型应该在请求中?

标签: php linux file file-upload identification


【解决方案1】:

mime_content_typefinfo_file 是确定 mime 类型的首选方法(在大多数 php 发行版中通常启用这两种方法)。他们使用与外部工具相同的 magic.mime 数据库,这就是为什么我只将其用作后备工具。

使用外部工具还需要从输出中提取mime类型,所以有点涉及代码:

$type = exec("/usr/bin/file -iL " .escapeshellcmd($fn). " 2>/dev/null");
if ($type = trim(strtok(substr(strrchr($type, ":"), 1), ";"))) {
    return $type;
}

如果您的问题是关于可靠性:是的,这是一个好方法。在当前所有 Linux/U*ix 服务器上,通过魔术字节确定文件类型是非常可靠的。

【讨论】:

    【解决方案2】:

    PHP 有 fileinfo 扩展,它使用相同的机制,但它是 PHP 原生的。

    【讨论】:

      【解决方案3】:

      如果您可以使用 PECL 扩展(或正在使用 php >= 5.3),我建议您使用 Fileinfo 扩展。

      如果不是,mime_content_type() 函数可以,但请注意它现在已被弃用(赞成或 fileinfo)

      【讨论】:

      • 只是一个小提示,从 PHP 5.3 开始,默认包含 Fileinfo。
      • 谢谢,编辑了我的答案。现在我只希望一些遗留代码可以在一夜之间消失,这样我就可以使用 5.3 ...
      猜你喜欢
      • 1970-01-01
      • 2015-10-07
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 2014-01-20
      • 1970-01-01
      • 1970-01-01
      • 2018-07-23
      相关资源
      最近更新 更多