PHP 文件上传全攻略


Posted in PHP onApril 28, 2010

1.表单部分
允许用户上传文件,在HTML表单的声明中要加上一个上传的属性:
enctype = 'multipart/form-data'
表单的method必须是POST
表单选项MAX_FILE_SIZE隐藏域用于限制上传文件大小,它必须放在文件表单元素前面,单位为字节。
如:

<form enctype='multipart/form-data' id='aa' name='aaa' method='post' action='xxx.php'> 
<input type='hidden' name='MAX_FILE_SIZE' value='2621114' /> 
<input name='upload_file' type='file' /> 
</form>

2.处理上传文件
上传时,PHP收到关于该文件的信息数组,这些信息可以在$_FILES这个超级全局数组中找到。
如:如果表单中的文件输入框名字为upload_file,那么关于该文件的所有信息都包含在数组$_FILES['upload_file']里面。
如:客户上传了一个“aaa.jpg”的图片数组值如下:
name "p5pp.jpg" 上传时文件的名字
type “image/jpeg" 文件类型
tmp_name "/tmp/phpjksdf" 服务器端的临时文件名
error 上传错误的返回值
size 2045 文件实际大小

上面数组里面的error会返回不同的常量值,如下:
UPLOAD_ERR_OK 没有错误发生,文件上传成功
UPLOAD_ERR_INI_SIZE 文件大小超过了PHP.INI中upload_max_filesize选项限制的值
UPLOAD_ERR_FORM_SIZE 上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项值。可在程序中检查表单$FILES ['up_file']['size']来处理
UPLOAD_ERR_PARTIAL 文件只有部分被上传
UPLOAD_ERR_NO_FILE 用户没有提供任何文件上传
上传后处理的具体例子:

if(!move_uploaded_file($_FILES['f']['tmp_name'],"uploads/".$_FILES['f']['name'].".jpg")){ 
echo "error"; 
}

函数:
move_uploaded_file 移动上传的临时文件到指定的目录下
例子:
move_uploaded_file('临时文件名','指定文件路径')

is_uploaded_file 判断是否是通过http Post上传的文件
例子:

if(!is_uploaded_file($_FILES['f']['tmp_name'])){ 
echo '非法'; 
}

3.相关参数

PHP上传设计到的php.ini中的参数:
file_uploads 是否允许上传文件,默认ON

upload_tmp_dir 上传文件防止的临时目录,未指定则使用系统默认位置

upload_max_filesize 允许上传文件的大小的最大值,默认为2M

post_max_size 控制采用POST方法进行一次表单提交中PHP所能接受的最大数据量,如果希望用PHP文件上传,则此值要改为比upload_max_filesize要大

max_input_time 以秒为单位对通过POST/GET/PUT方式接受数据时间进行限制。

memory_limit 为了避免正在运行的脚本大量使用系统内存,PHP允许定义内存使用限额。通过设置此参数来制定单个脚本程序可以使用的最大内存容量,应适当大于post_max_size值

max_execution_time 用来设置在强制终止脚本前PHP等待脚本执行完毕的时间,单位秒。次选项可限制死循环脚本,但当存在一个长时间的合法活动时(如:上传大文件),这项功能也会导致操作失败。这样情况下必须考虑将此变量增加。

4.考虑多文件上传
可以利用$_FILES数组就可以轻松实现多文件上传。$_FILES数组可以获取客户端表单里面所有的file域内容,从而获得所有在同一表单上传的文件。

5.突破上传的内存限制

方法一:
修改php.ini中memory_limit值,改为更大,如 64M
方法二:
使用Apache Rewrite方法,动态修改memory_limit的值。首先建立一个.htaccess文件,保存在上传文件程序的 当前目录即可.代码如下:
php_value memory_limit 100M
php_value post_max_size 30M
php_value upload_max_filesize 30M
php_value max_execution_time 300
php_value max_input_tim 300
php_value display_errors On

PHP 相关文章推荐
PHP 开发工具
Dec 06 PHP
php读取30天之内的根据算法排序的代码
Apr 06 PHP
PHP提取中文首字母
Apr 09 PHP
PHP设计模式之命令模式的深入解析
Jun 13 PHP
php采集文章中的图片获取替换到本地(实现代码)
Jul 08 PHP
PHP结合jQuery实现找回密码
Jul 22 PHP
php数据访问之查询关键字
May 09 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
May 18 PHP
Yii实现文章列表置顶功能示例
Oct 18 PHP
php把时间戳转换成多少时间之前函数的实例
Nov 16 PHP
PDO::query讲解
Jan 29 PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
Apr 11 PHP
PHP GD 图像处理组件的常用函数总结
Apr 28 #PHP
PHP 开发环境配置(测试开发环境)
Apr 28 #PHP
PHP 开发环境配置(Zend Studio)
Apr 28 #PHP
PHP 开发环境配置(Zend Server安装)
Apr 28 #PHP
PHP开发环境配置(MySQL数据库安装图文教程)
Apr 28 #PHP
PHP PDO函数库详解
Apr 27 #PHP
PHP执行linux系统命令的常用函数使用说明
Apr 27 #PHP
You might like
php方法调用模式与函数调用模式简例
2011/09/20 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
2015/07/29 PHP
redis查看连接数及php模拟并发创建redis连接的方法
2016/12/15 PHP
php封装的验证码类分享
2017/02/26 PHP
Opacity.js
2007/01/22 Javascript
jQuery下通过replace字符串替换实现大小图片切换
2012/05/22 Javascript
无缝滚动改进版支持上下左右滚动(封装成函数)
2012/12/04 Javascript
Node.js开发之访问Redis数据库教程
2015/01/14 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
javascript数组去重的方法汇总
2015/04/14 Javascript
javascript实现连续赋值
2015/08/10 Javascript
jquery.mousewheel实现整屏翻屏效果
2015/08/30 Javascript
jQuery获取当前点击的对象元素(实现代码)
2016/05/19 Javascript
JavaScript程序中的流程控制语句用法总结
2016/05/23 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
2016/07/22 Javascript
微信小程序 选项卡的简单实例
2017/05/24 Javascript
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
2017/07/22 jQuery
[js高手之路]寄生组合式继承的优势详解
2017/08/28 Javascript
vue 组件使用中的一些细节点
2018/04/25 Javascript
深入了解JavaScript 私有化
2019/05/30 Javascript
vue实现弹幕功能
2019/10/25 Javascript
[02:32]“虐狗”镜头慎点 2016国际邀请赛中国区预选赛现场玩家采访
2016/06/28 DOTA
基于Python的PIL库学习详解
2019/05/10 Python
pandas通过字典生成dataframe的方法步骤
2019/07/23 Python
css3 给页面加个半圆形导航条主要利用旋转和倾斜样式
2014/02/10 HTML / CSS
杭州-DOTNET笔试题集
2013/09/25 面试题
入党自我鉴定范文
2013/10/04 职场文书
中文系学生自荐信范文
2013/11/13 职场文书
决心书标准格式
2014/03/11 职场文书
酒店总经理岗位职责
2014/03/17 职场文书
同学会主持词
2014/03/18 职场文书
四风查摆问题自查报告
2014/10/10 职场文书
个人年终总结范文
2015/03/09 职场文书
2016师德师风学习心得体会
2016/01/12 职场文书
2016年教师师德师风承诺书
2016/03/25 职场文书
javascript进阶篇深拷贝实现的四种方式
2022/07/07 Javascript