批改状态:合格
老师批语:太客气了, 直播的过程中,老师也会出现一些失误, 与你们的区别在于可以快速找到问题并解决它... 所以, 出现bug不必担心, 反而是提升自己的机会来了
对于之前的学习的异常类,在电脑练习了多边才大概的掌握,看来很多事情多实践才管用。老师说的对,多写多练啊。
下面是操作过程的实例。
<?php
use \Exception;
?>
<!--请求类型必须是: post-->
<!--数据编码类型: 使用复合类型,通知服务器上传的是文件类型-->
<form action="demo4.php" method="post" enctype="multipart/form-data">
<input type="file" name="my_file" id="">
<input type="hidden" name="MAX_FILE_SIZE" value="3145728">
<button>上传</button>
</form>
<?php
//自定义异常类
class testException extends Exception
{
public function __construct($message = "", $code = 0)
{
parent::__construct($message, $code);
}
//自定义错误信息
public function errorInfo(){
//heredoc 输出大段的html代码
return <<<"ERROR"
<div>
<h3>~出错!错误代码:{$this->getCode()}</3>
<p>错误提示信息:{$this->getMessage()}</p></div>
ERROR;
}
}
////下面是课堂老师的案例
try{
// 文件上传
// PHP使用一个超全局变量:$_FILES 来处理文件上传
// 1. 配置上传参数
// 允许上传的文档类型
$fileType = ['jpg', 'jpeg', 'png', 'gif'];
// 设置允许上传的文件最大长度
$fileSize = 3145728;
// 上传到服务器上的指定的目录
$filePath = '/uploads/';
// 原始的文件名
$fileName = $_FILES['my_file']['name'];
// 上传到服务器上的临时文件名
$tempFile = $_FILES['my_file']['tmp_name'];
// 2. 判断文件是否上传成功?
//$_FILES['my_file']['error'], 0: 表示成功,大于1出错
$uploadError = $_FILES['my_file']['error'];
if ($uploadError > 0) {
switch ($uploadError) {
case 1:
case 2:throw new testException('上传文档不允许超过3M','1001');
case 3: throw new testException('上传文件不完整','5003');
case 4: throw new testException('没有文件被上传','1300');
default: throw new testException('未知错误','1500');
}
}
$extension = explode('.', $fileName)[1];
if (!in_array($extension, $fileType)) {
throw new testException('不允许上传' . $extension . ' 文件类型','10043');
}
// 4. 为了防止同名覆盖, 将上传的文件重命名: md5+时间戳
$fileName = date('YmdHis',time()).md5(mt_rand(1,99)). '.' . $extension;
// 5. 上传文件
if (is_uploaded_file($tempFile)) {
if (move_uploaded_file($tempFile, __DIR__. $filePath.$fileName)){
echo '<script>alert("上传成功");history.back();</script>';
} else {
throw new testException('文件无法移动到指定目录, 请检查目录权限','9887');
}
} else {
throw new testException('非法操作','40002');
}
exit();
} catch(namespace\testException $e){
echo $e->errorInfo();
}
?>点击 "运行实例" 按钮查看在线实例
【总结】课堂时间有限,最重要的线下的不断联系。遇到困难要去解决。谢谢 php老师辛苦的付出!~
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号