欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

写一个自定义异常类来处理上传过程以及各种错误--1012

程序员文章站 2022-03-11 14:12:36
...

首先写一个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();//将用户自定义错误信息打印输出
}//错误处理信息放入


?>

运行实例 »

点击 "运行实例" 按钮查看在线实例

效果图

写一个自定义异常类来处理上传过程以及各种错误--1012