如果文件是真实的,我将检查服务器端(PHP)。或者不是。目前我写道:如何检查文件类型
if(substr($_FILES['tracklistFile']['name'], -3)=='txt')
但我认为它不是最好的解决方案!我如何检查它?
如果文件是真实的,我将检查服务器端(PHP)。或者不是。目前我写道:如何检查文件类型
if(substr($_FILES['tracklistFile']['name'], -3)=='txt')
但我认为它不是最好的解决方案!我如何检查它?
为了可靠地获取文件扩展名,使用此:
pathinfo($_FILES['tracklistFile']['name'], PATHINFO_EXTENSION);
这将,但是,只给你这样 - 文件名的扩展部分。它没有提到文件的实际类型。
如果文件是服务器上的本地文件(而不是上载文件),则可以在大多数基于Unix的操作系统上调用file命令。
呃... ...例如,如果用户呼叫picture.jpg作为picture.txt该检查将失败,和我的脚本可以创建许多错误:)不会受到控制:)
好的,但是除了有效的文本文件外,您会以什么标准告诉无效的JPG?理论上文本文件可以包含任何东西。它没有定义的格式,它只是由许多完全任意的字节组成。
@Sardine建议的MIME类型检测将会有同样的问题;但是,它将能够检测到许多文件类型,而不是文本文件,因此您可以拒绝这些文件类型。不过,它不会100%可靠。
您需要考虑一些允许您识别文本文件的规则,具体取决于您的脚本将如何处理它们。
如果只是为了查明它是否是一个文本文件,我会考虑不做任何检查。您只需确保它在应用程序的每个步骤中都被视为文本文件(即,如果它包含PHP,JavaScript或HTML代码,则不会执行它)。
事实上,我发现如果我将我的文件命名为'$ tracklistFile_name = time()。rand(1,1000)',然后使用'move_uploaded_file'(不带扩展名)移动它,它就可以正常工作。 – markzzz 2011-04-23 23:27:38
如果可能的话,您可以检查该文件的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);
如果这些都不起作用,我会建议至少确保它不像使用其他答案中讨论的方法的图片那样。如果不能使用这些功能,只能通过检查文件名的不幸方法来确定文件类型,这种方式根本不可靠。
来源:
只是想说明您可能想使用'FILEINFO_MIME_TYPE'而不是'FILEINFO_MIME'。伟大的发现否则! – Cashew 2013-02-06 06:47:30
让我们问倒过来:你会*不*是一个真正的文本文件?你需要使用什么标准? – 2011-04-23 18:53:49
呃...例如,如果用户调用'picture.jpg'作为'picture.txt',这个检查将失败,并且我的脚本可能会产生很多错误:)将不受控制:) – markzzz 2011-04-23 18:54:56
与真实话题无关,而不是片状'substr -3'你应该用'(strrchr($ _ FILES [“whatever”] [“name”],“。”)==“.txt”)' – mario 2011-04-23 19:01:40