一、
客户端配置:
表单页面
表单的发送方式是post
添加enctype = “multipart/form-data”
 
<form action="doaction.php" method="post" enctype="multipart/from-data">
     <input type="file" name="myfile"/><br/>
     <input type="submit" value="上传文件"/>
</from>
二、—FILES
 
二维数组
第一维是input 的name
第二维 如下
name => nv.jpg  文件名
type   => image/jepg  文件类型MIME
tmp_name =>临时地址
error => 0   错误号
size  =>176943   文件的大小
 
三、移动文件
move_uploaded_file($tem_name,$destination):将服务器上的临时文件移动到指定目录下,移动成功返回true ,失败返回false
copy($src,$dst)
 
 
四、服务器端的配置
 
file_uploads = on ,支持HTTP上传
upload_tem_dir = ,临时文件保存的目录
upload_max_filesize = 2m.允许上传文件的最大值
max_file_uploads = 20,允许一次上传的最大文件数
post_max_size = 8M ,POST方式发送数据的最大值
max_execution_time = -1设置了脚本被解析器终止之前的最大执行时间,单位是秒,防止程序写的不好而占据服务器的资源。
max_input_time = 60,脚本解析输入的数据允许的最大时间,单位是秒
max_input_nesting_level = 64,设置输入的变量的嵌套深度。
max_input_vars = 1000,接受多少输入的变量(限制分别应用与$_GET / $_POST)和$_cookie超全局变量,指令的使用减轻了以哈希碰撞来进行拒绝服务器攻击的可能性,如有超过指令数量的变量,将会导致E_WARNING的产生,更多的输入变量将会从请求截断。
memory_limit =128M,最大单线程的独立内存使用量,也就是一个web请求,给予现成线程的最大内存使用量定义。
 
五、错误号
UPLOAD_ERR_OK  0 ,代表没有发生错误,文件上传成功
UPLAOD_ERR_INI_SIZE  1  ,上传的文件超过了php.ini中upload_max_filesize选项限制的值
UPLOAD_ERR_FROM_SIZE 2 ,上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值。
UPLOAD_ERR_PARTIAL  3 ,文件只有部门上传
UPLOAD_ERR_NO_FILE  4  ,没有文件被上传
UPLOAD_ERR_NO_TMP_DIR  6 ,找不到临时文件夹
UPLOAD_ERR_CANT_WRITE   7 ,文件写入失败
UPLOAD_ERR_EXTENSION   8 , 上传的文件被PHP拓展程序中断
 
六、服务器端限制
限制上传文件的大小
if($fileinfo['size']>$maxsize)
限制上传文件的类型
$allowext = array('jpeg','jpg','png','gif','wbmp'); 
$ext = strtolower(end(explode('.',$fileinfo['name'])));
$ext=pathinfo($fileInfo['name'],PATHINFO_EXTENSION)
if(!in_array($ext,$allowext))
{
     
}
检查是否是真实的图片类型
getimagesize($filename) : 得到指定图片的信息,如果是图片返回数组,如果不是返回false
检查是否是HTTP POST 方式上传
if(!is_uploaded_file($fileinfo['tmp_name'])){}
 
七、文件名不重名
$uniName=md5(uniqid(microtime(true),true)).'.'.$ext;
 
八。路径的判断
if(! file_exists($path))
{
     mkdir($path,0777,true);
     chmod($path,0777);
}
 
九。多文件上传
 
function getFiles()
{
    foreach ($_FILES as $file) {
        if (is_string($file['name'])) {
            $files[$i] = $file;
            $i++;
        }elseif (is_array($file['name'])) {
            foreach ($file['name'] as $key => $val) {
                $files[$i]['name'] = $file['name'][$key];
                $files[$i]['type'] = $file['type'][$key];
                $files[$i]['error'] = $file['error'][$key];
                $files[$i]['size'] = $file['size'][$key];
            }
        }
    }
    return $files;
}
十:下载
$filename=$_GET['filename];
header('content-disposition:attachment;filename='.basename($filename));
header('content-length:'.filesize($filename));
readfile($filename);

php基础复习(3)文件上传于下载的更多相关文章

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

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

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

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

  3. 19、文件上传与下载/JavaMail邮件开发

    回顾: 一. 监听器 生命周期监听器 ServletRequestListener HttpSessionListener ServletContextListener 属性监听器 ServletRe ...

  4. MVC文件上传与下载

    MVC文件上传与下载 MVC文件上传与下载 想想自己从毕业到工作也有一年多,以前公司的任务的比较重,项目中有的时候需要用到什么东西都去搜索一下,基础知识感觉还没有以前在学校中的好.最近开始写博客,真的 ...

  5. SpringBoot整合阿里云OSS文件上传、下载、查看、删除

    1. 开发前准备 1.1 前置知识 java基础以及SpringBoot简单基础知识即可. 1.2 环境参数 开发工具:IDEA 基础环境:Maven+JDK8 所用技术:SpringBoot.lom ...

  6. Http服务器实现文件上传与下载(五)

    一.引言 欢迎大家和我一起编写Http服务器实现文件的上传和下载,现在我回顾一下在上一章节中提到的一些内容,之前我已经提到过文件的下载,在文件的下载中也提到了文件的续下载只需要在响应头中填写Conte ...

  7. Http服务器实现文件上传与下载(一)

    一.引言 大家都知道web编程的协议就是http协议,称为超文本传输协议.在J2EE中我们可以很快的实现一个Web工程,但在C++中就不是非常的迅速,原因无非就是底层的socket网络编写需要自己完成 ...

  8. 基于hap的文件上传和下载

    序言 现在,绝大部分的应用程序在很多的情况下都需要使用到文件上传与下载的功能,在本文中结合hap利用spirng mvc实现文件的上传和下载,包括上传下载图片.上传下载文档.前端所使用的技术不限,本文 ...

  9. 精讲响应式WebClient第4篇-文件上传与下载

    本文是精讲响应式WebClient第4篇,前篇的blog访问地址如下: 精讲响应式webclient第1篇-响应式非阻塞IO与基础用法 精讲响应式WebClient第2篇-GET请求阻塞与非阻塞调用方 ...

  10. 使用Spring MVC实现文件上传与下载

    前段时间做毕业设计的时候,想要完成一个上传文件的功能,后来,虽然在自己本地搭建了一个ftp服务器,然后使用公司的工具完成了一个文档管理系统:但是还是没有找到自己想要的文件上传与下载的方式. 今天看到一 ...

随机推荐

  1. MySQL编码问题

    client 下的default_character_set=utf8; 它是需要的,可是它的作用是干吗的? 它的作用等同执行以下3个命令 SET character_set_client = utf ...

  2. Ubuntu 16.04 LTS Final Beta about JAVA

    我们知道Ubuntu里可能会事先安装了openjdk.但是我习惯于Oracle jdk. ## < 卸载 openjdk > successfully: ### Terminal comm ...

  3. bean在容器上的生命周期

            初始化两种方法:         1,使用init-method属性指定那个方法在bean依赖关系设置好后自动执行.         2,实现initializingBean接口 实现 ...

  4. 自建目录中jsp页面访问servlet路径出错404

    ---恢复内容开始--- 自建目录中jsp页面访问servlet路径出错404 使用eclipse建立的项目,总是会遇到路径问题,比如jsp页面访问servlet,jsp在默认的路径.jsp在自建目录 ...

  5. u盘安装centos

    1. 下载centos系统2. 使用UltraISO制作u盘启动.制作方法:http://jingyan.baidu.com/article/a378c960630e61b329283045.html ...

  6. User Managerment 职责不能使用的问题

    1.此职责默认的是没有启用授权的(grant),需要在系统管理员职责下搜索到对应的菜单,进行grant 2.就算授权后,用户还是不能进行操作,需要进行以下设置: 1. Log into the app ...

  7. php 获取mac地址

    <?php  /**   * 获取机器网卡的物理(MAC)地址* 目前支持WIN/LINUX系统   * 编辑: www.jbxue.com**/  class MacAddInfo {     ...

  8. NOIP201205Vigenère密码

                                   NOIP201205Vigenère密码 [问题描述]   16 世纪法国外交家Blaise de Vigenère设计了一种多表密码加密 ...

  9. QTP11.00安装+破解详细教程

    一.      安装过程 首先双击setup.exe文件,选择“QuickTest Professional安装程序” 此时会查看你机子上面是否有QTP需要,但是机子上没有的组件, 跟着先安装这两个组 ...

  10. org.hibernate.PropertyNotFoundException:could not find a getter for name in class ....

    Hibernate创建持久化类须符合JavaBean的规范,"get","set"后面紧跟属性的名字,并且属性名的首字母为大写.如果不遵守这个规则,Hibern ...