Blogger Information
Blog 27
fans 1
comment 0
visits 22506
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
异常处理机制,文件上传-2019年10月12日
思杰的博客
Original
598 people have browsed it

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

2. (选做) 写一个与指定数据表绑定的类, 实现基本的模型功能,例如查询, 新增, 更新,删除等操作


课程笔记:

        我们用php中专门用来处理错误的类,异常类Exception。有两个参数,第一个是提示信息,第二个是自定义的错误代码。我们可以通过自定义一个雷去继承异常类,来自定义我们提示错误的代码。

        上传文件需要用表单提交,请求类型必须是post,数据编码类型是复合类型。PHP使用一个超全局变量$_FILES来处理文件上传。

        允许上传的文档类型,上传文件的最大长度,上传到服务器的指定目录路径。是通过三个变量将我们设置的参数设置进去。

        判断文件是否上传成功,通过$_FILES里面的error这个键来判断文件是否上传成功,当返回值是0,则代表上传成功,如果不等于0说明出错。

        判断文件扩展名是否正确,通过explode函数将文件名分割,然后得到他的拓展名,看看是否在自己设置的文档类型里面


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


实例

<?php
namespace _1012_4;
//自定义类
use Exception;

class CalException extends Exception
{
    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;

    }

    public function __toString()
    {
        parent::__toString(); // TODO: Change the autogenerated stub
    }
}

try{

    //文件上传

//1.配置上传参数
//允许上传的文档类型
    $fileType = ['jpg','jpeg','png','gif'];
//允许上传的文件最大长度
    $fileSize = 3145728;

//上传到服务器上的指定目录
    $filePath = '/uploads/';
//原始文件名
    $filename = $_FILES['my_file']['name'];
//临时文件名
    $tmpfilename = $_FILES['my_file']['tmp_name'];


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

//判断文件拓展名是否正确
    $extension = explode('.',$filename)[1];
    if(!in_array($extension,$fileType)){
//    die('不允许上传'.$extension.'文件类型');
        throw new CalException('不允许上传'.$extension.'文件类型<br>',104);
    }

//把文件重命名,防止命名重复:md5+时间戳
    $filename = date('YmdHis',time()).md5(mt_rand(1,99)).'.'.$extension;

//上传文件

    if (is_uploaded_file($tmpfilename)){
        if (move_uploaded_file($tmpfilename,__DIR__.$filePath.$filename)){
            echo '<script>alert("上传成功");history.back();</script>';
        }else{
//        die('文件无法移动到指定目录,请检查目录权限');
            throw new CalException('文件无法移动到指定目录,请检查目录权限<br>',105);
        }
    }else{
//    die('非法操作');
        throw new CalException('非法操作<br>',106);
    }


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

运行实例 »

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

在老师上课讲的上传文件的基础上,我们加入自己的一个错误异常类,然后在每个die语句后面抛出异常,然后用try,catch语句获取错误信息,并且显示在页面上

微信截图_20191023001241.png

写一个与指定数据表绑定的类, 实现基本的模型功能,例如查询, 新增, 更新,删除等操作

类名与表名要对应,类中的属性要与表中的字段对应。

实例

<?php
namespace _1012;
use PDO;
//类名和表名要对应起来
class staff{
    //类属性要与表中的字段对应
    private $staff_id;
    private $name;
    private $age;
    private $sex;
    private $position;
    private $hiredate;

    //属性重载
    public function __get($name)
    {
        return $this->$name;

    }

    public function __set($name, $value)
    {
        $this->$name = $value;
    }

    public function __construct()
    {
        $this->hiredate = date('Y/m/d',$this->hiredate);
        $this->sex = $this->sex ? '男':'女';
    }
}

$pdo = new PDO('mysql:host=127.0.0.1;dbname=huangsijie','root','root');

//查询
$stmt = $pdo->prepare('select * from `staff`');
$stmt->setFetchMode(PDO::FETCH_CLASS,staff::class);
$stmt->execute();
while ($staff = $stmt->fetch()){
    echo "<li>{$staff->staff_id}:{$staff->name}-----{$staff->position}</li>";
}

//删除
$stmt = $pdo->prepare('delete from `staff` where staff_id=1');
$stmt->setFetchMode(PDO::FETCH_CLASS,staff::class);
$stmt->execute();
echo $stmt->rowCount();


//修改
$stmt = $pdo->prepare('update `staff` set sex = "2" where staff_id =2');
$stmt->setFetchMode(PDO::FETCH_CLASS,staff::class);
$stmt->execute();
echo  $stmt->rowCount();

//增加
$stmt = $pdo->prepare('insert into  `staff` (staff_id,name,age,sex) values (1,"黄思杰",22,"1")');
$stmt->setFetchMode(PDO::FETCH_CLASS,staff::class);
$stmt->execute();
echo  $stmt->rowCount();

运行实例 »

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

这里用了简单的四个语句把增删改查,后期如果可以的话,应该把这四个语句放进一个db类里,通过调用对象的方法去实现这些功能。

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