你能相信PHP中$\u FILES数组给出的文件大小吗?

你能相信PHP中$\u FILES数组给出的文件大小吗?,php,security,post,filesize,Php,Security,Post,Filesize,抱歉,如果它是琐碎的或明显的,但我无法通过谷歌搜索找到答案 $\u文件['name']数组中的size值来自何处?您是否可以信任它的值($\u FILES['name']['size']),或者仍然应该使用filesize()函数检查它 换句话说,是否有必要通过filesize函数检查实际文件大小,以注意文件是否正确上载?PHP似乎会在文件上载后重新计算文件大小。尽管客户端确实发送了一个头,指定文件的内容长度,但基于测试(使用PHP5.5),该头被忽略,而是测量长度。就我个人而言,我总是使用fi

抱歉,如果它是琐碎的或明显的,但我无法通过谷歌搜索找到答案

$\u文件['name']
数组中的
size
值来自何处?您是否可以信任它的值(
$\u FILES['name']['size']
),或者仍然应该使用
filesize()
函数检查它


换句话说,是否有必要通过
filesize
函数检查实际文件大小,以注意文件是否正确上载?

PHP似乎会在文件上载后重新计算文件大小。尽管客户端确实发送了一个头,指定文件的
内容长度
,但基于测试(使用PHP5.5),该头被忽略,而是测量长度。就我个人而言,我总是使用
filesize()
来获取文件大小,因为您可以对使用哪种度量更有信心,但最终取决于您。无论哪种方式,
$\u文件['file\u name']['size']
似乎是一个安全的使用值。

您应该检查客户端报告的
$\u文件['file\u name']['size']
是否等于
文件大小()
给出的值。差异可能表示上传文件传输过程中出错。

如果文件上传正确且一切正常,您可以使用PHP superglobal
$\u文件提供的信息。使用
filesize()
会增加较小的开销,因为操作系统需要检查文件的大小。这取决于您,但是检查PHP source如何完成所有这些工作清楚地表明它正确地计算了HTTP多部分请求中的文件大小。基本上,如果要
filesize()
文件,您将再次执行相同的工作


您可以直接从超全局变量信任它的原因是,多部分请求提供了数据驻留的边界。根据定义,如果不遵守提取数据的协议,就不可能获取损坏的数据。换句话说,这意味着浏览器发送一个“分隔符”,PHP只需找到它并开始检查文本中该分隔符之间的数据。要做到这一点,它可以准确地分配所需的内存,并且可以立即缓存所分配的数量——该数量就是文件大小。如果一路上有什么不对劲,你就会犯错误。因此,如果文件上载正确,则有关大小的信息是可信的。

您确定吗?从我阅读的理解来看,结果大小反映了从多部分部件主体读取的字节数。@Gumbo有趣的是,从我阅读的内容来看,它是由客户端指定的,而
upload\u max\u filesize
在上载时使用测量的计数。我会试着做些测试,然后再打给你。@Gumbo是的,你完全正确。PHP似乎在上传后重新计算它。可能重复