Keep on going, never give up.

如何设置PHP上传文件大小限制

我们经常会遇到上传文件太大而被阻止上传情况,不管是网盘、邮件还是FTP服务器等,都会对上传文件做大小限制,当然了有些服务器还会对上传文件类型做了限制,比如上传图片你就不能整个一句话木马,然后改个扩展名往上传,而实际上对文件类型进行限制效果甚微,除个别会暴路径的存放目录之外,一般均不做限制,而是从服务器角度限制其执行似乎更合适。本文则只先说说PHP文件大小限制设置。

受限需确定当前正加载的php.ini路径,有的在PHP目录下,有的在APACHE目录,可以通过phpinfo()函数查看到,否则改错位置总是不生效,天缘也不习惯看配置,都找到一个改一个,全给它改了。

一、设置post_max_size和upload_max_filesize

php上传文件限制涉及很多方面,大致归纳一下,有如下几个:

1、memory_limit内存设置限制

2、max_execution_time程序执行时间限制

3、post_max_size最大POST数据限制

4、upload_max_filesize最大上传文件大小限制

当然有这几个也不是绝对就限定了上传文件大小,理论上也只是限制最大可能的上传文件大小,因为内存设置还受限于当前可用内存数,程序执行时间受限于当前系统繁忙状态,POST数据大小还受限于POST冗余头或多断上传数,等等,这些因素都会在某个时机会影响到上传文件结果。

所以从逻辑顺序上:

memory_limit>post_max_size>upload_max_filesize,再加上一个前提max_execution_time许可时间足够长。

归纳一下,假设上传限制100M字节,则参考设置如下:

max_execution_time = 30     ; Maximum execution time of each script, in seconds
max_input_time = 60    ; Maximum amount of time each script may spend parsing request data
;max_input_nesting_level = 64 ; Maximum input variable nesting level
memory_limit = 128M      ; Maximum amount of memory a script may consume (128MB)

; Maximum size of POST data that PHP will accept.
post_max_size = 105M

; Maximum allowed size for uploaded files.
upload_max_filesize = 100M

一般来讲,上传文件时,首先需要保证上传内存,查看PHP.INI默认配置,memory_limit默认是128M,对一次脚本执行可消耗的内存量。如果上传限制100M,那么这么大的内存量而言足够了(还是一般来讲,比如多文件同时上传可能就会不够)。

二、调整执行时间set_time_limit

max_execution_time默认设置为30秒,对于上传100M文件而言,目前的网络情况来看,30秒要上传100M文件几乎是不可能的,10M带宽完全对称速率,一秒一兆也需要一分半钟。所以这个设置即使调整也难以估算实际执行时间,而且调整太长对APACHE不太友善。

所以建议不要调整max_execution_time,而只是在PHP程序中使用:

set_time_limit(0);

进行临时调整。设置0表示没有时间限制。当然从程序执行角度,设置0是解决了超时问题,但其实并非好的解决办法,如果程序支持断点续传,那么设置600秒或3600秒也似乎是个更好的思路,超时时自动断点续传即可。

三、重启APACHE服务器

service httpd restart

更多文章:

PHP正则表达式语法简介

PHP对特殊字符串的过滤和处理

PHP常用正则表达式收集整理

PHP中如何发送HEADER头消息

PHP编程的一些小经验阶段总结 

相关评论(0):  

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

最新文章

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载也必须遵循“署名-非商业用途-保持一致”的创作共用协议. 返回顶部
Copyright@2005-2016 Metsky.com, All rights Reserved.