7

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初学者,有人可以证实我的想法吗?谢谢!

4

3 回答 3

7

如果您想确保已上传图像,请使用getimagesize,对于非图像返回 0。

于 2013-03-24T22:54:01.860 回答
6

你完全正确。MIME 类型由客户端提供,您不能保证它是正确的。就此而言,文件扩展名也是如此。如果您需要完全确定,则需要查看文件内容。

于 2013-03-24T22:49:40.667 回答
1

您应该使用 GD 或 Imagick 扩展的包装器。一个非常好的是WideImage

于 2013-03-24T23:24:06.977 回答