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聊天室技术
Oct 09 PHP
oracle资料库函式库
Oct 09 PHP
php 归并排序 数组交集
May 10 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
Jun 16 PHP
php shell超强免杀、减少体积工具实现代码
Oct 16 PHP
一个非常完美的读写ini格式的PHP配置类分享
Feb 12 PHP
php版微信小店调用api示例代码
Nov 12 PHP
php 常用的系统函数
Feb 07 PHP
PHP扩展mcrypt实现的AES加密功能示例
Jan 29 PHP
PHP如何将图片文件上传到另外一台服务器上
Aug 26 PHP
TP5框架实现自定义分页样式的方法示例
Apr 05 PHP
深入分析PHP设计模式
Jun 15 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
PHP6 mysql连接方式说明
2009/02/09 PHP
linux php mysql数据库备份实现代码
2009/03/10 PHP
php $_SERVER当前完整url的写法
2009/11/12 PHP
php中将html中的br换行符转换为文本输入中的换行符
2013/03/26 PHP
10个实用的PHP正则表达式汇总
2014/10/23 PHP
ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
2012/02/03 Javascript
怎么判断js脚本加载完成
2014/02/28 Javascript
让浏览器DOM元素最后加载的js方法
2014/07/29 Javascript
Jquery焦点图实例代码
2014/11/25 Javascript
基于jQuery实现的扇形定时器附源码下载
2015/10/20 Javascript
node实现简单的反向代理服务器
2017/07/26 Javascript
vue自定义移动端touch事件之点击、滑动、长按事件
2018/07/10 Javascript
微信小程序 textarea 层级过高问题简单解决方案
2019/10/14 Javascript
小程序点击图片实现png转jpg
2019/10/22 Javascript
JavaScript数组去重实现方法小结
2020/01/17 Javascript
微信小程序学习总结(四)事件与冒泡实例分析
2020/06/04 Javascript
vue 授权获取微信openId操作
2020/11/13 Javascript
[04:11]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/01/30 DOTA
详细讲解Python中的文件I/O操作
2015/05/24 Python
wxPython使用系统剪切板的方法
2015/06/16 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
Python面向对象封装操作案例详解
2019/12/31 Python
python实现图像拼接
2020/03/05 Python
以实惠的价格提供高品质的时尚:Newchic
2018/01/18 全球购物
美国领先的在线邮轮旅游公司:CruiseDirect
2018/06/07 全球购物
波兰汽车配件网上商店:iParts.pl
2020/09/08 全球购物
《蒙娜丽莎之约》教学反思
2014/02/27 职场文书
儿童生日会策划方案
2014/05/15 职场文书
雷人标语集锦
2014/06/19 职场文书
2014年村支部书记四风对照检查材料思想汇报
2014/10/02 职场文书
党员个人总结自评
2015/02/14 职场文书
团结友爱主题班会
2015/08/13 职场文书
80后创业总结的9条职场用人思想,记得收藏
2019/08/13 职场文书
详解JavaScript中的执行上下文及调用堆栈
2021/04/29 Javascript
详解Python中__new__方法的作用
2022/03/31 Python
win11电脑关机鼠标灯还亮怎么解决? win11关机后鼠标灯还亮解决方法
2023/01/09 数码科技