PHP之文件上传/单文件/多文件

本文阅读 4 分钟
首页 PHP基础语法,后端 正文

1. 单文件上传

  • 效果图如下:
    71994-gi5zgkmewdh.png
  • 代码如下:
//单文件上传
// print_r($_FILES);
//1.上传文件不能为空
if (isset($_FILES['tupian'])) {
    // 获取到当前的图片原始名
    $name = $_FILES['tupian']['name'];
    // 获取到临时文件名
    $tmpName = $_FILES['tupian']['tmp_name'];
    // 获取上传错误
    $error = $_FILES['tupian']['error'];
    //判断是否上传错误
    //当error大于0的时候就是有错误
    if ($error > 0) {
        //使用switch判断
        $cw = '<p style="color:red">上传失败错误原因:</p>';
        switch ($error) {
                //当错误为1时....
            case 1:
                $cw .= '文件过大超过配置文件限制大小';
                break;
            case 2:
                $cw .= '要上传的文件大小超出浏览器限制';
                break;
            case 3:
                $cw .= '文件仅部分被上传';
                break;
            case 4:
                $cw .= '没有找到要上传的文件';
                break;
            case 5:
                $cw .= '服务器临时文件夹丢失';
                break;
            case 6:
                $cw .= '文件写入到临时文件夹出错';
                break;
            case 7:
                $cw .= '文件写入失败,请检查目录权限';
                break;
        }
        echo $cw;
    } else {
        //没有错误继续进行操作
        //当没有错误的时候 先进行判断文件上传是否合法POST
        // is_uploaded_file:判断文件是否是通过 POST 上传的
        if (is_uploaded_file($tmpName)) {
            //如果是继续判断文件类型是否正确
            $hz = ['jpg', 'png', 'gif', 'jpeg', 'webp'];
            //拿到文件名后缀
            $houzhui = pathinfo($name)['extension'];
            //in_array用来查询数组中是否存在某个元素
            if (in_array($houzhui, $hz)) {
                // 如果合法那么继续上传
                //创建目录名称等会将临时文件移动到指定目录
                $path = 'images/';
                //防止重复名 使用md5加密原文件名+时间戳
                $mz = $path . md5($name) . time() . '.' . $houzhui;
                //将临时文件上传到指定目录
                // move_uploaded_file:将上传的文件移动到新位置
                if (move_uploaded_file($tmpName, $mz)) {
                    //上传成功之后打印即可
                    echo '上传成功';
                    echo "<img src='$mz' width='100'/>";
                }
            } else {
                echo '文件类型不存在';
            }
        } else {
            echo '非法上传';
        }
    }
}
?>
<body>
    <form action="" method="post" enctype="multipart/form-data">
        <fieldset>
            <legend>单文件上传</legend>
            <input type="file" name="tupian">
            <button>上传</button>
        </fieldset>
    </form>
</body>

2. 多文件上传-1

  • 效果图如下:
    45104-9i7q8j64ie6.png
  • 代码如下:
<?php
//多文件上传
// printf('<pre>%s</pre>', print_r($_FILES, true));
//使用foreach遍历
foreach($_FILES as $file){
    //判断是否为有错误 如果等于0就代表上传成功开始处理
    if($file['error'] === 0){
        if (is_uploaded_file($file['tmp_name'])) {
            //如果是继续判断文件类型是否正确
            $hz = ['jpg', 'png', 'gif', 'jpeg', 'webp'];
            //拿到文件名后缀
            $houzhui = pathinfo($file['name'])['extension'];
            //in_array用来查询数组中是否存在某个元素
            if (in_array($houzhui, $hz)) {
                // 如果合法那么继续上传
                //创建目录名称等会将临时文件移动到指定目录
                $path = 'images/';
                //防止重复名 使用md5加密原文件名+时间戳
                $mz = $path . md5($file['name']) . time() . '.' . $houzhui;
                //将临时文件上传到指定目录
                // move_uploaded_file:将上传的文件移动到新位置
                if (move_uploaded_file($file['tmp_name'], $mz)) {
                    //上传成功之后打印即可
                    echo '上传成功';
                    echo "<img src='$mz' width='100'/>";
                }
            } else {
                echo '文件类型不存在';
            }
        } else {
            echo '非法上传';
        }
        //将文件移入到指定目录
    }
}
?>
<body>
    <form action="" method="post" enctype="multipart/form-data">
        <fieldset>
            <legend>多文件上传1-逐条上传</legend>
            <input type="file" name="tupian">
            <input type="file" name="tupian1">
            <input type="file" name="tupian2">
            <button>上传</button>
        </fieldset>
    </form>
</body>

3.多文件上传-批量上传

  • 效果图如下:
    48413-b5gzjldpt4.png
  • 代码如下:
<?php
//多文件上传
// printf('<pre>%s</pre>', print_r($_FILES, true));
//判断是否为空
if (isset($_FILES['tupian'])) {
    // 使用循环遍历
    foreach($_FILES['tupian']['error'] as $k=>$error){

        if($error === UPLOAD_ERR_OK){
            $name = $_FILES['tupian']['name'][$k];
            $tmpName = $_FILES['tupian']['tmp_name'][$k];
            if (is_uploaded_file($tmpName)) {
                $hz = ['jpg', 'png', 'gif', 'jpeg', 'webp'];
                //拿到文件名后缀
                $houzhui = pathinfo($name)['extension'];
                //in_array用来查询数组中是否存在某个元素
                if (in_array($houzhui, $hz)) {
                    // 如果合法那么继续上传
                    //创建目录名称等会将临时文件移动到指定目录
                    $path = 'images/';
                    //防止重复名 使用md5加密原文件名+时间戳
                    $mz = $path . md5($name) . time() . '.' . $houzhui;
                    //将临时文件上传到指定目录
                    // move_uploaded_file:将上传的文件移动到新位置
                    if (move_uploaded_file($tmpName, $mz)) {
                        //上传成功之后打印即可
                        echo '上传成功';
                        echo "<img src='$mz' width='100'/>";
                    }
                } else {
                    echo '文件类型不存在';
                }
            } else {
                echo '非法上传';
            }
        }
    }
}

?>
<body>
    <form action="" method="post" enctype="multipart/form-data">
        <fieldset>
            <legend>多文件上传-批量上传</legend>
            <input type="file" name="tupian[]" multiple>
            <button>上传</button>
        </fieldset>
    </form>
</body>
原创文章,作者:huixiang,如若转载,请注明出处:https://www.hui-xiang.cn/archives/203.html
-- 展开阅读全文 --
PHP数据库篇:PDO链接数据库/CURD增删改查操作
« 上一篇 08-18
PHP实现分页功能/分页条的优化
下一篇 » 08-20

相关推荐