博客列表 >8.8 文件上传案例中的错误信息以最定义的异常类抛出

8.8 文件上传案例中的错误信息以最定义的异常类抛出

背着吉他的女侠
背着吉他的女侠原创
2019年08月12日 15:00:191053浏览

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