2011-06-16 22 views
2

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

这是一个好主意,还是我应该注意的事情? (或者使用完全不同的东西)

+0

需要更多背景...标签“文件上传”意味着你处理上传文件,在这种情况下文件类型应该在请求中? – chrisdowney 2011-06-16 10:40:52

回答

2

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

3

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服务器上,通过魔术字节确定文件类型是相当可靠的。

1

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

如果没有,mime_content_type()功能会做,但请注意,这是现在已经过时(赞成或FileInfo的)

+1

从PHP 5.3起,只是一个小小的提醒,Fileinfo默认包含在内。 – 2011-06-16 10:43:18

+0

谢谢,编辑我的答案。现在我只希望一些遗留代码可能在一夜之间消失,所以我可以使用5.3 ... – Lepidosteus 2011-06-16 15:21:57