博主信息
博文 13
粉丝 0
评论 2
访问量 11896
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
8.8文件上传、异常处理
55555的博客
原创
1098人浏览过

前端页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>图片上传</title>
</head>
<body>

<form action="check.php" method="post" enctype="multipart/form-data">
    <input type="file" name="myfile" id="myfile">
 <!-- 3M = 3*1024K = 3 * 1024 *1024 Byte = 3145728-->
 <input type="hidden" name="MAX_FILE_SIZE" value="3145728">
    <button>上传</button>
</form>

</body>
</html>

QQ截图20190809180434.jpg


文件上传处理页面:

<?php

//  自定义异常类:继承自 Exception

namespace _0808\_5;

use Exception;
use Throwable;

class CalException extends Exception
{
    //  __construct()、__toString(),其它方法统统是Final,不允许重写
    public function __construct($message = "", $code = 0)
    {
        parent::__construct($message, $code);
    }

    //  自定义错误信息的输出样式
    //  将错误编码加粗,将错误文本描红
    public function errorInfo()
    {
        return <<< ERROR
            <h3>
                <strong>{$this->getCode()}</strong>
                <span style="color:red;">{$this->getMessage()}</span>
            </h3>
ERROR;
    }
}



try{


//  1、配置上传参数
//  运行上传的文件类型
    $fileType = ['jpg','jpeg','png','gif'];
//  文件大小
    $fileSize = 3145728;

//  文件上传到服务器上保存的目录
    $filePath = '/uploads/';

//  原始文件名称
    $fileName = $_FILES['myfile']['name'];
//  临时文件名
    $tmpFile = $_FILES['myfile']['tmp_name'];

//  2、判断是否上传成功
    $uploadError = $_FILES['myfile']['error'];
    if ($uploadError >0){
        switch ($uploadError){
            case 1:
            case 2:
//                die('上传的文件最大3M');
                throw new CalException('上传的文件最大3M',401);
            case 3:
//                die('上传文件不完整');
                throw new CalException('上传文件不完整', 402);
            case 4:
//                die('没有文件被上传');
                throw new CalException('没有文件被上传', 403);
            default:
//                die('未知错误');
                throw new CalException('未知错误', 405);
        }
    }

//  3、判断扩展名是否正确
    $extension = explode('.', $fileName)[1];
    if (!in_array($extension, $fileType)){
//        die('不允许上传' . $extension . '文件类型');
        throw new CalException('不允许上传' . $extension . '文件类型', 406);
    }

//  4、为了防止同名文件被覆盖,应该将上传到目录中的文件重命名
    $fileName = date('ymdHis', time()).md5(mt_rand(1,99)). '.' .$extension;

//  5、上传文件
//  检测是否是通过 post 上传的文件
    if (is_uploaded_file($tmpFile)){
        if (move_uploaded_file($tmpFile, __DIR__ . $filePath . $fileName)){
            echo '<script>alert("上传成功!");history.back();</script>';
        }else{
//            die('文件无法移动到指定目录,请检查目录的写权限');
            throw new CalException('文件无法移动到指定目录,请检查目录的写权限', 407);
        }
    }else{
//        die('非法操作!');
        throw new CalException('非法操作', 407);
    }

    exit();


}catch (CalException $ce){
    echo $ce->errorInfo();
}

上传成功

QQ截图20190809180625.jpg

批改状态:合格

老师批语:对于文件上传, 一是要搞明白基本的流程, 二是要记住基本的步骤 , 三就是对各种情况的处理
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学