Blogger Information
Blog 77
fans 0
comment 0
visits 55250
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
自定义异常类来处理上传过程以及各种错误_1012
Jet的博客
Original
805 people have browsed it

一、自定义异常类来处理上传过程以及各种错误

1 upload.html文件

实例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <form action="uploads.php" method="POST" enctype="multipart/form-data">
        <input type="file" name="my_file" id="">
        <button>上传</button>
    </form>
</body>

</html>

运行实例 »

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




2 CalException.php文件,自定义异常类

实例

<?php
// 将系统的异常类进行扩展,自定义
class CalException extends Exception
{
    public function __construct($message = "", $code = 0)
    {
        parent::__construct($message, $code);
    }

    // 自定义错误提示信息
    public function errorInfo()
    {
        //heredoc: 用来输出大段的html代码或字符中, 并且中间允许有变量且会解析
        return <<< "ERROR"
        <h2>
        <strong>{$this->getCode()}: </strong>
        <span style="color: red;">{$this->getMessage()}</span>
        </h2>
        ERROR;
    }
}

运行实例 »

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



3 uploads.php文件,处理上传文件

实例

<?php
require_once 'CalException.php';
try {
    //1、配置上传参数
    //允许上传类型
    $fileType = ['image/jpeg', 'image/jpg', 'image/pjpeg', 'image/gif', 'image/png'];
    //允许上传的文件最大长度
    $fileSize = 3145728;
    //上传到服务器上的指定的目录
    $filePath = '/uploads/';
    //原始的文件名
    $fileName = $_FILES['my_file']['name'];
    //上传到服务器上的临时文件名
    $tempFile = $_FILES['my_file']['tmp_name'];

    //2、判断文件市府上传成功
    //$_FILES['my_file']['error'], 0表示成功,大于1表示失败
    $uploadError = $_FILES['my_file']['error'];
    if ($uploadError>0){
        switch($uploadError){
            case 1:
            case 2: throw new CalException('上传文件超过3M', 101);
            case 3: throw new CalException('上传文件不完整', 102);
            case 4: throw new CalException('没有文件被上传', 103);
            default: throw new CalException('未知错误', 104);
        }
    }

    //3、判断文件扩展名是否正确
    //pathinfo(文件名,返回数组元素) ; PATHINFO_EXTENSION,返回类型
    $extension = pathinfo($fileName, PATHINFO_EXTENSION);
    if ( !in_array($_FILES['my_file']['type'], $fileType) ){
        //die('不允许上传 ' . $extension . ' 文件类型');
        throw new CalException('不允许上传 ' . $extension . ' 文件类型', 105);
    }

    //4、为了防止同盟覆盖,将上传的文件重命名
    $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{
            //die('非法操作');
            throw new CalException('非法操作', 106);
        }
    }

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

运行实例 »

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


上传失败显示:

01.jpg


小结:

1、上传文件获取文件类型,直接使用 $_FILES['my_file']['type'] 函数;

2、获取上传文件扩展名,使用 pathinfo()函数。




Correction status:qualified

Teacher's comments:获取文件扩展名的方法很多的
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post