PHP大文件上传解决方案

分块上传

https://github.com/peinhu/aetherupload-laravel 分块上传插件

原理使用浏览器对文件的分块slice()方法,后端php使用file_put_contents()FILE_APPEND 的追加写入数据功能,或者fopen() 函数的 a+模式

直接上传

适合局域网项目

php-fpm配置文件修改

request_terminate_timeout = 120  设置单个请求的超时中止时间。该选项可能会对 php.ini 设置中的 'max_execution_time' 因为某些特殊原因没有中止运行的脚本有用。

php.ini配置修改

upload_max_filesize = 2048M 最大文件大小

post_max_size = 2048M  post传输最大文件大小

max_execution_time = 600 php脚本最大运行时间

max_input_time = 600 脚本解析输入数据(类似 POST 和 GET)允许的最大时间,单位是秒。 它从接收所有数据到开始执行脚本进行测量的。

nginx配置修改

client_max_body_size 4096m; 客户端请求的最大主体内容

fastcgi_connect_timeout 600 指定nginx与后端fastcgi server连接超时时间

fastcgi_send_timeout 600 指定nginx向后端传送请求超时时间(指已完成两次握手后向fastcgi传送请求超时时间)

fastcgi_read_timeout 600 指定nginx接受后端fastcgi响应请求超时时间 (指已完成两次握手后nginx接受fastcgi响应请求超时时间)