批改状态:合格
老师批语:上传文件的套路, 不一定只有我这一种方式, 不一定全盘抄教学代码, 百度一下,看一下其它人的实现方式...
8月8日作业:
将课堂中的文件上传案例中的错误信息, 全部采用自定义的异常类抛出



<!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>
点击 "运行实例" 按钮查看在线实例
<?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();
}点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号