PHP 文件上传全攻略

PHP文件上传功能一般都是大家使用事先封装好的函数,要用的时候直接使用已封装的函数就完了,但有时候不能使用封装函数,还真不大能记住PHP的上传相关的东西,在此做个总结,以备后用。
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 

转载于:https://www.cnblogs.com/fuland/p/4249948.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406457.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS事件-鼠标滚轮事件

JS事件-鼠标滚轮事件 vue 监听滚轮滚动事件

java语言程序设计教程翁恺第二版课后答案_《JAVA语言程序设计教程(第2版)/翁恺 肖少拥》翁恺,肖少拥著【摘要 书评 在线阅读】-苏宁易购图书...

第1章 Java语言概述1.1 Java的历史1.2 Java程序运行环境与特点1.2.1 跨平台(Cross Platform)&#xff0f;可移植性(Portablc)1.2.2 运行效率1.2.3 稳 定1.2.4 简 单1.2.5 动 态1.3 面向对象的基本概念1.3.1 对 象1.3.2 面向对象1.3.3 类1.4 面向对象程序设计的…

Python网页抓取、模拟登录

From: http://www.cnblogs.com/bboy/archive/2010/10/29/1864537.html 用python抓取网页是非常简单的事&#xff0c;简单的几行代码就可以解决。。。这里稍微记录一下 需要引用的包有主要是 urllib2&#xff0c;urllib也可以引入&#xff0c;具体 看代码 #--------------------…

深入分析Flex [Bindable] (总结)

[Bindable]大概又是Flex用得最多的元数据了。刚开始用用确实好简单&#xff0c;效率真是没的说。不过这几天用着却碰到了些问题&#xff0c;我自己搜集了些资料&#xff0c;想着有必要在blog里总结一下吧。啥是元数据&#xff08;metadata&#xff09;知道就跳过吧。今天不晓得…

爬取IMDBTOP250

在网上看到有人利用pythonbeautifulsoup爬取豆瓣Top250 试着自己模仿这个做了个爬取IMDB的&#xff0c; 可惜只能爬取到11个。 后来检查了超久&#xff0c; 才发现&#xff0c; soupBeautifulSoup(contents)这里&#xff0c;内容不完整&#xff0c;只能到11个电影为止。 代码如…

Vue Video.js播放m3u8视频流格式(video+videojs-contrib-hl)

Vue Video.js播放m3u8视频流格式&#xff08;videovideojs-contrib-hl&#xff09; videojs中文文档详解 Vue.js中this.$nextTick()的使用 videojs画中画小窗口播放问题&#xff1f;

apache mysql python win10_Win10 MySQL-python

在Windows 下调试 Python 还是挺麻烦的.通过PyCharm 来安装个MySQL-python 的库都搞了大半天.分别尝试 1.2.3,1.2.4和1.2.5都有不同的错误.需要解决的问题就是这个:“Cannot open include file: config-win.h: No such file or directory” while installing mysql-python"…

IT宅男们,有没有什么技术让你觉得相见恨晚?

无意中想起SQLite&#xff0c;于是发起了这么一个话题&#xff0c;感谢各位朋友的参与&#xff0c;我把大家的话收集一下&#xff0c;放在这里。 sshg PY算一个吧。当初看了一个下午就决定ditch Perl了。Haskell算另一个吧。看到type class的时候&#xff0c;也是怦然心动。不…

MFC让窗口最前端显示

基于对话框的MFC应用程序&#xff0c;环境&#xff1a;Win XP VC2010。程序界面&#xff1a; 接着为IDC_CHECK1绑定一个BOOL类型的变量m_bShowTopmost&#xff0c;并添加BN_CLICKED事件响应函数&#xff1a; void CWorkHelperDlg::OnBnClickedCheck1() {UpdateData();if(m_bSh…

Request请求:Failed to execute ‘setRequestHeader‘ on ‘XMLHttpRequest‘: String contains non ISO-8859-1 c

Request请求&#xff1a;Failed to execute ‘setRequestHeader’ on ‘XMLHttpRequest’: String contains non ISO-8859-1 code point.问题解决

HDU 1564 找规律博弈

题目大意是&#xff1a; 从n*n的方格角落的一个起点出发&#xff0c;每次移到上下左右一个未曾到达过的位置&#xff0c;谁不能走了谁就输了 想了好久都想不出&#xff0c;看了大神的题解 Orz了 果然博弈不是脑残的游戏啊... 这里从起点出发&#xff0c;将所有方格两两连接&…

庖丁解牛ASP.NET3.5控件和组件开发技术-(1)服务器控件概述

服务器控件概述 1.服务器控件的类型以及ASP.NET控件开发的系统基类 Control,WebControl,CompositeControl,DataBoundControl,HierarchicalDataBoundControl,HierarchichicalDataSourceControl, ListControl,BaseValidator. 2,控件的生命周期&#xff0c; 服务器控件的生命周期与…

gnome硬盘分析_解决八种Linux硬盘问题的技巧

不能在Linux或者类UNIX系统的硬盘上写入数据&#xff1f;想解决服务器上磁盘损坏的问题吗&#xff1f;想知道你为什么总是在屏幕上看到“磁盘已满”的字眼吗&#xff1f;想学习处理这些问题的办法吗&#xff1f;试试一下这8个解决Linux及UNIX服务器硬盘问题的小贴士吧。#1 - 错…

HTML DOM console.table() 方法

HTML DOM console.table() 方法

百度之后,电子银行还安全么?

用户&#xff1a;百度在哪里啊&#xff1f;百度在哪里&#xff1f;***&#xff1a;百度就在小朋友的心里&#xff01;用户&#xff1a;银行在哪里啊&#xff1f;银行在哪里&#xff1f;***&#xff1a;银行就在我家里&#xff0c;这里没有防盗门啦&#xff01;这里没有监控啦。…

利用IDA6.6进行apk dex代码动态调试

网上公开IDA6.6已经有一段时间&#xff0c;这个版本有个好处就是可以动态调试java代码。正好现在需要动态调试&#xff0c;所以顺便练习一下。 根据android的官方文档&#xff0c;如果要调试一个apk里面的dex代码&#xff0c;必须满足以下两个条件中的任何一个&#xff1a; 1.a…

十大经典排序算法python_十大经典排序算法的算法描述和代码实现

这里详细讲解了十大经典算法的分类&#xff0c;例如交换排序、插入排序、选择排序等比较类排序&#xff0c;以及计数排序、桶排序和基数排序的非比较类排序&#xff0c;分析了各种排序算法的复杂度和稳定性&#xff0c;还有JAVA代码的详细实现。对冒泡排序、插入排序、选择排序…

oracle日志查看问题?

From: http://www.iteye.com/problems/34438 假如我在存储过程中有一条dbms_output.put_line(s)语句;当我执行这个存储过程的时候。是否这个打印会存储到系统日志里&#xff1f;如果存储到系统日志里&#xff0c;或者是某个表中。我该怎么查看那&#xff1f; 会存入系统表中.查…

[react] react是哪个公司开发的?

[react] react是哪个公司开发的&#xff1f; facebook 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题