我打算使用这个系统程序/ usr/bin/file来确定上传的文件内容的类型,然后采取相应的行动。使用/ usr/bin/file来确定文件类型?
这是一个好主意,还是我应该注意的事情? (或者使用完全不同的东西)
我打算使用这个系统程序/ usr/bin/file来确定上传的文件内容的类型,然后采取相应的行动。使用/ usr/bin/file来确定文件类型?
这是一个好主意,还是我应该注意的事情? (或者使用完全不同的东西)
PHP有fileinfo扩展名,它使用了相同的机制,但是原生的PHP。
mime_content_type
和finfo_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服务器上,通过魔术字节确定文件类型是相当可靠的。
如果您可以使用PECL扩展(或使用php> = 5.3),我会建议您使用Fileinfo扩展名。
如果没有,mime_content_type()功能会做,但请注意,这是现在已经过时(赞成或FileInfo的)
从PHP 5.3起,只是一个小小的提醒,Fileinfo默认包含在内。 – 2011-06-16 10:43:18
谢谢,编辑我的答案。现在我只希望一些遗留代码可能在一夜之间消失,所以我可以使用5.3 ... – Lepidosteus 2011-06-16 15:21:57
需要更多背景...标签“文件上传”意味着你处理上传文件,在这种情况下文件类型应该在请求中? – chrisdowney 2011-06-16 10:40:52