为什么php file_info为空文本文件返回inode / x-empty?

时间:2014-06-03 12:20:02

标签: php

我目前正在开发一个包装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功能的默认行为吗?

2 个答案:

答案 0 :(得分:4)

是的,因为文件扩展名没有定义文件类型。例如,您可以将视频文件的扩展名从.mp4更改为.txt,并仍在播放器中播放视频。 Windows确实更严格地处理文件扩展,但在unix系统中,扩展更像是用户的类型提示,然后它真正意味着系统本身的某些东西(尽管有例外)。

文件信息功能查看文件的内容,并尝试根据它在那里找到的mime类型来确定。

如果你想白名单文本/纯文本,还有空文本文件,你可以使用pathinfo()做这样的事情:

if($mime_type == 'inode/x-empty' && pathinfo($file_name, PATHINFO_EXTENSION) == 'txt') {
    // whitelist
}

答案 1 :(得分:2)

来自documentation

  

返回filename参数的内容的文本描述,如果发生错误,则返回FALSE。

(强调我的)。如您所见,它基于内容,而不是名称。