php上传大文件失败的原因及应对策略


Posted in PHP onOctober 20, 2015

为什么上传大文件总是失败,但是上传小文件就没有问题。小编也不得其解,网上搜其原因,整理了一篇关于php上传大文件失败的原因和解决办法的文章,分享给大家。

php上传大文件失败的原因及应对策略

下面分别是各种原因以及解决办法:
第1种情况:文件上传时存放文件的临时目录必须是开启的并且是 PHP 进程所有者用户可写的目录。如果未指定则 PHP 使用系统默认值。
php.ini文件中upload_tmp_dir用来说明PHP上传的文件放置的临时目录,要想上传文件,得保证服务器没有关闭临时文件并对该文件夹有写入的权限。

第2种情况:max_execution_time 的值必须足够大。变量 max_execution_time 设置了在强制终止脚本前PHP等待脚本执行完毕的时间,此时间以秒计算。当脚本进入了一个无限循环状态时此变量非常有用。然而,当存在一个需要很长时间完成的合法活动时(例如上传大型文件),这项功能也会导致操作失败。在这样的情况下必须考虑将此变量值增大,以避免PHP在脚本正在执行某些重要过程的时候将脚本关闭,例如设置为 90 秒。
max_execution_time = 90
注意在php函数中还有个set_time_limit 函数,和以上这个设置的作用是相同的,这两者的区别就是 以上是在 php.ini 文件中设置的,而set_time_limit 是写在php文件中的。所以也可以通过在页面中用 set_time_limit 设置程序的最长执行时间,比如无限制即:set_time_limit(0);

第3种情况:file_uploads = On 默认值为on,意思是允许通过 HTTP 进行文件上传,此选项不能设置为OFF。

第4种情况:upload_max_filesize = 2M 设定文件上传的大小的最大值,php.ini配置文件中的默认文件上传大小为2M,php初学者容易犯的一个错误是在编写文件上传功能时通过设置上传文件最大大小的表单区域,即允许上传文件的最大值,max_file_size(隐藏值域)的值来规定上传文件的大小,其实一般别人可以绕过这个值,所以安全起见,最好是在 php.ini 配置文件中配置 upload_max_filesize 选项,设定文件上传的大小。默认 upload_max_filesize = 2M,即文件上传的大小为2M,如果你想上传超过8M的文件,比如20M,你必须设定upload_max_filesize = 20M。

第5种情况:post_max_size 这个值也必须足够大。这个变量也是一个同表单提交相关的变量,它限制的是客户端通过POST方法进行一次表单提交时PHP程序所能够接收的最大数据量。一般情况下,将此值的值设置的比 upload_max_filesize 略大即可,比如要上传20MB的文件,此值可以设置为 21MB。

第6种情况:max_input_time 此变量可以以秒为单位对通过POST、GET以及PUT方式接收数据时间进行限制。如果应用程序所运行环境处在网络比较慢的情况下,则需要增加此值以增大接收数据所需要的时间,比如将此值设置为 90秒。
max_input_time = 90

第7种情况:memory_limit 也必须足够大,为了避免正在运行的脚本大量使用系统可用内存,PHP允许定义内存使用限额。通过memory_limit变量来指定单个脚本程序可以使用的最大内存容量。变量memory_limit的值应当适当大于post_max_size的值。

第8种情况:另外如果你的主机是 nginx 操作系统的话,如果以上操作都不行的话,记得在nginx 的配置文件里面加上 client_max_body_size 20m; 这样一句,即表示最大允许上传20MB,具体根据自己的情况来。我的nginx 配置文件的位置在 /usr/local/nginx/conf/nginx.conf。

阅读完这篇文章大家应该大概知道大文件上传失败的原因了吧,希望本文可以为大家提供一些思路,更好的去解决类似问题。

PHP 相关文章推荐
PHP编程之高级技巧——利用Mysql函数
Oct 09 PHP
PHP无刷新上传文件实现代码
Sep 19 PHP
php实现的一个很好用HTML解析器类可用于采集数据
Sep 23 PHP
ThinkPHP之import方法实例详解
Jun 20 PHP
php的XML文件解释类应用实例
Sep 22 PHP
ThinkPHP中I(),U(),$this->post()等函数用法
Nov 22 PHP
ThinkPHP安装和设置
Jul 27 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
Dec 14 PHP
php实现的统计字数函数定义与使用示例
Jul 26 PHP
PHP 记录访客的浏览信息方法
Jan 29 PHP
PHP 实现手机端APP支付宝支付功能
Jun 07 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
Dec 18 PHP
PHP中如何使用session实现保存用户登录信息
Oct 20 #PHP
PHP+jQuery翻板抽奖功能实现
Oct 19 #PHP
php生成动态验证码gif图片
Oct 19 #PHP
php批量删除超链接的实现方法
Oct 19 #PHP
php二维码生成
Oct 19 #PHP
部署PHP时的4个配置修改说明
Oct 19 #PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
Oct 19 #PHP
You might like
《逃离塔科夫》——“萌新劝退,老手自嗨”的硬核FPS游戏
2020/04/03 其他游戏
分页显示Oracle数据库记录的类之二
2006/10/09 PHP
PHP 伪静态技术原理以及突破原理实现介绍
2013/07/12 PHP
php实现Session存储到Redis
2015/11/11 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
2019/02/25 PHP
JavaScript获取XML数据附示例截图
2014/03/05 Javascript
javascript中with()方法的语法格式及使用
2014/08/04 Javascript
jquery限定文本框只能输入数字(整数和小数)
2016/01/08 Javascript
AngularJS全局scope与Isolate scope通信用法示例
2016/11/22 Javascript
JavaScript原型继承_动力节点Java学院整理
2017/06/30 Javascript
vue.js全局API之nextTick全面解析
2017/07/07 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
快速解决bootstrap下拉菜单无法隐藏的问题
2018/08/10 Javascript
Vue中util的工具函数实例详解
2019/07/08 Javascript
vue 实现Web端的定位功能 获取经纬度
2019/08/08 Javascript
[01:16]2014DOTA2 TI专访C9战队EE:中国五强中会占三席
2014/07/10 DOTA
利用python实现数据分析
2017/01/11 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
2017/05/19 Python
python3使用pyqt5制作一个超简单浏览器的实例
2017/10/19 Python
深入理解Python分布式爬虫原理
2017/11/23 Python
python 划分数据集为训练集和测试集的方法
2018/12/11 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
Python 实现遥感影像波段组合的示例代码
2019/08/04 Python
Python直接赋值及深浅拷贝原理详解
2020/09/05 Python
HTML5 Plus 实现手机APP拍照或相册选择图片上传功能
2016/07/13 HTML / CSS
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2014/01/19 面试题
国贸专业个人求职信分享
2013/12/04 职场文书
行政办公员自我评价分享
2013/12/14 职场文书
中专生职业生涯规划书范文
2014/01/10 职场文书
宿舍保安职务说明书
2014/02/25 职场文书
乡镇总工会学雷锋活动总结
2014/03/01 职场文书
考试诚信承诺书
2014/05/23 职场文书
2014年调度员工作总结
2014/11/19 职场文书
七年级之家长会发言稿范文
2019/09/04 职场文书
HTML5中 rem适配方案与 viewport 适配问题详解
2021/04/27 HTML / CSS