~~~
<?php
/* 1.获取上次图片的信息
2.验证上传图片的格式
3.验证上传图片的大小
4.创建上传目录(如果没有)
5.上传文件到指定目录下*/
class ShangChuan{
private $shuchuyuju; //输出问题原因
private $swt; //定义所有问题属性
private $geshi; //获取图片扩展名
private $da=5242880; //定义图片最大值
private $b=['jpg','png','gif','JPG','PNG','GIF']; //文件格式判断
private $tmax; //获取图片大小
private $dir='uploads'; //给定目录
private $sub_dir; //子目录
private $lishitu; //临时图片
function __construct($file) //构造函数
{
$this->swt=$file['error']; //等于0问题赋值
$this->geshi=$file['name']; //获取名称
$this->tmax=$file['size']; //获取图片大小值
$this->lishitu=$file['tmp_name']; //临时图片地址
}
public function shuchu():?string
{ //输出到外部
if(!$this->yanzheng()){
return $this->shuchuyuju;
}
return '上传成功';
}
private function yanzheng():?string //验证所有上传图总问题,并执行上传图片
{
if($this->suoyouwenti()==false){
$this->shuchuyuju='上传文件有问题';
return false;
}elseif($this->wjname()==false){ //验证图片格式有问题
$this->shuchuyuju='文件非图片格式';
return false;
}elseif($this->tmax()==false){
$this->shuchuyuju='图片大于5M';
return false;
}elseif($this->mulu()==true){
$this->yidong();
}
return true;
}
//检测上传信息
private function suoyouwenti():bool
{
if($this->swt!=0)
{
return false; //有问题的时候返回false
}
return true;
}
//验证文件名称
private function wjname():bool {
$geshi=pathinfo($this->geshi,PATHINFO_EXTENSION);
if(!in_array($geshi,$this->b))
{
return false;
}
return true;
}
//检测上传禁止过大 默认5M
private function tmax():bool{
if($this->tmax>$this->da)
{
return false;
}
return true;
}
//判断是否有目录,如果没有创建
private function mulu():bool{
//$dir='uploads'; //给定目录
$this->sub_dir=$this->dir.DIRECTORY_SEPARATOR.date('Y-m-d'); //创建以时间命名的子目录 DIRECTORY_SEPARATOR 判断输目录付号因为win与linx不一样,所以要用这个
if(!is_dir($this->dir)){ //如果没有upleads这个目录创建出来
mkdir($this->dir);
mkdir($this->sub_dir); //创建目录
}elseif(!is_dir($this->sub_dir)){
mkdir($this->sub_dir); //创建子目录
}
return true;
}
//移动图片到目录 (最后一步了)
private function yidong():?string{
$img_name=date('Ymdllis').rand(100,9999).'.'.$this->geshi; //生成随机名字的图片防止重名的
return move_uploaded_file($this->lishitu,$this->sub_dir.DIRECTORY_SEPARATOR.$img_name);
}
}
$file=$_FILES['tupian'];
$tupian= new ShangChuan($file); //构造函数传值
echo $tupian->shuchu(); //实例化结果
~~~
- 变量删除查找与static静态变量
- 赋值原理
- global涵数引入全局变量使用
- 数据类型
- 数据类型判断is_
- PHP输出
- PHP指针(取址运算)
- PHP运算符
- 常量
- 字符串
- 字符串添加反斜杠函数addslashes($变量)
- htmlspecialchars()转字符实体
- int strcmp()判断2个字符串大小
- strstr() 查找字符串
- 字符串常用系统内置函数
- 控制流之if
- switch判断方法
- while循环
- for循环
- 跳出循环
- PHP文件引文入( include与require)
- PHP文件引入include_once与require_once
- 函数(函数各种应用以及约束方法)
- global 引入函数外的变量
- 函数的递归
- 数组(遍历方法)与( foreach()遍历方法)
- 数组函数
- PHP时间操作
- 常用数学内置函数
- 正则表达式
- PHP 九大超全局变量(内置的)
- 超全局变量$_SERVER的详细介绍
- PHP类
- 类的$this
- 类的构造方法__construct()
- 类的修饰符 public private protected
- 类的继承
- 类的多态(instanceof)方法
- 类的静态方法与常用关键字(final static self parent clone )
- 类的__set() __get() 方法
- 类的重载
- 类的__call()与__callstatic()方法
- 类的抽象类与方法
- 抽象类接口interface (实现子类继承多个抽象类)
- 类的trait (解决单继承的限制)
- 命名空间
- 类的魔术常量以及系统函数
- mysql数据库
- 数据库的概念
- SQL语句规范
- 数据库字段类型
- 字段是属性(创建数据库字段用)
- 数据库操作(增删改)
- 数据表与字段(DDL)(增删改)
- 数据的操作(DML)(增删改)
- 数据的查询数据(最重要最核心经常看)
- 数据库 字符集 引擎 校对等
- cookie创建使用与删除
- session创建使用与删除
- 在cookie禁止的情况下session的使用方法
- session的配置以及session与cookie的区别
- session实战登录
- PHP文件处理函数
- PHP打开读取写入文件
- file_get_contents GET请求接收
- PHP文件上传以及过大报错解决方案
- 验证并控制上传格式与大小
- 判断是否有目录(如果没有就创建目录)
- 上传文件到目录move_uploaded_file()
- 图片上传用class写法
- PDO链接数据库与exec()使用(只能用于增,删,改)
- PDO-推荐方法prepare() 增删改查
- 关于PDO类种事务使用
- 类的单例模式写法
- 自动加载autoload()
- composer安装与使用
- PHP操作XML
- PHP操作JSON
- curl GET与POST请求接收
- 自己封装的一些实用函数
- 微信公众号开发
- 常见问题以及解决
- PHP反序列化HTML
- try catch尝试执行与异常
- json 对象转字符串数组的方法可以在用json_e转数组