Php 使用/usr/bin/file确定文件类型?

Php 使用/usr/bin/file确定文件类型?,php,linux,file,file-upload,identification,Php,Linux,File,File Upload,Identification,我计划使用这个系统程序/usr/bin/file来确定上传的文件内容类型,然后采取相应的行动 这是个好主意还是有什么我应该注意的?(或者使用完全不同的方法)和是确定mime类型的首选方法(在大多数php发行版中通常启用这两种方法中的任何一种)。它们使用与外部工具相同的magic.mime数据库,这就是为什么我只将其用作备用工具 使用外部工具还需要从输出中提取mime类型,因此这在某种程度上涉及到代码: $type = exec("/usr/bin/file -iL " .escapeshellc

我计划使用这个系统程序/usr/bin/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服务器上,通过magic bytes确定文件类型是非常可靠的。

PHP有一个扩展名,它使用相同的机制,但是是PHP固有的。

如果您可以使用PECL扩展名(或者使用PHP>=5.3),我建议您使用该扩展名


如果没有,该函数也可以,但请注意,它现在已被弃用(赞成或fileinfo)

需要更多上下文。。。标签“file upload”表示您正在处理上传的文件,在这种情况下,文件类型应该在请求中?只是一个小提示,因为PHP 5.3默认包含Fileinfo。谢谢,编辑了我的答案。现在我只希望一些遗留代码可以在一夜之间消失,这样我就可以使用5.3。。。