Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php $U文件[“文件”[“类型”和结束(分解(“,$”U文件[“文件”[“名称”)之间有什么区别_Php_File - Fatal编程技术网

Php $U文件[“文件”[“类型”和结束(分解(“,$”U文件[“文件”[“名称”)之间有什么区别

Php $U文件[“文件”[“类型”和结束(分解(“,$”U文件[“文件”[“名称”)之间有什么区别,php,file,Php,File,我使用var\u dump(@$\u FILES['file']['type'])测试上传的文件类型 首先,我上传了一个名为“uninstall.exe”的exe文件,它返回了 "string 'application/octet-stream' (length=24)" string 'image/png' (length=9) 然后,我将该文件重命名为uninstall.png,它返回 "string 'application/octet-stream' (length=24)" st

我使用
var\u dump(@$\u FILES['file']['type'])
测试上传的文件类型

首先,我上传了一个名为“
uninstall.exe
”的
exe文件,它返回了

"string 'application/octet-stream' (length=24)"
string 'image/png' (length=9)
然后,我将该文件重命名为
uninstall.png
,它返回

"string 'application/octet-stream' (length=24)"
string 'image/png' (length=9)
我的结论是:$\u FILES['file']['type']只检查文件扩展名,而不是原始文件类型。

以下代码来自:

$allowedExts=array(“gif”、“jpeg”、“jpg”、“png”);
$extension=end(分解(“.”,$_文件[“文件”][“名称]);
如果(($_文件[“文件”][“类型”]=“图像/gif”)
||($_文件[“文件”][“类型”]=“图像/jpeg”)
||($_文件[“文件”][“类型”]=“图像/jpg”)
||($_文件[“文件”][“类型”]=“图像/png”))
&&($_文件[“文件”][“大小”]<20000)
&&in_数组($extension$allowedExts))
我认为
$\u文件[“file”][“type”]
在上述代码中是不必要的,我们可以使用
explode()
在\u数组中检查文件扩展名


我只是一个php初学者,有人能证实我的想法吗?谢谢

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

如果要确定已上载图像,请使用,非图像返回0。

您应该使用GD或Imagick扩展名的包装。一个很好的例子是。

是的,我相信我们中的许多人都知道文件类型可以被欺骗。关于不使用w3schoolsThanks的教训,我很高兴我在w3cschool
$\u文件['file']['type']
中发现了一些错误。文件['file']['type']
没有检查扩展名-这是从用户机器发送到请求头中的信息。它可以用作提示(对于非标准文件格式,在用户计算机上可识别,但在服务器上不可识别),但在安全性方面不应被信任。@user1970939在W3上发现错误并不是那么难。。。(还要注意的是,这不是
w3c
学校,而是
w3
学校)我很高兴我的想法得到了证实,有人说:“文件的扩展名和‘文件类型’可能不同,所以有人不能上传带有.png扩展名和$_FILES[“file”][“type”]”的可执行文件。我想他是这样的wrong@user1970939:嗯,实际上,有人可以提供一个名为
file.exe
的文件,其MIME类型为
image/png
。它们都是由客户端提供的,不需要一致。甚至有些JPEG。主要是来自数码相机的JPEG。谢谢你的提醒getimagesize@darthmaim绝对不正确
getimagesize
可以并将成功返回某些非图像。请参阅官方PHP文档中的说明,不要使用
getimagesize
。“不要使用getimagesize()检查给定文件是否为有效图像。请改用专门构建的解决方案,如Fileinfo扩展名。”