前端页面:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>图片上传</title> </head> <body> <form action="check.php" method="post" enctype="multipart/form-data"> <input type="file" name="myfile" id="myfile"> <!-- 3M = 3*1024K = 3 * 1024 *1024 Byte = 3145728--> <input type="hidden" name="MAX_FILE_SIZE" value="3145728"> <button>上传</button> </form> </body> </html>
文件上传处理页面:
<?php // 自定义异常类:继承自 Exception namespace _0808\_5; use Exception; use Throwable; class CalException extends Exception { // __construct()、__toString(),其它方法统统是Final,不允许重写 public function __construct($message = "", $code = 0) { parent::__construct($message, $code); } // 自定义错误信息的输出样式 // 将错误编码加粗,将错误文本描红 public function errorInfo() { return <<< ERROR <h3> <strong>{$this->getCode()}</strong> <span style="color:red;">{$this->getMessage()}</span> </h3> ERROR; } } try{ // 1、配置上传参数 // 运行上传的文件类型 $fileType = ['jpg','jpeg','png','gif']; // 文件大小 $fileSize = 3145728; // 文件上传到服务器上保存的目录 $filePath = '/uploads/'; // 原始文件名称 $fileName = $_FILES['myfile']['name']; // 临时文件名 $tmpFile = $_FILES['myfile']['tmp_name']; // 2、判断是否上传成功 $uploadError = $_FILES['myfile']['error']; if ($uploadError >0){ switch ($uploadError){ case 1: case 2: // die('上传的文件最大3M'); throw new CalException('上传的文件最大3M',401); case 3: // die('上传文件不完整'); throw new CalException('上传文件不完整', 402); case 4: // die('没有文件被上传'); throw new CalException('没有文件被上传', 403); default: // die('未知错误'); throw new CalException('未知错误', 405); } } // 3、判断扩展名是否正确 $extension = explode('.', $fileName)[1]; if (!in_array($extension, $fileType)){ // die('不允许上传' . $extension . '文件类型'); throw new CalException('不允许上传' . $extension . '文件类型', 406); } // 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('文件无法移动到指定目录,请检查目录的写权限', 407); } }else{ // die('非法操作!'); throw new CalException('非法操作', 407); } exit(); }catch (CalException $ce){ echo $ce->errorInfo(); }
上传成功