• 简易PHP多文件上传源码


    <?php 
    session_start();
    header("Content-type: text/html; charset=utf-8"); 
    include_once 'Upload.class.php';
    
    upload::setVerifyBySession();
    if($_POST["sbt"])
    {
        $upload = new upload("pic", $_POST["verify"]);
        $picName = $upload->uploadFile();
    }
    ?>
    <html> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    <head> 
    <title>多文件上传</title> 
    
    </head> 
    <body> 
    <a href="#" onclick="add()">增加图片上传窗</a>
    
    <form action="" method="post" enctype="multipart/form-data" onSubmit="return btn();">
    <div id="inputArea">
        <input type="file" name="pic[]" />
    </div>
    <input type="submit" name="sbt" value="上传" />
    <input type="hidden" name="verify" value='<?php echo $_SESSION["verify"] ?>' />
    
    </form>
    
    <script type="text/javascript">
        function btn()
        {
            var flag = false;
            var objs = document.getElementsByName("pic[]");
            for(var i=0; i < objs.length; i++)
            {
                var obj = objs[i];
                if(obj.value != "")
                {
                    flag = true;
                }
            }
            return flag;
        }
    
        function add()
        {
            var input = document.getElementById("inputArea");
            input.innerHTML += "<br /><input type=\"file\" name=\"pic[]\" />";
        }
    </script>
    </body> 
    </html> 

    Upload.class.php

    <?php
    
    /**
     * 图片上传类
     */
    class upload
    {
        private $verify;    //用于方式刷新导致重复上传的比较参数
        private $dir;        //上传目录
        private $img;        //上传的图片信息
        
        public function __construct($inputName, $verify)
        {
            session_start();
            $this->img = $_FILES[$inputName];                
            $this->verify = $verify;                        
            $this->dir = dirname(__FILE__) . "\uploads";    
        }
        
        /**
         * 设置防止重复刷新提交的比较参数Verify
         */
        public static function setVerifyBySession()
        {
            if(!isset($_SESSION["verify"]))
            {
                $_SESSION["verify"] = time();
            }
        }
        
        /**
         * 上传图片主逻辑
         */
        public function uploadFile()
        {
            self::repeatSubmit();
            self::directoryExist();
            $i = 0;
            foreach ($this->img["tmp_name"] as $tmp)
            {
                $filename = explode(".", $this->img["name"][$i++]);
                $filename = self::setName($filename);
                
                if($tmp)
                {
                    $savepath = $this->dir . "\\" . $filename;
                    $stats = move_uploaded_file($tmp, $savepath);
                    self::showPic($stats, $filename);
                }
            }
        }
        
        /**
         * 判断是否重复提交
         */
        private function repeatSubmit()
        {
            if($this->verify != $_SESSION["verify"])
            {
                echo "<script>alert('请勿重复提交!'); window.location.href = './'</script>";
                exit();
            }
            else
            {
                unset($_SESSION["verify"]);
            }
        }
        
        /**
         * 判断上传目录是否存在
         */
        private function directoryExist()
        {
            if(!file_exists($this->dir))
            {
                mkdir($this->dir);
            }
        }
        
        /**
         * 给上传文件重新命名
         */
        private function setName($f)
        {
            $name = md5($f[0] . date("mdHis") . rand(1, time()));
            return $name . "." . $f[1];
        }
        
        /**
         * 上传成功后,显示上传图片
         */
        private function showPic($stats, $filename)
        {
            if($stats)
            {
                echo "<img src = 'uploads/$filename' />" . $filename . "<br>";
            }
        }
    }
    ?>
  • 相关阅读:
    C#三种模拟自动登录和提交POST信息的实现方法
    关于c#调用C++代码的一些应用的体会
    c# 路径空格---ProcessStartInfo参数问题
    用C#调用Matlab图像处理自制QQ游戏2D桌球瞄准器
    使用C#开发纽曼USB来电小秘书客户端小结
    C#传递参数到线程的n个方法
    C# : 操作Word文件的API
    c# 导出Excel
    使用C#: 自动切换鼠标的左右手习惯
    Linux 系统的文件类型
  • 原文地址:https://www.cnblogs.com/kingfly/p/3062338.html
Copyright © 2020-2023  润新知