一、
客户端配置:
表单页面
表单的发送方式是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. 杭电ACM分类

    杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze ...

  2. Android 沉浸式状态栏

    1,传统的手机状态栏是呈现出黑色或者白色条状的,有的和手机主界面有很明显的区别.这样就在一定程度上牺牲了视觉宽度,界面面积变小.看一下QQ的应用 2,实现起来也挺简单的,来一起看一下吧 MainAct ...

  3. 12---Net基础加强

    使用ShowDialog窗体之间的回传值: using System; using System.Collections.Generic; using System.ComponentModel; u ...

  4. Repeater 时间格式化

    Repeater 时间格式化   <%# Eval("AboutDate","{0:yyyy-MM-dd hh:mm:ss}")%> 个人认为最好用 ...

  5. js 实现精确加减乘除

    //加法 function accAdd(arg1, arg2) { var r1, r2, m; try { r1 = arg1.toString().split(".")[1] ...

  6. mtool安装

    先安装python pip.一种python包管理工具. 下面这篇文章讲的很详细.亲测可行. https://ruter.github.io/2015/12/03/Update-python/ git ...

  7. 夺命雷公狗ThinkPHP项目之----企业网站21之网站前台二级分类显示名称(TP自定义函数展示无限极分类)

    我们实现网站二级分类的显示的时候,先要考虑的是直接取出顶级栏目,控制器代码如下所示: <?php namespace Home\Controller; use Think\Controller; ...

  8. const C语言(转)

    const在C语言中算是一个比较新的描述符,我们称之为常量修饰符,意即其所修饰的对象为常量(immutable). 我们来分情况看语法上它该如何被使用. 1.函数体内修饰局部变量.例:void fun ...

  9. [MacOSX]

    When i run svn up in the folder, i got these error: svn: Error converting entry in directory 'XXXXX' ...

  10. zw版【转发·台湾nvp系列Delphi例程】HALCON FillUp2

    zw版[转发·台湾nvp系列Delphi例程]HALCON FillUp2 procedure TForm1.Button1Click(Sender: TObject);var op : HOpera ...