PHP上传文件大小限制的问题(转)

在用PHP进行文件上传的操作中,需要知道怎么控制上传文件大小的设置,而文件可传大小是受到多种因素制约的,现总结如下:
1、php.ini:upload_max_filesize 所上传的文件的最大大小。默认值2M。

2、php.ini:memory_limit 本指令设定了一个脚本所能够申请到的最大内存字节数,默认值8M。如果不需要任何内存上的限制,必须将其设为 -1。如果内存不够,则可能出现错误:Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes)

3、php.ini:post_max_size 设定POST数据所允许的最大大小。此设定也影响到文件上传。要上传大文件,该值必须大于 upload_max_filesize。

4、php.ini:max_execution_time = 30 ; Maximum execution time of each script, in seconds

5、php.ini:max_input_time = 60 ; Maximum amount of time each script may spend parsing request data

6、如果用到mysql的BLOB进行二进制文件存储,则需要设置my.ini:max_allowed_packet=xxM

7、httpd.conf
在 Apache 里面有一个选项是 LimitRequestBody,这个选项可以限制用户送出的 HTTP 请求内容。这个选项可以在 .htaccess 或 httpd.conf 里使用,而如果在 httpd.conf 内使用,分别可以用在 virtualhost 或目录属性设定。而 LimitRequestBody 的设定值是介乎 0 (无限制) 至 2147483647 (2GB)。
例如要在目录 D:/AppServ/www 设定上传限制为 100K,可以在 .htaccess 或 httpd.conf 加入以下语句:

  • LimitRequestBody 1024000000
  • Options Indexes FollowSymLinks MultiViews ExecCGI
  • AllowOverride All
  • Order allow,deny
  • Allow from all

LimitRequestBody 1024000000Options Indexes FollowSymLinks MultiViews ExecCGIAllowOverride AllOrder allow,denyAllow from all


如果透过 .htaccess 设定,储存档案后会立即生效;如透过 httpd.conf 设定,须要重新启动 Apache。
PHP关于文件上传部分,特别提到表单隐藏域:MAX_FILE_SIZE,意思是接收文件的最大尺寸。文档中给出的例子如下:


  • <form enctype="multipart/form-data" action="_URL_" method="POST">
  • <input type="hidden" name="MAX_FILE_SIZE" value="30000">
  • Send this file: <input name="userfile" type="file">
  • <input type="submit" value="Send File">
  • form>

     Send this file:      



这里设置MAX_FILE_SIZE = 30000,期待一种可能,使得浏览器在传送文件之前能够依此作出预先判断,如果文件尺寸大于30000字节,则不执行实际的POST动作。也就是不往服务器发送文件内容,而是直接在客户端提醒用户“你试图上传的文件超过30000字节”。
这的确是一个非常棒的主张,但在现实中却暂时无法实现。不是因为这个限制可以“被简单地绕过”,而是IE和FireFox这两个主流浏览器都不支持这个特性。PHP的这个建议尚未被采纳。

MAX_FILE_SIZE还有一个用场:后台PHP会判断接收到的文件大小是否大于这个值,如果超出,$_FILES['thisfile']['error']会被设置为UPLOAD_ERR_FORM_SIZE(2),同时放弃保存临时文件,将$_FILES['thisfile']['size']置0。
这个例子,没问题,表现正常,当我试图上传一个40多K的文件时,PHP程序报告“文件超过MAX_FILE_SIZE”。
但是,如果我们将表单中的MAX_FILE_SIZE从30000减少到1000,情形又如何呢?
  • 上传800字节的文件,正常;
  • 上传40K的文件,PHP报告文件过大,也正常;
  • 上传3000个字节的文件,PHP未报告错误,它成功保存了文件!出乎意料!
问题就出在main/rfc1867.c中判断文件是否超长的这部分代码上。php每次从buffer中读取FILLUNIT字节长度的内容后,首先判断“已经读到的内容长度(total_bytes)”是否大于MAX_FILE_SIZE,然后再增加“已经读到的内容长度(total_bytes)”。这样一来,和预计的结果之间至多会有FILLUNIT字节的误差,而FILLUNIT=1024*5=5K。(点击bug了解详细内容)
这就是说,当MAX_FILE_SIZE<5K时,上传一个大于MAX_FILE_SIZE,但是小于5K的文件是没有问题的。
当然,因为这个设置很容易被绕过,所以服务器端编程不应当依赖于MAX_FILE_SIZE。而且,5K到底是个很小的数值,对大多数上传文件的表单来说没有影响。
PHP中post_max_size,upload_max_filesize, MAX_FILE_SIZE的设置,和客户端上传给服务器端的流量大小无关。
Apache服务器从客户端接收长度不超过LimitRequestBody字节数的请求,然后传送给php模块,php模块再决定是否保存成临时文件,设置$_FILES全局变量,移交给script进一步处理。
这个Apache的LimitRequestBody选项缺省值=0,允许Request body的最大字节数是2G(Linux + Apache)
最后还要注意的是:
html本身能够post数据也是有限制的,不能超过2G。
FTP客户端有文件偏移指针的2GB边界限制,未使用特殊编译flag编译的ftp服务器端或者客户端,无论在什么FS中都不支持大于2GB的文件。不知道PHP会不会也有这种情况。

转载于:https://www.cnblogs.com/qq78292959/p/4127764.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472739.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 集合框架(List、Set、Map、Iterator、Stack、Properties)

文章目录1. ArrayList2. LinkedList3. HashSet4. TreeSet5. Iterator、ListIterator6. HashMap7. TreeMap8. Stack9. Properties 类读写简单 数据库相关文献&#xff1a;https://www.runoob.com/java/java-collections.html 1. ArrayList 类似动态数组 ArrayList al new Arr…

js获取当前url_javascript如何获取当前URL的主机名?

在javascript中可以使用location对象的hostname属性或者host属性来获取当前URL的主机名&#xff0c;下面本篇文章就来带大家认识这两种属性&#xff0c;希望对大家有所帮助。使用location hostname属性location hostname属性是用于返回当前URL的主机名&#xff1b;它会返回一个…

java访问数据库方式_java数据库访问(二)—JDBC方式(配合连接池)

上文记录了最基础的JDBC连接数据库的方法&#xff0c;但能看出一个问题&#xff0c;就是要不断的重复去创建connection和关闭connection&#xff0c;如果在对数据库的访问比较频繁的情况下&#xff0c;这种处理方式方式在性能方面是不合适的&#xff0c;下面使用JDBC配合数据库…

超频真的不难!G3258超频4.5GHz全攻略

奔腾G3258搭配主板详解【pconline 应用】目前DIY市场上最火热的装机组合莫过于奔腾20周年纪念版处理器G3258搭配B85芯片组主板&#xff0c;只要通过适当的超频&#xff0c;相对较低投入也能来不错的性能体验&#xff0c;因此在奔腾G3258还没上市时&#xff0c;业界对其充满期待…

python算法入门_GitHub标星2.6万!Python算法新手入门大全

问耕 发自 凹非寺量子位 出品 | 公众号 QbitAI今天推荐一个Python学习的干货。几个印度小哥&#xff0c;在GitHub上建了一个各种Python算法的新手入门大全&#xff0c;现在标星已经超过2.6万。这个项目主要包括两部分内容&#xff1a;一是各种算法的基本原理讲解&#xff0c;二…

Java enum枚举

文章目录1. 枚举例子2. 接口的实现3. 枚举中定义抽象方法enum 定义了枚举类型&#xff0c;其继承于 Enum 枚举类 1. 枚举例子 import java.util.EnumMap; import java.util.EnumSet; import java.util.Iterator; import java.util.Map;class EnumDemo {public enum Color{RED…

mysql写什么不同_mysql - 编译配置PHP时,两种配置写法有什么不同

在编译PHP时,--with-扩展库DIR--enable-扩展库这两种配置有什么不同回复内容&#xff1a;在编译PHP时,--with-扩展库DIR--enable-扩展库这两种配置有什么不同很明显是取值的不同&#xff1a;with 后面可以为空&#xff0c;即默认值;可以是路径;可以是功能名称enable 后面不能有…

Java入门到精通——基础篇之static关键字

一、概述static 关键字是声明静态变量&#xff0c;静态方法用的。static的含义是属于类且不属于类对象的变量和函数。二、static的产生。在创建对象的时候除非用new创建那个类的对象&#xff0c;否则实际上并没有获得任何对象只有当执行new来创建对象时数据存储空间才被分配&am…

Java 给编译器看的注释--Annotation

文章目录1. 系统内建的Annotation2. 自定义Annotation3. Retention4. 反射 与 Annotation5. Target6. Documented7. Inherited将配置直接写入到程序之中&#xff1a;Annotation 1. 系统内建的Annotation Override&#xff0c;Deprecated&#xff0c;SuppressWarnings 等 cla…

kafka启动_Kafka安装部署——单节点

1.1 Kafka的单节点部署在实际的工作中&#xff0c;经常使用Kafka作为消息队列&#xff0c;然而并不是每一种业务场景都需要集群版的Kafka&#xff0c;有时单节点的Kafka就能满足了业务的需求。以下就是单节点kafka的部署流程&#xff1a;1.1.1 安装包下载从Kafka官网下载最…

mysql怎么多表备份_学习MySQL多表操作和备份处理

【IT168 服务器学院】前面我们熟悉了数据库和数据库表的基本操作&#xff0c;现在我们再来看看如何操作多个表。多表操作在一个数据库中&#xff0c;可能存在多个表&#xff0c;这些表都是相互关联的。我们继续使用前面的例子。前面建立的表中包含了员工的一些基本信息&#xf…

Maven 入门 (1)—— 安装

Maven 入门 &#xff08;1&#xff09;—— 安装 http://blog.csdn.net/kakashi8841/article/details/17371837 1、下载maven安装包 http://maven.apache.org/download.cgi 2、基于Unix的操作系统&#xff08;Linux、Solaris 和 Mac OS X&#xff09; 解压上面下载的包&#xf…

中文新闻分类 数据集_三亚试点用大数据推行垃圾分类:刷卡扔垃圾,分类有奖励|界面新闻...

文丨海南日报 高懿 周月光10月19日电 &#xff0c;垃圾分类如何推行&#xff1f;三亚市引进智能装备&#xff0c;在6个社区开展试点&#xff0c;运用大数据分析&#xff0c;通过行为激励&#xff0c;引导市民积极配合垃圾分类。19日上午&#xff0c;记者现场采访试点社区垃圾分…

为什么a*算法采用哈密尔顿距离作为启发函数比不在位数为启发函数的性能要好?_KDD2019: 使用神经网络为A*搜索算法赋能 --以个性化路径推荐为例...

本文系 KDD2019 论文的解读&#xff1a;Wang, Jingyuan, Ning Wu, Wayne Xin Zhao, Fanzhang Peng, and Xin Lin. "Empowering A* Search Algorithms with Neural Networks for Personalized Route Recommendation." InProceedings of the 25th ACM SIGKDD Internati…

java socket tomcat_在Tomcat环境下使用socket通信

最近在做一个APP的服务器端&#xff0c;但是APP和服务器端使用的是HTTP的通信协议&#xff0c;而另一方与服务器端通信却使用的是自定义的通信协议。具体的系统拓扑如下&#xff1a;为了完成以上的需求&#xff0c;一般的解决方案有两种&#xff1a;自己实现服务器端程序&#…

产品设计 产品经理 喜欢的网站

1 Markman http://www.zi-han.net/tools/319.html 下载地址1: 链接: http://pan.baidu.com/s/1jGKdofO 密码: 8lbh 下载地址2&#xff1a; 提示&#xff1a;安装前需要先安装AIR&#xff08;官方下载&#xff09; MarkMan下载&#xff1a;官方下载 2 在线原型制作 http://cdn…

安卓手机主题软件_类似主题软件下载-类似主题安卓官方版下载v2.6.6.3

类似主题app&#xff0c;介绍给大家&#xff0c;是一款可以让我们在线进行主题变幻&#xff0c;拥有更多特色主题风格的服务平台。有了它用户就可以体验不同机型的主题风格&#xff0c;不论苹果还是安卓都是支持的&#xff0c;喜欢的不妨来下载看看&#xff01;【类似主题应用功…

python接单业余赚钱的门路_程序员业余时间怎么快速一年赚200万

阅读&#xff1a;2515348791​分享到有几个比较好的朋友&#xff0c;都是搞程序出身&#xff0c;典型的IT男&#xff0c;编程的能力相当不错&#xff0c;但是随着年龄的增大&#xff0c;家庭责任的到来&#xff0c;很希望搞点赚钱的外快&#xff0c;但是不知道做什么&#xff1…

Java 文件 IO 操作

文章目录1. File类2. RandomAccessFile类3. 流类3.1 字节流3.2 字符流3.3 管道流3.4 ByteArrayInputStream、ByteArrayOutputStream3.5 System.in、System.out3.6 打印流 PrintStream3.7 DataInputStream、DataOutputStream3.8 合并流3.9 字节流与字符流的转换3.10 IO包类层次关…

java dsp_GitHub - Onemeaning/JavaDsp: 数字信号处理(DSP)方面的Java封装,包含常用的一些处理方法,如滤波、信号变换等等。...

JavaDsp数字信号处理(DSP)方面的Java封装&#xff0c;包含常用的一些处理方法&#xff0c;如滤波、信号变换等等。该类库是我本科毕业设计中的一部分&#xff0c;绝大部分都是我自己写实现的&#xff0c;很少部分算法有我另外几个朋友参与讨论和实现&#xff0c;在此表示感谢。…