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简介
Oct 09 PHP
解决php中Cannot send session cache limiter 的问题的方法
Apr 27 PHP
php采集时被封ip的解决方法
Aug 29 PHP
PHP设计模式 注册表模式
Feb 05 PHP
PHP中$_SERVER的详细参数与说明介绍
Oct 26 PHP
PHP APC配置文件2套和参数详解
Jun 11 PHP
PHP使用Mysql事务实例解析
Sep 08 PHP
php使用正则表达式去掉html中的注释方法
Nov 03 PHP
PHP实现将标点符号正则替换为空格的方法
Aug 09 PHP
分析php://output和php://stdout的区别
May 06 PHP
php apache开启跨域模式过程详解
Jul 08 PHP
php用wangeditor3实现图片上传功能
Aug 22 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
PHP压缩html网页代码(清除空格,换行符,制表符,注释标记)
2012/04/02 PHP
php实现读取和写入tab分割的文件
2015/06/01 PHP
如何用javascript控制上传文件的大小
2006/10/26 Javascript
Prototype 学习 工具函数学习($A方法)
2009/07/12 Javascript
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
2014/09/03 Javascript
jQuery on方法传递参数示例
2014/12/09 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
2016/04/29 Javascript
JavaScript易错知识点整理
2016/12/05 Javascript
jQuery移除或禁用html元素点击事件常用方法小结
2017/02/10 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
React 使用browserHistory项目访问404问题解决
2018/06/01 Javascript
layer.open的自适应及居中及子页面标题的修改方法
2019/09/05 Javascript
layui实现checkbox的目录树tree的例子
2019/09/12 Javascript
一起来了解一下JavaScript的预编译(小结)
2021/03/01 Javascript
在Python中用has_key()方法查找键是否存在的教程
2015/05/21 Python
Python中生成Epoch的方法
2017/04/26 Python
python购物车程序简单代码
2018/04/18 Python
Python数据持久化shelve模块用法分析
2018/06/29 Python
Python面向对象之反射/自省机制实例分析
2018/08/24 Python
python版飞机大战代码分享
2018/11/20 Python
Python Django2.0集成Celery4.1教程
2019/11/19 Python
python序列化与数据持久化实例详解
2019/12/20 Python
pandas 对group进行聚合的例子
2019/12/27 Python
基于Django OneToOneField和ForeignKey的区别详解
2020/03/30 Python
python 三种方法提取pdf中的图片
2021/02/07 Python
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
html5使用canvas压缩图片的示例代码
2018/09/11 HTML / CSS
html5使用window.postMessage进行跨域实现数据交互的一次实战
2021/02/24 HTML / CSS
EGO Shoes美国/加拿大:英国时髦鞋类品牌
2018/08/04 全球购物
Timberland德国官网:靴子、鞋子、衣服、夹克及配件
2019/12/10 全球购物
小学三八妇女节活动方案
2014/03/16 职场文书
教育合作协议范本
2014/10/17 职场文书
有限责任公司股东合作协议书
2014/12/02 职场文书
幼儿园小班教师随笔
2015/08/14 职场文书