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 相关文章推荐
获得Google PR值的PHP代码
Jan 28 PHP
php用数组返回无限分类的列表数据的代码
Aug 08 PHP
PHP中使用gettext来支持多语言的方法
May 02 PHP
PHP删除目录及目录下所有文件的方法详解
Jun 06 PHP
joomla jce editor 解决上传中文名文件失败问题
Jun 09 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
Sep 28 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
Nov 18 PHP
php读取csv数据保存到数组的方法
Jan 03 PHP
详解laravel安装使用Passport(Api认证)
Jul 27 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
Sep 28 PHP
PHP fopen函数用法实例讲解
Feb 15 PHP
Laravel 5.5 实现禁用用户注册示例
Oct 24 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入门学习知识点三 PHP上传
2011/07/14 PHP
PHP+MySQL投票系统的设计和实现分享
2012/09/23 PHP
PHP stream_context_create()函数的使用示例
2015/05/12 PHP
php单链表实现代码分享
2016/07/04 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
Aster vs KG BO3 第三场2.19
2021/03/10 DOTA
2010年最佳jQuery插件整理
2010/12/06 Javascript
jQuery 全选/反选以及单击行改变背景色实例
2013/07/02 Javascript
jquery.qrcode在线生成二维码使用示例
2013/08/21 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
2015/10/14 Javascript
js为什么不能正确处理小数运算?
2015/12/29 Javascript
卸载安装Node.js与npm过程详解
2016/08/15 Javascript
如何重置vue打印变量的显示方式
2017/12/06 Javascript
koa2使用ejs和nunjucks作为模板引擎的使用
2018/11/27 Javascript
JS实现的A*寻路算法详解
2018/12/14 Javascript
javascript sort()对数组中的元素进行排序详解
2019/10/13 Javascript
[35:34]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
基于wxpython实现的windows GUI程序实例
2015/05/30 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
2019/01/19 Python
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
在python里面运用多继承方法详解
2019/07/01 Python
python爬虫 Pyppeteer使用方法解析
2019/09/28 Python
python实现删除列表中某个元素的3种方法
2020/01/15 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
django迁移文件migrations的实现
2020/03/31 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
2020/04/17 Python
基于python检查矩阵计算结果
2020/05/21 Python
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
2014年党员干部四风问题自我剖析材料
2014/09/29 职场文书
2015年房地产销售工作总结
2015/04/20 职场文书
法定授权委托证明书
2015/06/18 职场文书
会议简讯范文
2015/07/20 职场文书
教师远程培训心得体会
2016/01/09 职场文书
nodejs利用readline提示输入内容实例代码
2021/07/15 NodeJs
js 数组 fill() 填充方法
2021/11/02 Javascript