【代码学习】PHP文件的上传和下载
=====================
文件上传和下载
=====================
一、php.ini的配置信息
file_uploads = On /Off 是否允许文件上传
upload_max_filesize=2M 上传的文件的最大大小
post_max_size = 8M POST数据所允许的最大大小
upload_tmp_dir 上传文件放置的临时目录
二、客户端上传设置
1、 表单必须是POST提交
2、 上传的类型:enctype="multipart/form-data"
3、上传使用的表单项
<input type="file" name=".." >
4、(可选)上传大小限制的表单隐藏域:MAX_FILE_SIZE,
<input type="hidden" name="MAX_FILE_SIZE" value="大小字节"/>
注意:此字段必须在文件输入字段之前(常放在form标签后面)
<html>
<head><title>文件上传</title></head>
<body>
<form action='upload.php' method='POST' enctype='multipart/form-data'>
<input type='hidden' name='MAX_FILE_SIZE' value='1000000'>
选择文件:<input type='file' name='myfile'>
<input type='submit' value='上传文件'>
</form>
</body>
</html>
三、在服务器端通过PHP处理上传
1、 使用$_FILES全局数组来接收上传信息
在每个上传的文件里,$_FILES中都会有5个属性:
error:上传的错误号:0--4
0:表示没有发生任何错误。
1:上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
2:表示上传文件大小超出了HTML表单隐藏域属性的MAX_FILE_SIZE元素所指定的最大值。
3:表示文件只被部分上传。
4:表示没有上传任何文件。
6:找不到临时文件夹
7:文件写入失败
name:上传的文件名
size:文件的大小
type:文件类型
tmp_name: 临时文件
2、判断是否为上传文件 is_uploaded_file()
<?php
//判断文件是否可以上传到服务器
//$_FILE['myfile']['error']为0表示上传成功
if($_FILES['myfile']['error'] > 0){
echo '上传错误';
switch ($_FILES['myfile']['error']){
case 1: die('上传文件大小超过PHP配置文件中的约定值:upload_max_filesize');
case 2: die('上传大小超出了表单中的约定值:MAX_FILE_SIZE');
case 3: die('文件只被部分上传');
case 4: die('没有上传任何文件');
default:die('未知错误');
}
}
?>
3、将上传的文件移动到新位置 move_uploaded_file()
<?php
$path = './uploads'
if(is_uploaded_file($_FILES['myfile']['tmp_name'])){
if(!move_uploaded_file($_FILES['myfile']['tmp_name'],$path . '/' . $filename)){
die('不能将文件移动到指定目录');
}
}
?>
4、判断是否为可以上传的类型
<?php
//设置允许的上传类型
$allowtype = array('gif','jpg','png');
//拆分数组,并删除后缀名
$cs = array_pop(explode('.',$FILES['myfile']['name']));
//通过判断文件的扩展名来决定是否是允许上传的类型
if(!in_array($cs,$allowtype)){
die("这个后缀名是{$cs},不是允许上传的文件类型");
}
?>
5、判断允许上传文件大小
<?php
$size = 100000;
if($FILES['myfile']['size'] > $size){
die('超过了允许{$size}字节大小'):
}
?>
6、上传后系统定义文件名
<?php
//为了系统安全,也为了同名文件不会被覆盖,上传后将文件名使用系统定义
$cs = array_pop(explode('.',$FILES['myfile']['name']));
$filename = date('YmdHis').rand(100,999) . '.' . $cs;
}
?>
四、多个文件上传
只要在客户端多提供几个类型为file的输入表单,并设置不同的name属性值
<html>
<head><title>文件上传</title></head>
<body>
<form action='upload.php' method='POST' enctype='multipart/form-data'>
<input type='hidden' name='MAX_FILE_SIZE' value='1000000'>
选择文件1:<input type='file' name='myfile[]'><br>
选择文件2:<input type='file' name='myfile[]'><br>
选择文件3:<input type='file' name='myfile[]'><br>
<input type='submit' value='上传文件'>
</form>
</body>
</html>
五、文件下载
<?php
header("Content-Type:类型"); //指定下载的文件类型
header("Content-Disposition:attachment;filename=文件名"); //指定下载的文件描述
header("Content-Length:文件大小"); //指定下载的文件大小
readfile("./uploads/".$picname); //读取并输出图片内容
?>
六、思维导图

【代码学习】PHP文件的上传和下载的更多相关文章
- Struts2基础学习(六)—文件的上传和下载
一.文件的上传 1.单个文件上传 Struts2使用拦截器完成了文件的上传,而且底层使用的也是FileUpload开源组件. 客户端注意事项: (1)method="post&qu ...
- 【JavaWeb学习】文件的上传和下载
一.文件上传 1.1.概述 实现web开发中的文件上传功能,需完成如下二步操作: 在web页面中添加上传输入项 在servlet中读取上传文件的数据,并保存到本地硬盘中 如何在web页面中添加上传输入 ...
- SpringMVC 学习笔记(文件的上传和下载)
在web项目中会遇到的问题:文件上传 文件上传在前端页面的设置:form表单 设置 input 类型 文件上传的请求方式要使用post,要将enctype设置为multipart/form-data ...
- SpringMVC+Ajax实现文件批量上传和下载功能实例代码
需求: 文件批量上传,支持断点续传. 文件批量下载,支持断点续传. 使用JS能够实现批量下载,能够提供接口从指定url中下载文件并保存在本地指定路径中. 服务器不需要打包. 支持大文件断点下载.比如下 ...
- 使用FTPClient进行文件服务器内文件的上传和下载
我用的FTPClient是由Apache组织的commons-net.jar包中的API,这个包用起来非常的方便,很容易上手.我在项目开发的过程中主要用到了文件的上传和下载功能,下面将我开发的代码贴出 ...
- Python 进行 SSH 操作,实现本地与服务器的链接,进行文件的上传和下载
Python 进行 SSH 操作,实现本地与服务器的链接,进行文件的上传和下载 2018年5月26日 19:03 阅读 375 评论 7 我本地和服务器的连接一直使用的是 Xshell 5,而在与服务 ...
- JavaWeb中文件的上传和下载
JavaWeb中文件的上传和下载 转自: JavaWeb学习总结(五十)——文件上传和下载 - 孤傲苍狼 - 博客园https://www.cnblogs.com/xdp-gacl/p/4200090 ...
- Javaweb之文件的上传与下载
Javaweb之文件的上传与下载 一.基于表单的文件上传 如果在表单中使用表单元素 <input type=“file” />,浏览器在解析表单时,会自动生成一个输入框和一个按钮,输入框可 ...
- java实现ftp文件的上传与下载
最近在做ftp文件的上传与下载,基于此,整理了一下资料.本来想采用java自带的方法,可是看了一下jdk1.6与1.7的实现方法有点区别,于是采用了Apache下的框架实现的... 1.首先引用3个包 ...
- iOS开发中文件的上传和下载功能的基本实现-备用
感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传 ...
随机推荐
- 小故事理解TCP/IP连接时的三次握手
在TCP/IP协议中,TCP协议通过三次握手建立一个可靠的连接,示意图如下: 下面通过一个小故事简单理解一下这三次握手的具体含义: 一天,快递员小客(客户端)准备去小服(服务器)家去送快递(准备与服务 ...
- "the hypervisor is not running" 故障
在我们日常服务器管理中,常常会遇到创建虚拟机,如果在一台新部署的 Hyper-V 上新建一个 Virtual Machine 时,出现错误信息:"The virtual machine co ...
- 一文让你从此告别HTTP乱码(一)Request篇
#circle { background-color: #8fcbec; border: 3px } 概述 开发Web项目的过程中,经常遇到浏览器中显示的内容乱码,或者服务器获取浏览器请求参数时乱码的 ...
- MYSQL数据库-其他
FROM:实验楼 索引: 当表中有大量记录时,若要对表进行查询,没有索引的情况是全表搜索.而如果在表中已建立索引,在索引中找到符合查询条件的索引值,通过索引值就可以快速找到表中的数据. 建立索引: $ ...
- 初步认识Thymeleaf:简单表达式和标签。(一)
本文只适用于不会Java对HTML语言有基础的程序员们,是浏览了各大博客后收集整理,重新编辑的一篇文章,希望能对大家有所帮助. 对于Thymeleaf,网上特别官方的解释无非就是:网站或者独立应用程序 ...
- HANA CDS与ABAP CDS
如果你在网络或者SCN上面搜索CDS,即SAP的Core Data Services,你会很容易地找到类似“Core Data Services(CDS)是一个在SAP HANA中用于定义和消费富语义 ...
- 关于RestfulAPI与SpringMVC之间的传值
##默认读者已经搭建好的SpringMVC的环境,并且对SpringMVC有着一定的了解,并且已经对RestfulAPI有了一定的了解 1,首先将WEB-INF下的web.xml里面的url-part ...
- 自适应滤波:最小均方误差滤波器(LMS、NLMS)
作者:桂. 时间:2017-04-02 08:08:31 链接:http://www.cnblogs.com/xingshansi/p/6658203.html 声明:欢迎被转载,不过记得注明出处哦 ...
- 树莓派Raspberry实践笔记-简单方法安装minicom
[原创链接]:http://www.cnblogs.com/atsats/p/6665566.html 本文结合最新的Raspbain jessie,使用图形化的方式安装一款软件:串口调试工具mini ...
- 老李分享:curl发起https请求
老李分享:curl发起https请求 在POPTEST上课的过程中,我们需要本地模拟https请求来完成性能测试,我们用curl来实现,curl是利用URL语法在命令行方式下工作的开源文件传输工具,使 ...