登录  /  注册
博主信息
博文 27
粉丝 1
评论 0
访问量 21468
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
异常处理机制,文件上传-2019年10月12日
思杰的博客
原创
555人浏览过

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类里,通过调用对象的方法去实现这些功能。

批改状态:合格

老师批语:还在写之前的作业, 赶紧哟
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学