如何检查文件类型

时间:2011-04-23 18:52:53

标签: php

如果文件是真实的,我将检查服务器端(PHP)。txt。目前我写道:

if(substr($_FILES['tracklistFile']['name'], -3)=='txt')

但我认为这不是最好的解决方案!我怎么检查呢?

3 个答案:

答案 0 :(得分:3)

要可靠地获取文件扩展名,请使用:

pathinfo($_FILES['tracklistFile']['name'], PATHINFO_EXTENSION);

然而,这只会给你一个 - 文件名的扩展部分。它没有说明文件的实际类型。

如果文件是服务器上的本地文件(而不是上载文件),则可以在大多数基于Unix的操作系统上调用file命令。

答案 1 :(得分:2)

  

嗯...例如,如果用户将picture.jpg称为picture.txt,则此检查将失败,并且我的脚本可能会产生许多错误:)将无法控制:)

好的,但除了有效的文本文件之外,您会以什么标准告诉无效的JPG?理论上,文本文件可以包含任何。它没有任何定义的格式,它只包含许多完全任意的字节。

@Sardine建议的MIME类型检测会遇到同样的问题;但是,它将能够检测到文本文件的许多文件类型,因此您可以拒绝这些文件类型。不过,它不会100%可靠。

您需要考虑一些允许您识别文本文件的规则,具体取决于您的脚本将对它们执行的操作。

如果只是为了找出它是否是文本文件,我会考虑根本不做任何检查。您只需确保在应用程序的每个步骤中将其视为文本文件(即,如果它包含PHP,JavaScript或HTML代码,则不会执行它。)

答案 2 :(得分:2)

如果可能,您可以检查文件的mime类型,该类型应为

text/plain

遗憾的是,这是PHP中的一项棘手任务。如果您使用的是PHP4,则可以使用以下命令:

$mtype = mime_content_type($file_path);

如果你有PHP> = 5.3.0& PECL fileinfo> = 0.1.0,你可以使用类似的东西:

$finfo = finfo_open(FILEINFO_MIME);
$mtype = finfo_file($finfo, $file_path);
finfo_close($finfo);

如果这些都不起作用,我建议至少使用其他答案中讨论的方法确保它不像图片。如果不能使用这些函数,您只能执行检查文件名的不幸方法来确定文件类型,这完全不可靠。

来源:

  

http://www.php.net/manual/en/book.fileinfo.php

     

http://forums.digitalpoint.com/showthread.php?t=522166