博客列表 >1012 自定义异常类 20191012 2000-2200

1012 自定义异常类 20191012 2000-2200

没有人的夏天的博客
没有人的夏天的博客原创
2019年10月23日 11:25:12521浏览

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

自定义 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 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议