首页 > php代码 > PHP图片、文件批量上传代码

PHP图片、文件批量上传代码

不管是文件还是图片批量上传我们第一个是在html中做name=userfile[]这种数组变量,在php接受中我们做for ($_i=0; $_i<$_cont; $_i++)遍历这样就可以实现文件批量上传了,下面我来看一个实例

例子

<?php
session_start();
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PHP文件批量上传</title>
<style>
* {margin:0; padding:0; list-style:none;}
.content {width:400px; height:auto; margin:0 auto; margin-top:60px; padding-bottom:30px; background:#ffd3b6; border:dashed 1px #f90}
.content h1 { width:400px; height: 30px; line-height:30px; text-align:center; font-family:"微软雅黑"; font-size:14px; color:#000}
.content .error {width:300px; height:auto; line-height:30px; text-align:center; margin:0 auto; color:#f00}
.content .con {width:340px; height:auto; margin:0 auto; font-size:12px;}
.content #file { width:280px; height:20px; border:solid 1px #ccc; background:#fff; margin:10px 0px 6px 0; font-size:12px;}
.content #send { width:60px; height:22px; border:solid 1px #ccc; background:#fff; font-size:12px; margin-top:10px;}
</style>
<script type="text/javascript" src="js/jquery.js"></script>
<script>
$(document).ready(function () {
    $('#cont').val($('.file #file').size());
    $('#send').eq(0).click(function () {
        var filesize = $('.file #file').size();
        $('.file').append("<input type='file' name='userfile[]' id='file'/>");
        $('#cont').val(filesize + 1);
    });
});
</script>
</head>
<body>
<div>
<h1>PHP文件批量上传</h1>
<div>
<div>
<?php
if ($_GET['up'] == up) {
    //防止重复提交
    if ($_SESSION['file'] == $_GET['irand']) {
        $_cont = intval($_POST['cont']); //将file框总数接收并转换成整型
        $_size = 20000; //设置限制文件大小
        $_dir = 'pdir/'; //文件保存目录
        function size($_size) {
            //判断文件大小是否大于1024bit 如果大于,则将大小取值为KB,以此类推
            if ($_size > 1024 * 1024) {
                return round($_size / 1024 / 1024, 2) . ' MB';
            } else if ($_size > 1024) {
                $_size = $_size / 1024;
                return ceil($_size) . 'KB';
            } else {
                return $_size . ' bit';
            }
        }
        //设置上传图片的类型,设置图片上传大小
        $_upfiles = array(
            'image/jpeg',
            'image/pjpeg',
            'image/png',
            'image/x-png',
            'image/gif'
        );
        //利用for循环上传文件
        for ($_i = 0; $_i < $_cont; $_i++) {
            if (is_array($_upfiles)) {
                if (!in_array($_FILES['userfile']['type'][$_i], $_upfiles)) {
                    exit('请上传格式为:jpg,png,gif的文件<br /><a href="pupload.php">返回</a>');
                }
            }
            //判断文件大小
            if ($_FILES['userfile']['size'][$_i] > $_size) {
                exit('上传文件不能超过:' . size($_size));
            }
            //检测文件是否已经上传
            if ($_FILES['userfile']['error'][$_i] > 0) {
                switch ($_FILES['userfile']['error'][1]) {
                    case 1:
                        echo '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值';
                        break;
                    case 2:
                        echo '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值';
                        break;
                    case 3:
                        echo '文件只有部分被上传';
                        break;
                    case 4:
                        echo '没有文件被上传';
                        break;
                    case 6:
                        echo '找不到临时文件夹';
                        break;
                    case 7:
                        echo '文件写入失败';
                        break;
                }
                exit;
            }
            //获取文件扩展名
            if (!is_dir($_dir)) {
                mkdir($_dir, 0700);
            }
            //生成随笔数
            $_rand = mt_rand(0, 100000);
            //获取文件扩展名
            $_n = explode('.', $_FILES['userfile']['name'][$_i]); //将文件名分割
            $_file_len = count($_n); //返回数组长度
            //确保获取的扩展名是最后一个.后面的
            $_name = $_dir . time() . '_' . $_rand . '.' . $_n[$_file_len - 1];
            //移动文件到指定的目录
            if (is_uploaded_file($_FILES['userfile']['tmp_name'][$_i])) {
                if (!@move_uploaded_file($_FILES['userfile']['tmp_name'][$_i], $_name)) {
                    exit('文件移动失败');
                } else {
                    echo '文件上传成功<br />';
                    echo '文件路径:' . $_name . '<br />';
                    echo '文件大小:' . size(filesize($_name));
                    echo '<br /><a href="pupload.php">返回继续上传</a>';
                }
            } else {
                exit('上传的临时文件不存在,无法将文件移动到指定文件夹');
            }
        }
        //销毁session变量,有几种方法
        //第一种,销毁所有session变量:session_destroy();
        //第二种:销毁单个如:$_SESSION['file']=''
        session_destroy();
        exit;
    } else {
        exit('您已经提交过了,不能重复提交<br /><a href="pupload.php">返回</a>');
    }
}
?>
</div>
<?php
$_irand = mt_rand(0, 1000000);
$_SESSION['file'] = $_irand; ?>
<form action="?up=up&irand=<?php
echo $_irand; ?>" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
<input type="hidden" name="cont" value="" id="cont" />
<div>
<input type="file" name="userfile[]" id="file"/>
<input type="file" name="userfile[]" id="file"/>
<input type="file" name="userfile[]" id="file"/>
<input type="file" name="userfile[]" id="file"/>
</div>
<br />
<input type="button" name="send" value=" 添加一个 " id="send"/>
<input type="submit" name="send" value=" 点击上传 " id="send"/>
</form>
</div>
</div>
</body>

核心原理分析

在多文件上传中我们前台最重要的是

<input type="file" name="userfile[]" id="file"/>
<input type="file" name="userfile[]" id="file"/>
<input type="file" name="userfile[]" id="file"/>
<input type="file" name="userfile[]" id="file"/>

这几行代码有细节的朋友会发现name="userfile[]"了,这个是以数组存储了,这样我们如果使用js也可以这样增加<input type="file" name="userfile[]" id="file"/>就可以了,那么在php是如何获取的呢

在多文件上传中php处理是一个关键

<?php
for ($_i = 0; $_i < $_cont; $_i++) {
    if (is_uploaded_file($_FILES['userfile']['tmp_name'][$_i])) {
        if (!@move_uploaded_file($_FILES['userfile']['tmp_name'][$_i], $_name)) {
            exit('文件移动失败');
        } else {
            echo '文件上传成功<br />';
            echo '文件路径:' . $_name . '<br />';
            echo '文件大小:' . size(filesize($_name));
            echo '<br /><a href="pupload.php">返回继续上传</a>';
        }
    }
?>

这里显示很简单我们会看到有一个for,for就是遍历数组,遍历userfile[]数组,然后再由$_FILES['userfile']['tmp_name'][$_i]来获取不同文件图片再进行上传即可,注意[$_i]就是你的多文件上传项了,只是保存在了数组中。


本文链接:http://www.phprm.com/code/63223.html

收藏随意^^请保留教程地址.

标签:文件上传 explode for循环

相关文章

发表留言