Correction status:qualified
Teacher's comments:太客气了, 直播的过程中,老师也会出现一些失误, 与你们的区别在于可以快速找到问题并解决它... 所以, 出现bug不必担心, 反而是提升自己的机会来了
对于之前的学习的异常类,在电脑练习了多边才大概的掌握,看来很多事情多实践才管用。老师说的对,多写多练啊。
下面是操作过程的实例。
<?php use \Exception; ?> <!--请求类型必须是: post--> <!--数据编码类型: 使用复合类型,通知服务器上传的是文件类型--> <form action="demo4.php" method="post" enctype="multipart/form-data"> <input type="file" name="my_file" id=""> <input type="hidden" name="MAX_FILE_SIZE" value="3145728"> <button>上传</button> </form> <?php //自定义异常类 class testException extends Exception { public function __construct($message = "", $code = 0) { parent::__construct($message, $code); } //自定义错误信息 public function errorInfo(){ //heredoc 输出大段的html代码 return <<<"ERROR" <div> <h3>~出错!错误代码:{$this->getCode()}</3> <p>错误提示信息:{$this->getMessage()}</p></div> ERROR; } } ////下面是课堂老师的案例 try{ // 文件上传 // PHP使用一个超全局变量:$_FILES 来处理文件上传 // 1. 配置上传参数 // 允许上传的文档类型 $fileType = ['jpg', 'jpeg', 'png', 'gif']; // 设置允许上传的文件最大长度 $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 testException('上传文档不允许超过3M','1001'); case 3: throw new testException('上传文件不完整','5003'); case 4: throw new testException('没有文件被上传','1300'); default: throw new testException('未知错误','1500'); } } $extension = explode('.', $fileName)[1]; if (!in_array($extension, $fileType)) { throw new testException('不允许上传' . $extension . ' 文件类型','10043'); } // 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 testException('文件无法移动到指定目录, 请检查目录权限','9887'); } } else { throw new testException('非法操作','40002'); } exit(); } catch(namespace\testException $e){ echo $e->errorInfo(); } ?>
点击 "运行实例" 按钮查看在线实例
【总结】课堂时间有限,最重要的线下的不断联系。遇到困难要去解决。谢谢 php老师辛苦的付出!~