博主信息
博文 28
粉丝 0
评论 0
访问量 25727
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
1012 自定义异常类 20191012 2000-2200
没有人的夏天的博客
原创
711人浏览过

自定义异常类来处理上传过程

自定义 Exception; //系统错误处理类 返回信息;

设计一个exception的 子类  通过 __construct 构造方法传递参数 自定义错误信息

自定义一个 错误信息,返回方法 errorInfo() 进行调用

也可以 直接输出 自定义错误信息;

使用,throw  新建 子类对象  throw  new CalException(参数1,参数2); 并传递错误返回信息

通过try { 代码体,可以用引用  }catch (CalException $e) { echo 调用错误方法  $e->errorInfo() }

实例如下:

<?php
// use Exception; //系统错误处理类
$fileType = ['jpg', 'jpeg', 'png', 'gif'];  //上传文件类别限制

$fileSize = 1024856; //上传文件大小限制

$filePath = '/uploads/'; //上传目录

$fileName = $_FILES['my_file']['name']; // 上传文件名

$tempFile = $_FILES['my_file']['tmp_name']; //临时文件名


// 将系统的异常类进行扩展,自定义
class CalException extends Exception
{
    public function __construct($message = "", $code = 0)
    {        
        parent::__construct($message, $code); //继承父类构造方法 并指定参数
    }

    // 自定义错误提示信息
    public function errorInfo()
    {
        // <<< "ERROR"   ERROR; 用来输出大量的html代码或字符, 并且中间允许有变量且会解析
        // $this->getCode() $this->getMessage() 错误类自带属性,构造方法进行赋值 返回的错误格式内容
        return <<< "ERROR"
<h3>
<strong>{$this->getCode()}: </strong>
<p style="color: red;">{$this->getMessage()}</p>
</h3>
ERROR;
    }
}

try {
// 2. 判断文件是否上传成功?
//$_FILES['my_file']['error'], 0: 表示成功,大于1出错
$uploadError = $_FILES['my_file']['error'];
if ($uploadError > 0) {
    switch ($uploadError) {
        case 1: throw new CalException('文件超过最大限制', 101); // 向系统错误类传递参数
        case 2: throw new CalException('文件超过限制,上传文件不应大于1M', 102);
        case 3: throw new CalException('文件不完整', 103);
        case 4: throw new CalException('没有发现文件', 104);
        default: throw new CalException('未知错误', 105);
    }
}
// 3. 判断文件扩展名是否正确?
$extension = explode('.', $fileName); // 用 . 分割文件名后的
$extension = end($extension); // 取最后一组 值 即上传文件的扩展名

if (!in_array($extension, $fileType)) {
    throw new CalException('文件类型错误'.$extension.'格式受限', 106);
}
// 4. 为了防止同名覆盖, 将上传的文件重命名: md5+时间戳
$fileName = date('YmdHis',time()).md5(mt_rand(1,99)). '.' . $extension;
// 5. 上传文件
if (is_uploaded_file($tempFile)) {
    if (move_uploaded_file($tempFile, __DIR__. $filePath.$fileName)){
        echo '<script>alert("上传成功");history.back();</script>';
    } else {
        throw new CalException('文件无法保存,上传目录受限', 107);
    }
} else {
    throw new CalException('非法操作', 108);
}
exit();

} catch (CalException $e) {
    echo $e->errorInfo();  //根据系统错误类 接收的值 输出错误
    echo '<br>';
    echo '<h3><strong>'.$e->getCode().'</strong><p style="color: red;">'.$e->getMessage().'</p></h3>';
}





批改状态:合格

老师批语:这里面涉及的知识点很多
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系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+教程免费学