我使用var_dump(@$_FILES['file']['type'])
来测试我上传的文件类型
首先,我上传了名为“exe file
”的uninstall.exe
,然后又返回了
"string 'application/octet-stream' (length=24)"
然后,我将此文件重命名为uninstall.png
,它返回
string 'image/png' (length=9)
我的结论是: $ _ FILES ['file'] ['type']只检查文件扩展名,而不是原始文件类型。
以下代码来自w3cschool:
$allowedExts = array("gif", "jpeg", "jpg", "png");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts))
我认为上述代码中的$_FILES["file"]["type"]
是不必要的,我们只需使用explode()
和in_array
检查文件扩展名
我只是一个php初学者,有人可以证实我的想法吗?谢谢!
答案 0 :(得分:7)
如果您想确保上传图片,请使用getimagesize,对于非图片,返回0。
答案 1 :(得分:5)
你是完全正确的。 MIME类型由客户端提供,您无法保证它是正确的。就此而言,文件扩展名也是如此。如果您需要完全确定,则需要查看文件内容。
答案 2 :(得分:1)
您应该使用GD或Imagick扩展的包装器。一个非常好的是WideImage。