PHP通过表单直接提交大文件

PHP 2018-12-18 1739 次浏览 次点赞

我想通过表单直接提交大文件,django 那边我就是这么干的。而对于 php 来说,我认为尽管可以设置最大上传的大小,但最大也无法超过内存大小,因为它无法把文件内容都放到 php://input 里面。直到我试了一下。

试验

我创建内存 256M 的虚拟机,通过表单直接上传 2.4G 的文件,发现居然可以,挺惊讶的:

20181218151451.png

后端是 nginx + php 的方式。反正有关 php.ini 里面需要设置的给它足够大:

# pip.ini
post_max_size = 100000M
upload_max_filesize = 100000M

nginx 在 http 块中添加:

# nginx.conf
client_max_body_size 100000m;

难道 PHP 进化了?我把其他版本试了一下,发现 PHP7.0 及其以上的才能成功,5.6 的就不行了,请求会中断

PS : php5 不能上传大文件是因为 32 位的锅,导致上传大于 2G 的文件会有问题。

可当我上传文件 4G 多的时候又不行了,不知道哪里还需要设置:

20181218145440.png

改用apache试试

apache 我得用本地的 wamp 来。httpd.conf 需要设置:

# httpd.conf
LimitRequestBody 83886080000

apache 版本,一样得7.0以上才能直接上传大文件,但apache可以上传 4G 多的文件,不清楚为什么,难道因为我本地的内存比较大?

20181218143842.png

本机内存 8G ,于是我试了上传个 25G 的文件,也是没问题的:

20181218160019.png

可以可以,很好很强大。

总结

我第一个感觉就是 php 变强了,既然能这么方便上传大文件了,在没有要求进度条的需求里,就可以这么来做了,还蛮方便的。

小结一下本次实验的结果,文件上传不受服务器机身内存大小限制: 选项 Apache Nginx
PHP5 无法上传大于 2G 的文件 无法上传大于 2G 的文件
PHP7 任意大小 无法上传大于 4G 的文件

本文由 hongweipeng 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

赏个馒头吧