批改状态:合格
老师批语:才写到这里, 希望以当下课程为主, 有空再补写...
作业完成的不错
首先写一个html文档,创建一个基本的上传代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>上传文件</title> </head> <body> <form action="demo2.php" method="post" enctype="multipart/form-data"> <!-- name有值,告诉服务器从哪拿东西 --> <input type="file" name="my_file" id=""> <!-- 创建隐藏域,设置文件允许的最大长度 --> <input type="hidden" name="MAX_FILE_SIZE" value="3145728"> <button>上传</button> </form> </body> </html>
点击 "运行实例" 按钮查看在线实例
创建demo2.php,此次课程代码注释写在里面了
<?php
namespace _1012;
//导入系统异常类
use Exception;
//将系统异常类进行自定义,拓展
class k extends Exception
{//对错误信息提示符以及错误代码进行自定义
public function __construct($message = "",$code = 0)
{
parent::__construct($message,$code);
}
//自定义错误提示信息
public function errorInfo()
{// heredoc语法: 用来输出大段的html代码或字符中, 并且中间允许有变量且会解析,用<<<开始,给标识符为ERROR
//getMessage返回错误信息
//getCode返回当前错误代码
return <<< "ERROR"
<h2>
<strong>{$this->getCode()}: </strong>
<span style="color: red;">{$this->getMessage()}</span>
</h2>
ERROR;
}
}
try {//要处理的代码
$fileType = ['jpg', 'jpeg', 'png', 'gif'];
//文件大小。$_FILES超全局变量处理文件上传,文件上传的所有数据保存在里面,它是一个二维数组,第一个键保存的是前端name的属性值,用来指定是谁发送过来的文件,第二个键是上传文件的原始名
$fileSize=3145728;
//上传到什么位置
$filePath ='/uploads/';
//原始文件名
$fileName = $_FILES['my_file']['name'];
//临时文件名,作为上传文件的中转站,暂时保存地,提高文件上传速率,减少出错概率
$tempFile = $_FILES['my_file']['tmp_name'];
//2.判断文件是否上传成功,通过超全局变量$_FILES中【error】进行判断。当返回的值是0时,表示成功,大于1就出错。
//获取当前错误代码
$uploadError = $_FILES['my_file']['error'];
if($uploadError>0){
switch($uploadError){
case 1:
case 2: throw new k('上传文档不允许超过3M', 111);//die('上传文档不允许超过3M');
case 3: throw new k('上传文件不完整', 112);//die('上传文件不完整');
case 4: throw new k('没有文件被上传', 113);//die('没有文件被上传');
default: throw new k('未知错误', 114);//die('未知错误');
}
}
//3.判断文件类型是否正确,通过拓展名
//利用函数explode()切割文件名,通过一个点.来切割成为两部分,为数组形式
$extension=explode('.',$fileName)[1];
//此时拿到拓展名
if(!in_array($extension,$fileType)){
//die('不允许上传' .$extension. '文件类型');
throw new k('不允许上传'.$extension. '文件类型', 115);
}
//4.防止同名覆盖,进行重命名
$fileName=date('ymd',time()).md5(mt_rand(1,99)).'.'.$extension;
//5.上传文件函数move_uploaded_file();,
//判断文件是否上传成功函数is_uploaded_file();
if(is_uploaded_file($tempFile)){
if(move_uploaded_file($tempFile, __DIR__.$filePath.$fileName))
//要上传到临时文件+文件放入的真实地址
{
echo '<script>alert("上传成功");history.back();</script>';
}else{
//die('文件无法移动到指定目录, 请检查目录权限');
throw new k('文件无法移动到指定目录, 请检查目录权限', 116);
}
}else {
//die('非法操作');
throw new k('非法操作', 117);
}
}catch(k $e){
echo $e->errorInfo();//将用户自定义错误信息打印输出
}//错误处理信息放入
?>点击 "运行实例" 按钮查看在线实例
效果图

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