博主信息
博文 28
粉丝 2
评论 0
访问量 28806
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
8.8 文件上传案例中的错误信息以最定义的异常类抛出
背着吉他的女侠
原创
1197人浏览过

8月8日作业:

将课堂中的文件上传案例中的错误信息, 全部采用自定义的异常类抛出
1.jpg

1-1.jpg

2.jpg

3.jpg


实例-zuoye1.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>上传文件</title>
</head>
<body>
<form action="zuoye2.php" method="post" enctype="multipart/form-data" style="padding: 20px;">
    <input type="file" name="my_file" id="">
    <input type="hidden" name="MAX_FILE_SIZE" VALUE="3145728">
    <button>图片上传</button>

</form>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

实例--zuoye2.php

<?php

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

    // 自定义错误信息的输出样式
    // 将错误编码加粗, 将错误文本描红
    public function errorInfo()
    {

        return <<< ERROR
                <h2>
                    <strong>{$this->getCode()}</strong>
                    <span style='color:red'>{$this->getMessage()}</span>
                </h2>
        ERROR;
    }

}




try {





// 1. 配置上传参数
// 允许上传的文件类型
$fileType = ['jpg', 'jpeg', 'png', 'gif'];
$fileSize = 3145728;
// 文件上传到服务器上的目录
$filePath = '/uploads/';
// 原始文件名称
$fileName = $_FILES['my_file']['name'];
// 临时文件名
$tmpFile = $_FILES['my_file']['tmp_name'];

// 2. 判断是否上传成功?
$uploadError = $_FILES['my_file']['error'];
if ($uploadError > 0) {
    switch ($uploadError) {
        case 1:
        case 2:
//        die('上传文件不允许超过3M');
        throw new CalException('上传文件不允许超过3M', 101);
        case 3:
//        die('上传文件不完整');
        throw new CalException('上传文件不完整', 102);
        case 4:
//        die('没有文件被上传');
        throw new CalException('没有文件被上传', 103);
        default:
//        die('未知错误');
        throw new CalException('未知错误', 104);
    }
}

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

// 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('文件无法移动到指定目录', 106);
    }
} else {
//    die('非法操作');
    throw new CalException('非法操作', 107);
}


exit();

} catch (CalException $e) {
    // 输出异常信息
//    echo $e->getCode() . ': ' . $e->getMessage();
    echo $e->errorInfo();

}

运行实例 »

点击 "运行实例" 按钮查看在线实例


批改状态:合格

老师批语:上传文件的套路, 不一定只有我这一种方式, 不一定全盘抄教学代码, 百度一下,看一下其它人的实现方式...
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系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+教程免费学