自定义异常类来处理上传过程
自定义 Exception; //系统错误处理类 返回信息;
设计一个exception的 子类 通过 __construct 构造方法传递参数 自定义错误信息
自定义一个 错误信息,返回方法 errorInfo() 进行调用
也可以 直接输出 自定义错误信息;
使用,throw 新建 子类对象 throw new CalException(参数1,参数2); 并传递错误返回信息
通过try { 代码体,可以用引用 }catch (CalException $e) { echo 调用错误方法 $e->errorInfo() }
实例如下:
<?php // use Exception; //系统错误处理类 $fileType = ['jpg', 'jpeg', 'png', 'gif']; //上传文件类别限制 $fileSize = 1024856; //上传文件大小限制 $filePath = '/uploads/'; //上传目录 $fileName = $_FILES['my_file']['name']; // 上传文件名 $tempFile = $_FILES['my_file']['tmp_name']; //临时文件名 // 将系统的异常类进行扩展,自定义 class CalException extends Exception { public function __construct($message = "", $code = 0) { parent::__construct($message, $code); //继承父类构造方法 并指定参数 } // 自定义错误提示信息 public function errorInfo() { // <<< "ERROR" ERROR; 用来输出大量的html代码或字符, 并且中间允许有变量且会解析 // $this->getCode() $this->getMessage() 错误类自带属性,构造方法进行赋值 返回的错误格式内容 return <<< "ERROR" <h3> <strong>{$this->getCode()}: </strong> <p style="color: red;">{$this->getMessage()}</p> </h3> ERROR; } } try { // 2. 判断文件是否上传成功? //$_FILES['my_file']['error'], 0: 表示成功,大于1出错 $uploadError = $_FILES['my_file']['error']; if ($uploadError > 0) { switch ($uploadError) { case 1: throw new CalException('文件超过最大限制', 101); // 向系统错误类传递参数 case 2: throw new CalException('文件超过限制,上传文件不应大于1M', 102); case 3: throw new CalException('文件不完整', 103); case 4: throw new CalException('没有发现文件', 104); default: throw new CalException('未知错误', 105); } } // 3. 判断文件扩展名是否正确? $extension = explode('.', $fileName); // 用 . 分割文件名后的 $extension = end($extension); // 取最后一组 值 即上传文件的扩展名 if (!in_array($extension, $fileType)) { throw new CalException('文件类型错误'.$extension.'格式受限', 106); } // 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 CalException('文件无法保存,上传目录受限', 107); } } else { throw new CalException('非法操作', 108); } exit(); } catch (CalException $e) { echo $e->errorInfo(); //根据系统错误类 接收的值 输出错误 echo '<br>'; echo '<h3><strong>'.$e->getCode().'</strong><p style="color: red;">'.$e->getMessage().'</p></h3>'; }