我目前正在开发一个包装finfo_file函数的类。
以下脚本为所有空文本文件返回inode/x-empty
:
$finfo = finfo_open(FILEINFO_MIME_TYPE);
echo finfo_file($finfo,'/path/to/text_file.txt');
在以下环境中测试并收到相同的结果。
WAMP
Windows 7
PHP 5.4.27
APACHE 2.2.22
的Linux
Ubuntu的
PHP 5.5.10
APACHE 2.4.9
我的目标是设置类,以便我可以列出文件类型。如果MIME类型text/plain
是白名单,则空文本文件将失败,因为它返回MIME类型inode/x-empty
。
这是finfo_file
功能的默认行为吗?
答案 0 :(得分:4)
是的,因为文件扩展名没有定义文件类型。例如,您可以将视频文件的扩展名从.mp4更改为.txt,并仍在播放器中播放视频。 Windows确实更严格地处理文件扩展,但在unix系统中,扩展更像是用户的类型提示,然后它真正意味着系统本身的某些东西(尽管有例外)。
文件信息功能查看文件的内容,并尝试根据它在那里找到的mime类型来确定。
如果你想白名单文本/纯文本,还有空文本文件,你可以使用pathinfo()
做这样的事情:
if($mime_type == 'inode/x-empty' && pathinfo($file_name, PATHINFO_EXTENSION) == 'txt') {
// whitelist
}
答案 1 :(得分:2)