=====================

     文件上传和下载

=====================

一、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文件的上传和下载的更多相关文章

  1. Struts2基础学习(六)—文件的上传和下载

    一.文件的上传 1.单个文件上传      Struts2使用拦截器完成了文件的上传,而且底层使用的也是FileUpload开源组件. 客户端注意事项: (1)method="post&qu ...

  2. 【JavaWeb学习】文件的上传和下载

    一.文件上传 1.1.概述 实现web开发中的文件上传功能,需完成如下二步操作: 在web页面中添加上传输入项 在servlet中读取上传文件的数据,并保存到本地硬盘中 如何在web页面中添加上传输入 ...

  3. SpringMVC 学习笔记(文件的上传和下载)

    在web项目中会遇到的问题:文件上传 文件上传在前端页面的设置:form表单 设置 input 类型 文件上传的请求方式要使用post,要将enctype设置为multipart/form-data ...

  4. SpringMVC+Ajax实现文件批量上传和下载功能实例代码

    需求: 文件批量上传,支持断点续传. 文件批量下载,支持断点续传. 使用JS能够实现批量下载,能够提供接口从指定url中下载文件并保存在本地指定路径中. 服务器不需要打包. 支持大文件断点下载.比如下 ...

  5. 使用FTPClient进行文件服务器内文件的上传和下载

    我用的FTPClient是由Apache组织的commons-net.jar包中的API,这个包用起来非常的方便,很容易上手.我在项目开发的过程中主要用到了文件的上传和下载功能,下面将我开发的代码贴出 ...

  6. Python 进行 SSH 操作,实现本地与服务器的链接,进行文件的上传和下载

    Python 进行 SSH 操作,实现本地与服务器的链接,进行文件的上传和下载 2018年5月26日 19:03 阅读 375 评论 7 我本地和服务器的连接一直使用的是 Xshell 5,而在与服务 ...

  7. JavaWeb中文件的上传和下载

    JavaWeb中文件的上传和下载 转自: JavaWeb学习总结(五十)——文件上传和下载 - 孤傲苍狼 - 博客园https://www.cnblogs.com/xdp-gacl/p/4200090 ...

  8. Javaweb之文件的上传与下载

    Javaweb之文件的上传与下载 一.基于表单的文件上传 如果在表单中使用表单元素 <input type=“file” />,浏览器在解析表单时,会自动生成一个输入框和一个按钮,输入框可 ...

  9. java实现ftp文件的上传与下载

    最近在做ftp文件的上传与下载,基于此,整理了一下资料.本来想采用java自带的方法,可是看了一下jdk1.6与1.7的实现方法有点区别,于是采用了Apache下的框架实现的... 1.首先引用3个包 ...

  10. iOS开发中文件的上传和下载功能的基本实现-备用

    感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传 ...

随机推荐

  1. iOS回顾笔记(06) -- AutoLayout从入门到精通

    iOS回顾笔记(06) -- AutoLayout从入门到精通 随着iOS设备屏幕尺寸的增多,当下无论是纯代码开发还是Xib/StoryBoard开发,自动布局已经是必备的开发技能了. 我使用自动布局 ...

  2. 【转】Objective-C Runtime

    之前在找Runtime资料,这篇条理是相对比较清晰,对我最有启发的一篇,转载以作记录. 对于iOS小白,值得多看几遍,会有不少收获. --------------------------------- ...

  3. Boost库安装(实测vs2012)

    1.下载boost库,我这边下载的是目前最新的:boost_1_63_0.7z 2.解压到本地目录:我这边是:D:\Program Files 3.cmd窗口,以管理员权限打开,执行D:\Progra ...

  4. StudyJams学习历程总结

    Study Jams 是一个学习 Google 在线课程的活动.该活动由学员自发组建课程学习小组,旨在带领小组成员入门 Android 开发,最终将 Android App 上载至 Google Pl ...

  5. [原创]HBase学习笔记(3)- Java程序访问HBase

    这里介绍使用java api来访问和操作HBase,例如create.delete.select.update等操作. 1.HBase配置 配置HBase使用的zookeeper集群地址和端口. pr ...

  6. strspn 和strcspn

    1.strcspn头文件:#inclued<string.h>定义函数:size_t strcspn(const char *s, const char * reject);函数说明:st ...

  7. ECMAScript6-let和const命令

    ▓▓▓▓▓▓ 大致介绍 ES6是下一代的JavaScript语言的标准,目标是让JavaScript可以用来编写大型的复杂程序,成为企业级开发语言,要查看浏览器对ES6的支持程度可以用阮一峰大佬写的工 ...

  8. 获取VB类模块成员函数指针(转)

    最近在做一些VB6.VBA的项目,被如何获取类模块中的函数指针这个问题所困扰,收集整理后,有2分资料值得收藏,特将关键部分留存,以备后续查找. 参照连接1:http://www.cnblogs.com ...

  9. Java开发—乘风破浪

    最近需要上线很多新的JAVA项目,然而很多JAVA的相关库都不太熟悉,项目实现起来遇到了不小阻力,熬了好几天夜.手头的基本完成了,因此打算好好来熟悉下java的相关工具库,需要借助你们,好好的在JAV ...

  10. 什么东西那么吸引别人的眼球!! -----------------------------------for循环

    认识for循环结构 在编码过程中,把一些重复执行代码采用循环结构进行描述,可以大大减化编码工作, 使得代码更加简洁.宜都... 1.     为什么要用for? 比如: 老师叫小明统计全班人的编号,小 ...