转自http://www.cnblogs.com/lazycat-cz/p/4113037.html

安全性能---水平不够 ╮(╯_╰)╭

文件上传--->就是将本地的文件上传到服务器上。(HTTP协议有待学习)首先要在本地选择上传的文件,上传到服务器后,服务端又要做一些处理,为此客户端和服务端均要做一些设置

(客户端)文件上传最基本的方法是通过form表单进行POST传递文件,先贴代码。

<html>
<body> <form action="upload_file.php" method="post" enctype="multipart/form-data">
<label for="file">选择文件:</label>
<input type="file" name="uploadFile" id="file" /> <br />
<input type="submit" name="submit" value="上传" /> </form> </body> </html>

<form> 标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 "multipart/form-data"。

<input> 标签的 type="file" 属性规定了应该把输入作为文件来处理。举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。

(服务端) 文件上传到了服务器上还要经过一些处理过程。在php中,$_POST保存的是post传递的数据,而上传文件的相关信息保存在$_FILES里边,

<?php
echo '_FILES: <pre>';
//<pre> 标签的一个常见应用就是用来表示计算机的源代码。
print_r($_FILES); echo '_POST: <pre>';
print_r($_POST);
?>

_FILES[]是二维数组。array[uploadFile]键名取决于<input>type="file"标签中的的name值。它标记的是这个控件的上传文件信息,因此我们可以放多个上传控件,设置不同的name,当然设置一样的name也可以,完全可以把它们全放在一个数组里边,如<input type="file" name="upload[]">。error表示错误,有这么几种情况,0:没有错误,上传成功; 1:文件超过了PHP配置指令中的upload_max_filesize规定的大小; 2:文件超过HTML表单中MAX_FILE_SIZE规定的大小,3:文件只有部分上传; 4:没有文件上传。(size问题仍没有弄清楚╮(╯_╰)╭,就暂时先不做说明)

<?php
$typeWhiteList = array('txt', 'doc', 'php', 'zip', 'exe'); // 类型白名单,过滤不允许上传的文件类型
$max_size = 1000000; // 大小限制 为1M
$upload_path = 'D:/WAMP'; // 指定移至的目录 // 1、判断是否成功上传到服务器
$error = $_FILES['uploadFile']['error'];
if($error > 0){
switch($error){
case 1: exit('超过php配置的最大文件上传限制');
case 2: exit('超过HTML表单的最大文件上传限制');
case 3: exit('文件只有部分被上传');
case 4: exit('没有上传任何文件');
default: exit('未知类型错误');
}
} // 2、判断是否为允许上传的类型
$extension = pathinfo($_FILES['uploadFile']['name'], PATHINFO_EXTENSION); // 获取扩展名
if(!in_array($extension, $typeWhiteList)){
if($extension == '')
exit('不允许上传空类型文件');
else
exit('不允许上传'.$extension.'类型文件');
} // 3、判断是否为允许大小
if($_FILES['uploadFile']['size'] > $max_size){
exit('超过了允许上传到的'.$max_size.'字节');
} // 4、已到指定位置
$filename = date('Ymd').rand(1000, 9999); // 生成一个新文件名,防止覆盖
if(is_uploaded_file($_FILES['uploadFile']['tmp_name'])){ // 判断是否通过HTTP POST上传
if(!move_uploaded_file($_FILES['uploadFile']['tmp_name'], $upload_path.$filename.'.'.$extension)){
exit('无法移动到指定位置');
}
else{
echo '文件上传成功<br/>';
echo '文件名: '.$upload_path.$filename.'.'.$extension.'<br>';
}
}
else{
exit('文件未通过合法途径上传');
}

上传完成..............

文件下载--->单的文件下载只需要用一个HTML链接就够了,使用<a>标签,href属性指定资源位置,一点就可。但这种方式只能处理浏览器默认无法识别的MIME类型,(MIME具体附wiki百科http://zh.wikipedia.org/wiki/%E5%A4%9A%E7%94%A8%E9%80%94%E4%BA%92%E8%81%AF%E7%B6%B2%E9%83%B5%E4%BB%B6%E6%93%B4%E5%B1%95)

<html>
<head>
<title>donwload file</title>
<meta http-equiv="Content-Type" content="text/html"; charset="utf-8" />
</head>
<body>
<a href="resource/header.txt">header.txt</a><br/>
<a href="resource/php.zip">php.zip</a><br/>
<a href="resource/pic.ico">pic.ico</a> </body>
</html>

对于这些浏览器不认识的类型文件,点链接,它直接弹框让你下载,有的浏览器甚至直接就下了,那么对于文本txt、jpg等浏览器默认识别的类型的文件,一点击则会直接展现在页面上,比如上面header.txt、pic.ico。如何不展示在页面上而去下载它们呢,使用header函数。

header函数会通过发送头信息告知,请把该文件当成一个附件,这样点击的时候,就也会下载了。(还不是非常理解,完全理解了再补充╮(╯_╰)╭)

哦了~                                        第一篇博文→_→

再次声明转载地址http://www.cnblogs.com/lazycat-cz/p/4113037.html

PHP---文件上传与下载的更多相关文章

  1. java web学习总结(二十四) -------------------Servlet文件上传和下载的实现

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  2. (转载)JavaWeb学习总结(五十)——文件上传和下载

    源地址:http://www.cnblogs.com/xdp-gacl/p/4200090.html 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传 ...

  3. JavaWeb学习总结,文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  4. java文件上传和下载

    简介 文件上传和下载是java web中常见的操作,文件上传主要是将文件通过IO流传放到服务器的某一个特定的文件夹下,而文件下载则是与文件上传相反,将文件从服务器的特定的文件夹下的文件通过IO流下载到 ...

  5. 使用jsp/servlet简单实现文件上传与下载

    使用JSP/Servlet简单实现文件上传与下载    通过学习黑马jsp教学视频,我学会了使用jsp与servlet简单地实现web的文件的上传与下载,首先感谢黑马.好了,下面来简单了解如何通过使用 ...

  6. JavaWeb学习总结(五十)——文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  7. 文件上传和下载(可批量上传)——Spring(三)

    在文件上传和下载(可批量上传)——Spring(二)的基础上,发现了文件下载时,只有在Chrome浏览器下文件名正常显示,还有发布到服务器后,不能上传到指定的文件夹目录,如上传20160310.txt ...

  8. 文件上传和下载(可批量上传)——Spring(二)

    针对SpringMVC的文件上传和下载.下载用之前“文件上传和下载——基础(一)”的依然可以,但是上传功能要修改,这是因为springMVC 都为我们封装好成自己的文件对象了,转换的过程就在我们所配置 ...

  9. Struts2 之 实现文件上传和下载

    Struts2  之 实现文件上传和下载 必须要引入的jar commons-fileupload-1.3.1.jar commons-io-2.2.jar 01.文件上传需要分别在struts.xm ...

  10. 基于jsp的文件上传和下载

    参考: 一.JavaWeb学习总结(五十)--文件上传和下载 此文极好,不过有几点要注意: 1.直接按照作者的代码极有可能listfile.jsp文件中 <%@taglib prefix=&qu ...

随机推荐

  1. Python学习札记(十一) Function2 函数定义

    参考:定义函数 Note: 先看一段代码实例(Barefoot topo.py): def read_topo(): nb_hosts = 0 nb_switches = 0 links = [] w ...

  2. P4开源Tutorials教程样例实战及对P4v1.1规范的初分析

    Github链接:Github-P4Lang-Tutorials-p4v1.1 前言 本文主要对Barefoot开源教程中的p4v1.1实例simple_router的实战步骤进行记录与阐述,希望能帮 ...

  3. jmeter-负载

    主: remote_hosts=10.0.70.35:1099,10.0.70.47:1099 server.rmi.localport=1099 从:  remote_hosts=10.0.70.3 ...

  4. JavaScript高级程序设计-读书笔记(7)

    第22章 高级技巧 1.高级函数 (1)安全的类型检测 在任何值上调用Object原生的toString()方法,都会返回一个[object NativeConstructorName]格式的字符串. ...

  5. [Vue]组件——通过$emit为组件自定义事件

    1.在定义组件时调用内建的 $emit 方法并传入事件的名字,来向父级组件触发一个事件enlarge-text: Vue.component('blog-post', { props: ['post' ...

  6. Art-Template模板引擎(原生写法与简洁写法)

    模板引擎:把js数据转换成html需要的页面,这就是模板引擎需要做的事     • native原生语法     1. 准备数据     2. 把数据转化成html格式的字符串 使用模板引擎 artT ...

  7. VS2017 MVC项目,新建控制器提示未能加载文件或程序集“Dapper.Contrib解决方法

    VS2017中MVC项目中,右键新建控制器时,提示 未能加载文件或程序集“Dapper.Contrib, Version=1.50.0.0, Culture=neutral, PublicKeyTok ...

  8. Java集合详解3:Iterator,fail-fast机制与比较器

    Java集合详解3:Iterator,fail-fast机制与比较器 今天我们来探索一下LIterator,fail-fast机制与比较器的源码. 具体代码在我的GitHub中可以找到 https:/ ...

  9. torch Tensor学习:切片操作

    torch Tensor学习:切片操作 torch Tensor Slice 一直使用的是matlab处理矩阵,想从matlab转到lua+torch上,然而在matrix处理上遇到了好多类型不匹配问 ...

  10. Gruntjs提高生产力(四)

    思考: 1.grunt以工程为单位安装插件? 如果有新工程就要重新安装插件或者把安装好的插件拷贝过去.这样很麻烦,解决方案是需要用grunt的项目统一放在grunt项目中. 2.每次需要针对项目编写g ...