PHP设置图片文件上传大小的具体实现方法


Posted in PHP onOctober 11, 2013

我们简要介绍一下PHP文件上传涉及到的一些参数:

•file_uploads :是否允许通过HTTP上传文件的开关,默认为ON即是开。
•upload_tmp_dir :upload_tmp_dir用来说明PHP上传的文件放置的临时目录,要想上传文件,得保证服务器没有关闭临时文件和有对文件夹的写权限,如果未指定则PHP使用系统默认值。
•upload_max_filesize :允许上传文件大小的最大值,默认为2M。
•post_max_size :控制在采用POST方法进行一次表单提交中PHP所能够接收的最大数据量。如果希望使用PHP文件上传功能,则需要将此值改为比upload_max_filesize要大。
•max_input_time :以秒为单位对通过POST、GET以及PUT方式接收数据时间进行限制。如果应用程序所运行环境处在低速链路上,则需要增加此值以适应接收数据所需的更多时间。
•memory_limit :为了避免正在运行的脚本大量使用系统可用内存,PHP允许定义内存使用限额。通过memory_limit变量来指定单个脚本程序可以使用的最大内存容量变量memory_limit的值应当适当大于post_max_size的值。
•max_execution_time :max_execution_time设置了在强制终止脚本前PHP等待脚本执行完毕的时间,此时间以秒计算。当脚本进入了一个无限循环状态时此变量非常有用。然而,当存在一个需要很长时间完成的合法活动时(例如上传大型文件),这项功能也会导致操作失败。在这样的情况下必须考虑将此变量值增加,以避免PHP在脚本正在执行某些重要过程的时候将脚本关闭。
对于linux主机,可能在/etc/httpd/conf.d/access.conf/下面里面还有php.conf 文件,这个文件可能会解决一些系统的文件大小限制问题。

在PHP上传上加入下面的代码,即可暂时让PHP能上传大文件,如下:

<?php  
//HTTP上传文件的开关,默认为ON即是开  
ini_set('file_uploads','ON'); 
//通过POST、GET以及PUT方式接收数据时间进行限制为90秒 默认值:60  
ini_set('max_input_time','90'); 
//脚本执行时间就由默认的30秒变为180秒  
ini_set('max_execution_time', '180'); 
//Post变量由2M修改为8M,此值改为比upload_max_filesize要大  
ini_set('post_max_size', '12M'); 
//上传文件修改也为8M,和上面这个有点关系,大小不等的关系。 
ini_set('upload_max_filesize','10M');  
//正在运行的脚本大量使用系统可用内存,上传图片给多点,最好比post_max_size大1.5倍  
ini_set('memory_limit','20M'); 
?> 

查看上面的变量是否修改成功:

<?php  
echo ini_get('file_uploads')."\n";   
echo ini_get('max_input_time')."\n";   
echo ini_get('max_execution_time')."\n";   
echo ini_get('post_max_size')."\n";   
echo ini_get('upload_max_filesize')."\n";   
echo ini_get('memory_limit')."\n";   
?>

在php.ini中修改,涉及三个值的大小约束关系。所以是一种临时方案,这个为何不能修改,是有PHP的运行模式是有很大的关系的,如安全模式。

在安全模式下不能使用ini_set的指令:max_execution_time、memory_limit、child_terminate。

因此,像post_max_size,upload_max_filesize用下面的方法是修改不了的:

ini_set('post_max_size','10M');  
ini_set('upload_max_filesize','8M'); 

正确做法是用.htaccess文件:

php_value upload_max_filesize 8M  
php_value post_max_size 10M 

前提是该站点在httpd.conf中配置了:AllowOverride All。

在php文档里有说明upload_max_filesize的可修改范围是PHP_INI_PERDIR。PHP_INI_PERDIR的意思是域内指令可以在php.ini、httpd.conf或.htaccess文件中修改。PHP_INI_SYSTEM 域内指令可以在php.ini和httpd.conf文件中修改。所以upload_max_filesize用int_set是无法修改的。只有可修改范围是PHP_INI_ALL的才可以用int_set修改。

获取值的方法:

if(@ini_get("file_uploads")) { 
    $arrInfo['fileupload'] = "允许 - 文件 ".ini_get("upload_max_filesize")." - 表单:".ini_get("post_max_size"); 
} 
else { 
    $arrInfo['fileupload'] = "<font color='red'>禁止</font>"; 
} 
if (get_cfg_var('register_globals')){ 
    $arrInfo['onoff'] ="打开"; 
}else{ 
    $arrInfo['onoff'] = "关闭"; 
}
PHP 相关文章推荐
递归列出所有文件和目录
Oct 09 PHP
php 分库分表hash算法
Nov 12 PHP
如何在Ubuntu下启动Apache的Rewrite功能
Jul 05 PHP
ThinkPHP3.1新特性之Action参数绑定
Jun 19 PHP
将CMYK颜色值和RGB颜色相互转换的PHP代码
Jul 28 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
Oct 26 PHP
php中的钩子理解及应用实例分析
Aug 30 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
Oct 15 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
Feb 18 PHP
PHP date_default_timezone_set()设置时区操作实例分析
May 16 PHP
PHP实现Snowflake生成分布式唯一ID的方法示例
Aug 30 PHP
php swoft框架实例用法
Dec 22 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
Oct 10 #PHP
php检测网页是否被百度收录的函数代码
Oct 09 #PHP
php MessagePack介绍
Oct 06 #PHP
php 批量替换程序的具体实现代码
Oct 04 #PHP
php5.5中类级别的常量使用介绍
Oct 02 #PHP
php mysql_real_escape_string函数用法与实例教程
Sep 30 #PHP
PHP文件上传主要代码讲解
Sep 30 #PHP
You might like
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
一些不错的js函数ajax
2008/08/20 Javascript
JavaScript.The.Good.Parts阅读笔记(一)假值与===运算符
2010/11/16 Javascript
读jQuery之二(两种扩展)
2011/06/11 Javascript
js禁止小键盘输入数字功能代码
2011/08/01 Javascript
jquery插件开发注意事项小结
2013/06/04 Javascript
分享两款带遮罩的jQuery弹出框
2015/12/30 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
2016/04/05 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
2016/12/28 Javascript
js实现图片左右滚动效果
2017/02/27 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
2017/07/11 Javascript
Node.js使用Express.Router的方法
2017/11/14 Javascript
如何解决React官方脚手架不支持Less的问题(小结)
2018/09/12 Javascript
浅谈layer的Icon样式以及一些常用的layer窗口使用方法
2019/09/11 Javascript
JavaScript享元模式原理与用法实例详解
2020/03/09 Javascript
vue实现一个6个输入框的验证码输入组件功能的实例代码
2020/06/29 Javascript
vue实现几秒后跳转新页面代码
2020/09/09 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
2020/11/04 Javascript
[36:09]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
django批量导入xml数据
2016/10/16 Python
Python Socket编程详细介绍
2017/03/23 Python
Sanic框架应用部署方法详解
2018/07/18 Python
python 梯度法求解函数极值的实例
2019/07/10 Python
Django框架之登录后自定义跳转页面的实现方法
2019/07/18 Python
Tensorflow分批量读取数据教程
2020/02/07 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
2020/02/28 Python
python logging模块的使用详解
2020/10/23 Python
Pycharm 解决自动格式化冲突的设置操作
2021/01/15 Python
5个你不知道的HTML5的接口介绍
2013/08/07 HTML / CSS
德国百年厨具品牌WMF美国站:WMF美国
2016/09/12 全球购物
Corelle官方网站:购买康宁餐具
2016/11/02 全球购物
广州地球村科技数据库题目
2016/04/25 面试题
监察建议书范文
2014/03/12 职场文书
绿色出行口号
2014/06/18 职场文书
2014物价局民主生活会对照检查材料思想汇报
2014/09/24 职场文书