批改状态:合格
老师批语:对于文件上传, 一是要搞明白基本的流程, 二是要记住基本的步骤 , 三就是对各种情况的处理
前端页面:
<!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();
}上传成功

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号