如果文件是真实的,我将检查服务器端(PHP)。txt
。目前我写道:
if(substr($_FILES['tracklistFile']['name'], -3)=='txt')
但我认为这不是最好的解决方案!我怎么检查呢?
答案 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);
如果这些都不起作用,我建议至少使用其他答案中讨论的方法确保它不像图片。如果不能使用这些函数,您只能执行检查文件名的不幸方法来确定文件类型,这完全不可靠。
来源: