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

2022-08-30 23:20:55

抱歉,如果它是微不足道的或明显的,但我无法通过谷歌搜索找到答案。

数组中的值从何而来?您可以信任它的值()还是应该仍然使用该函数检查它?size$_FILES['name']$_FILES['name']['size']filesize()

换句话说,是否有必要按功能检查实际文件大小以注意是否正确上传?filesize


答案 1

如果文件上传正确并且一切正常,则可以使用PHP超级全球提供的信息。使用会增加很小的开销,因为操作系统需要检查文件的大小。这取决于你,但是检查PHP源代码是如何做到这一切的,清楚地表明它正确地计算了HTTP多部分请求中的文件大小。基本上,如果您要处理该文件,您将再次执行相同的工作。$_FILESfilesize()filesize()

您可以直接从超全局变量中信任这一点的原因是,多部分请求提供了数据驻留的边界。根据定义,如果不遵循提取数据的协议,则无法获取损坏的数据。换句话说,这意味着浏览器发送一个“分隔符”,PHP只需找到它并开始检查该分隔符之间的数据文本。为此,它可以准确地分配所需的内存,并且可以立即缓存分配的数量 - 该数字就是文件大小。如果在此过程中出现任何问题,您将遇到错误。因此,如果文件正确上载,则有关大小的信息是受信任的。


答案 2

PHP似乎在上传后重新计算了文件的大小。尽管客户端确实发送了一个指定文件的标头,但基于测试(使用 PHP 5.5),此标头被简单地忽略,而是测量长度。就个人而言,我总是使用来获取文件大小,因为您可以对正在使用的测量值更有信心,但这最终取决于您。无论哪种方式,似乎都是一个安全的值。content-lengthfilesize()$_FILES['file_name']['size']


推荐