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

2019年11月13日 03:34:05阅读数:719博客 / 风吹的博客 / php

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


?>

运行实例 »

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

效果图

tu.png


批改状态:合格

老师批语:才写到这里, 希望以当下课程为主, 有空再补写... 作业完成的不错

版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
  • 博主信息
    风吹的博客
    博文
    23
    粉丝
    0
    评论
    0
    访问量
    14770
    积分:0
    P豆:50