zoukankan      html  css  js  c++  java
  • php基础复习(3)文件上传于下载

    一、
    客户端配置:
    表单页面
    表单的发送方式是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);
  • 相关阅读:
    读后感
    周总结(五)【2019.7.292019.8.4】
    周总结(六)【2019.8.52019.8.11】
    “教室派”APP使用体验
    ios的内存管理差异和iso6与以前内存管理的兼容
    UITextView 和UILable 设置行间距
    IOS 各种问题收藏贴
    __bridge,__bridge_transfer和__bridge_retained
    键盘事件的处理
    JSONKit 使用示例
  • 原文地址:https://www.cnblogs.com/chenjinxinlove/p/5247646.html
Copyright © 2011-2022 走看看