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

时间: 2024-10-11 14:00:56

PHP 文件上传全攻略的相关文章

PHP文件上传全攻略(转)

转自:http://www.neatstudio.com/show-1343-1.shtml 这是一篇比较老的文章,其实从情感上来说,我更愿意推荐手册上的介绍,但事实上,在一些PHP群中,有些朋友在问的时候,他们总是想不到翻手册的. 嗯,英文的手册确实让人不太舒服,但,不可能在手册一出来就帮你翻译好的吧?事事都去期待别人,还不如把英文好好看看,再者,手册上的英文真的很简单的. 我不知道你们的手册是怎么样的,版本多少,但是我在我的手册里是有这么一个章节: Chapter 38. Handling

用友U8客户端连接不上服务器全攻略

用友U8客户端连接不上服务器全攻略 http://www.enet.com.cn2009年09月23日09:26 来自论坛 [导读]:如果网络不通,就让用户查找网络原因 检查步骤: 1.网络是否通? 方法:ping 服务器名称/ip -t 如果网络不通,就让用户查找网络原因: 如果网络是通的,继续…… 2.尝试使用ip地址登录服务器 如果无效,继续…… 3.配置hosts文件,将服务器+ip加入(路径:C:\WINNT\system32\drivers\etc\hosts) 如果配置hosts文

前端必知必会之文件上传攻略(一)

文件上传原理 根据http协议的定义,完成请求消息体的封装和解析,将二进制内容保存至文件. 关键字: multipart/form-data 含义: multipart表示资源有多种元素组成,form-data使用post方式或HTML Forms上传文件. 结构: 请求头:表示本次请求要上传文件,其中boundary表示分隔符. Content-Type: multipart/form-data; boundary=----WebKitFormBoundary2ahjiirVMKa4Qn78

App上线流程全攻略(史上最详细步骤)

@转载请保留:iOS界一迷糊小书童--->专注于iOS开发!!谢谢合作 /*****************************************1************************************************/ /*****************************************2************************************************/ /*3(我这里省了创建证书,创建证书和真机调试里面差别不

3Python全栈之路系列之基于socket实现文件上传

Python全栈之路系列之基于socket实现文件上传 发布时间:2017年3月16日 00:04 浏览(106) 评论(0) 分类:Python 前言 此处没有前言 粘包 在实现发送文件功能之前我们先来理解下粘包的问题,下面有两张图,我觉得很清晰的就可以理解到了. 正常情况下发送文件 第一步: 客户端把获取到的文件总大小(size=65426)先放到缓冲区,然后发送给服务端 第二步: 此时客户端接收到的文件总大小就是65426 粘包的问题下发送文件 第一步: 客户端把获取到的文件总大小(siz

PHP漏洞全解(九)-文件上传漏洞

本文主要介绍针对PHP网站文件上传漏洞.由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过 Web 访问的目录上传任意PHP文件,并能够将这些文件传递给 PHP解释器,就可以在远程服务器上执行任意PHP脚本,即文件上传漏洞. 一套web应用程序,一般都会提供文件上传的功能,方便来访者上传一些文件. 下面是一个简单的文件上传表单 <form action="upload.php" method="post" encty

生成 PDF 全攻略【2】在已有PDF上添加内容

项目在变,需求在变,不变的永远是敲击键盘的程序员..... PDF 生成后,有时候需要在PDF上面添加一些其他的内容,比如文字,图片.... 经历几次失败的尝试,终于获取到了正确的代码书写方式. 在此记录总结,方便下次以不变应万变,需要的 jar 请移步:生成PDF全攻略 PdfReader reader = new PdfReader("E:\\A.pdf"); PdfStamper stamper = new PdfStamper(reader, new FileOutputStr

在电脑上测试手机网站全攻略

最近公司要开发网站的移动版,让我准备准备知识,话说本人开发移动网站的经验还真不多,最悲剧的事情就是我的手机是个经典的诺基亚,而且公司还不给配手机,这是有多扣啊,没办烦啦,没有手机就用电脑模拟呗,相办法代替,查了很多资料,尝试了大部分方法,下面将这一天的努力总结下分享给大家,也让大家免去看那么多文章,以下介绍的方法,都是本人亲自测试成功的方法. Chrome* chrome模拟手机总共有四种方法,原理都一样,通过伪装User-Agent,将浏览器模拟成Android设备.以下标星的为推荐方法. 1

【问题】vs IIS破除文件上传限制最全版

原文:[问题]vs IIS破除文件上传限制最全版 今天在测试一下上传文件的时候发现iis和配置存在上传文件大小限制(IIS默认大小30M,最大运行为2g:2147483647),百度了一部分资料有些发布到IIS好使,但是在VS调试中不好使.于是自己不断努力还是找到了问题点.不是说网上的不对,只不过是有些情况下忽略了一些步骤.我就总结了一下我本次的步骤. 第一步: 配置web.config节点中的web节点: <system.web> <compilation debug="tr