zoukankan      html  css  js  c++  java
  • PHP核心编程--文件上传(包含多文件上传)

    一.单文件上传

    图片上传界面:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
    
         <form name='frm'action="./uploadSave.php" method="post" enctype="multipart/form-data">
             <input type="file" name="upfile" ></input>
             <input type="submit" name="submit" value="上传图片"></input>
         </form>
    
    
    </body>
    </html>

    上传处理文件:

    <?php
    header('content-type:text/html;charset=utf-8');
    
    /**
     * 上传文件:可以通过输入的参数设置上传的文件类型
     * 上传文件的大小限制,和上传的路径
     * @param  [type] $myupfile [表单文件域name的名称]
     * @param  [type] $maxsize  [允许上传的最大值]
     * @param  [type] $arr_mime [允许的MIME类型]
     * @param  [type] $path     [上传的路径]
     * @author qinxiaoshou
     * 2017年9月6日
     */
    
    function uploadfile($myupfile, $maxsize, $arr_mine, $path) {
            //判断文件是否是通过 HTTP POST 上传的
            // if (isset($_POST['submit'])) {}
            if(!is_uploaded_file($myupfile['tmp_name'])) {
                //如果有错误则直接停止脚本
                echo "上传有错误,请重新上传";
            }
            //判断是否有错误
            if ($myupfile['error']) {
                echo "上传有错误,请重新上传";
            }
            //判断文件大小 -- 不允许上传大于2M的文件
            if ($myupfile['size'] > $maxsize) {
                echo "上传文件过大,请重新上传";
            }
            //获取文件扩展名
            $filename = $myupfile['name'];
            // //方法一
            //strrpos 计算指定字符串在目标字符串中最后一次出现的 位置
            //strrpos(haystack, needle);
            //strrpos(大海, 针);
            // $index = strrpos($filename,'.');
            // $ext = substr($filename,$index);
            // echo "$ext";
    
            //方法二
            //strrchr - 查找指定字符在字符串的最后一次出现
            $ext = strrchr($filename,'.'); // .jpg
            // echo $ext;
            //判断文件类型
    
            //面向过程风格
            $fs = finfo_open(FILEINFO_MIME_TYPE);
            $mine = finfo_file($fs,$myupfile['tmp_name']);
            
            //允许上传的文件类型
            //$arr_mine = ['image/jpeg','image/png'];
            //in_array — 检查数组中是否存在某个值
            //in_array(needle, haystack)
            if(!in_array($mine,$arr_mine)) {
                die('文件的类型不正确,请重新上传');
            }
            //构建临时文件
            $filename = $myupfile['tmp_name'];
            //构建目标文件
            // $path = './upload';
            $destination  = $path.'/'.date('YmdHis').$ext;
    
            //将上传文件移动到新的位置返回布尔
            //move_uploaded_file(filename,destination)
            //move_uploaded_file(临时文件,自定义目标文件)
            if(!move_uploaded_file($filename,$destination)) {
                die('上传失败!');
            }
        
    }

     调用封装方法界面

    <?php
    header('content-type:text/html;charset=utf-8');
    //将上传函数包含
    require './config.php';
    //判断是否是HTTP POST上传的
    if (isset($_POST['submit'])) {
        
        $myupfile = $_FILES['upload'];
        $maxsize = 2*1024*1024;
        $arr_mine = ['image/jpeg','image/png'];
        $path = './upload';
        uploadfile($myupfile,$maxsize,$arr_mine,$path);
    }else{
            //如果直接访问此页面
        echo "<script>alert('非法上传');location.href='index2.php'</script>";
    }
    
        

    二,多文件上传

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <form name='frm' method='post' action='upload.php' enctype="multipart/form-data">
            <table width="50%" border="2" align="center" rules="all" cellpadding="10">
                <tr>
                    <th colspan="2">
                    上传文件:<br>
                    <input type="file" name="upload[]"></input><br><br>
                    <input type="file" name="upload[]"></input><br><br>
                    <input type="file" name="upload[]"></input><br><br>
                    <input type="submit" name="submit" value="上传"></input>
                    </th>
                </tr>
            </table>
        </form>
    </body>
    </html>

    多文件上传处理:

    <?php 
    header('content-type:text/html;charset=utf-8');
    
    if (isset($_POST['submit'])) {
        /*echo "<pre>";
        print_r($_FILES);
        echo "</pre>";
        echo "<hr>";*/
    
        $arr = $_FILES['upload'];
        echo "<pre>";
        print_r($arr);
        echo "</pre>";
        echo "<hr>";
    
        foreach ($arr['tmp_name'] as $key => $value) {
            /*echo $key,$value,"<br>";
            die;*/
            //构建临时文件
                //$filename = $_FILES['upload']['tmp_name'];
                //构建目标文件
                if( $arr['size'][$key] >2*1024*1024){
                    die('no');
                }
                $path = './upload';
                //获取一个带前缀、基于当前时间微秒数的唯一ID。 
                $destination = $path.'/'.uniqid('itcast').'.jpg';
                //将上传的文件移动到新位置,返回布尔
                //move_uploaded_file(filename, destination)
                //move_uploaded_file(临时文件, 自定义目标文件)
                if(!move_uploaded_file($value,$destination)){
                    die('上传失败!');
                }
        }
        
    
    } else {
        //如果直接访问此页面
        echo "<script>alert('非法上传');location.href='index.php'</script>";
    }
    
    
    ?>
  • 相关阅读:
    STM32---GPIO
    SQLITE笔记
    STM32 ---- PWM
    STM32--- IIC使用
    TP配置apache下Rewrite模式
    韩顺平老师SNS数据库表 http://blog.csdn.net/zxman660/article/details/7786994
    HashMap和HashTable的区别http://blog.csdn.net/shohokuf/article/details/3932967
    HashMap和HashSet的区别http://www.importnew.com/6931.html
    在mysql中存储生日,php中计算今天是否为用户生日
    文件的MIME类型
  • 原文地址:https://www.cnblogs.com/mrszhou/p/7487317.html
Copyright © 2011-2022 走看看