8月8日作业:
将课堂中的文件上传案例中的错误信息, 全部采用自定义的异常类抛出
实例-zuoye1.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>上传文件</title> </head> <body> <form action="zuoye2.php" method="post" enctype="multipart/form-data" style="padding: 20px;"> <input type="file" name="my_file" id=""> <input type="hidden" name="MAX_FILE_SIZE" VALUE="3145728"> <button>图片上传</button> </form> </body> </html>
运行实例 »
点击 "运行实例" 按钮查看在线实例
实例--zuoye2.php
<?php class CalException extends Exception { // __construct(), __toString(), 其它方法统统是Final 不允许重写 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; } } try { // 1. 配置上传参数 // 允许上传的文件类型 $fileType = ['jpg', 'jpeg', 'png', 'gif']; $fileSize = 3145728; // 文件上传到服务器上的目录 $filePath = '/uploads/'; // 原始文件名称 $fileName = $_FILES['my_file']['name']; // 临时文件名 $tmpFile = $_FILES['my_file']['tmp_name']; // 2. 判断是否上传成功? $uploadError = $_FILES['my_file']['error']; if ($uploadError > 0) { switch ($uploadError) { case 1: case 2: // die('上传文件不允许超过3M'); throw new CalException('上传文件不允许超过3M', 101); case 3: // die('上传文件不完整'); throw new CalException('上传文件不完整', 102); case 4: // die('没有文件被上传'); throw new CalException('没有文件被上传', 103); default: // die('未知错误'); throw new CalException('未知错误', 104); } } // 3. 判断扩展名是否正确? $extension = explode('.', $fileName)[1]; if (!in_array($extension, $fileType)) { // die('不允许上传' . $extension . '文件类型'); throw new CalException('不允许上传' . $extension . '文件类型', 105); } // 4. 为了防止同名文件相互覆盖, 应该将上传到目录中 的文件重命名 $fileName = date('YmdHis', time()).md5(mt_rand(1,99)). '.' . $extension; // 5. 上传文件 // 检测是否是通过 post 上传的 if (is_uploaded_file($tmpFile)) { if (move_uploaded_file($tmpFile, __DIR__ . $filePath. $fileName)) { echo '<script>alert("上传成功");history.back();</script>'; } else { // die('文件无法移动到指定目录, 请检查目录的写权限'); throw new CalException('文件无法移动到指定目录', 106); } } else { // die('非法操作'); throw new CalException('非法操作', 107); } exit(); } catch (CalException $e) { // 输出异常信息 // echo $e->getCode() . ': ' . $e->getMessage(); echo $e->errorInfo(); }
运行实例 »
点击 "运行实例" 按钮查看在线实例