该部分为 php 面向对象的入门部分,较为肤浅且参杂过分已经不是主流的知识。

这是我早期的 php 学习笔记,php 的学习版本版本是 5.6、7,🐟2020/05/06年从有道笔记导出至此。

day04-验证码类和分页类

遍历对象

对象可以被当成数组来遍历,遍历的时候,键就是属性名,值就是属性值

类外

只能遍历public属性

类内

所有属性都能遍历出来

匿名类

$obj = new class {

public $name;

public $height;

function say()

{

echo '100';

}

};

1、命名空间结合自动加载实现mvc

规则:

文件夹名都是小写

文件名和类名相同

命名空间名都是小写

文件夹名和命名空间名对应

model namespace model; model\UserModel => model/UserModel.php

UserModel.php

GoodsModel.php

view

controller

IndexController.php

UserController.php

vendor

Tpl.php

Model.php

Code.php

Image.php

index.php

2、常量和有关函数(自己测试一下)

__NAMESPACE__ 当前命名空间名

__CLASS__ 当前类名

__METHOD__ 当前方法名

instanceof 判断一个对象是否属于当前类

class_alias 给类起别名

class_exists 判断类是否存在

get_class_methods 得到类所有的方法

get_class_vars 得到类所有的属性

get_class 根据对象得到当前类名

interface_exists 判断接口是否存在

trait_exists 判断trait是否存在

method_exists 判断方法是否存在

property_exists 判断属性是否存在

3、验证码类

imagecreatetruecolor

imagechar

imagesetpixel

imagearc

imagecolorallocate

imagefill

imagepng

类如何写:

创建一个对象,调用对象的一个方法,立马显示出来验证码

$obj->outImage();

如何设计这个类

//将这些属性设置为成员属性,方便类里面所有的方法使用

//宽 高 个数 类型(0--纯数字,1--纯字母,2--字母和数字混合) 验证码字符串 图像资源

{

public function outImage();

protected function drawChar();

}

4、分页类

上一页 下一页 首页 尾页

核心:得到page 得到url

http://www.baidu.com:80/index.php?username=goudan&password=123&page=3

prev next first end

$_SERVER

REQUEST_URI 获取文件以及后面的请求字符串

SERVER_PORT 获取端口号

SERVER_NAME 获取主机名

REQUEST_SCHEME 获取协议

parse_url 解析url 重点关注里面的 path query这两个键

parse_str 将请求字符串转化为关联数组

http_build_query 将关联数组转化为请求字符串

分页类:

成员属性

$url

$totalCount

$totalPage

$number

$page

成员方法(public)

first

next

prev

end

allPage

limit

该部分为 php 面向对象的入门部分,较为肤浅且参杂过分已经不是主流的知识。

这是我早期的 php 学习笔记,php 的学习版本版本是 5.6、7,🐟2020/05/06年从有道笔记导出至此。

day03-魔术方法、抽象类、接口、命名空间

目录(文件夹)结构

文件夹名字小写,类名和文件名相同

单一入口 index.php?m=index&a=test

通过url告诉我到底应该执行哪个控制器下面的哪个方法

IndexController类中 test方法

MVC:一种设计模式

model 数据模型

view 视图

controller 控制器

vendor 第三方库文件

1、魔术方法

__callStatic

触发时机:当调用不存在的静态方法的时候自动执行这个方法

参数:函数名 数组

【注】该方法必须是static的

serialize:序列化

将程序中的一个对象进行序列化,然后保存起来

unserialize:反序列化

__sleep(了解)

触发时机:当序列化一个对象的时候调用这个方法

没有参数,有返回值,返回你要序列化的属性,组成一个数组

__wakeup(了解)

触发时机:当反序列一个对象的时候调用

在这里可以做一些自己初始化的一些工作

__clone(了解)

触发时机:当clone一个对象的时候会自动调用

在这里你可以修改一些属性

2、函数、对象引用

call_user_func

call_user_func([$xiang, 'eat'], 1000);

call_user_func_array

call_user_func_array([$xiang, 'eat'], [1000, 2000, 3000]);

var_export

$str = var_export($arr, true);

将一个数组变成生成数组的字符串保存起来

对象引用(了解)

变量引用:加上引用就是同一个变量(一级指针)

对象引用:不管加不加引用,都是同一个对象(二级指针)

3、抽象类

抽象类:就是普通的类在前面加上一个关键字 abstract ,代表这个类是一个抽象类

【注】抽象类不能实例化对象

【注】抽象类存在的目的就是让子类继承并且实现其规定的抽象方法

【注】子类中必须实现抽象类中规定的抽象方法,一般情况下,抽象类中都有抽象方法

【注】如果抽象方法中有参数并且参数有默认值,那么子类实现的时候也要有参数和默认值

【注】抽象方法必须是public或者protected

【注】抽象类可以继承抽象类,但是子类必须实现所有的抽象方法

4、接口(抽象的抽象类)interface

接口:usb接口

代码中的接口:

【注】接口中的方法都是抽象方法,而且是public

实现接口使用implements

可以实现多个接口,中间使用逗号隔开

先继承父类再实现接口

接口可以继承接口,但是子类必须将所有的方法都给实现

接口中不能添加成员变量

5、多态(了解)

在php中,多态其实不明显,我们这个重写就是一种多态,相同的接口给不同的对象,得到的响应不同,这就是多态

6、trait(特性)

php是一种单继承语言,不能使用多继承,trait就是模拟实现多继承的新特性

trait写法和类写法一模一样,只是将class变成了trait

trait中可以添加成员属性,但是一般不加,一般只加成员方法

trait中的方法如果想让子类使用,必须是public

trait不能被实例化,就是不能创建对象

trait可以嵌套trait

解决多个trait中方法名冲突问题:(了解)

use Dun, Sword{

Dun::blood insteadof Sword;

Dun::blood as blood1;

Sword::blood as blood2;

}

7、遍历对象

8、类型约束

function buy(Girl $girl);

9、匿名类(了解)

10、命名空间(namespace)

命名空间要结合自动加载实现MVC框架

命名空间可以解决同一文件中不能有相同的类名问题

命名空间一般都小写

第一个命名空间的前面不能有任何的代码

命名空间的范围是一直向下,直到下一个命名空间的开始

\:根空间,没有写命名空间的都在根空间下,

use hello\Person; 使用命名空间下的类

use baby\Person as SeLang; 给命名空间下的类起别名

子空间

该部分为 php 面向对象的入门部分,较为肤浅且参杂过分已经不是主流的知识。

这是我早期的 php 学习笔记,php 的学习版本版本是 5.6、7,🐟2020/05/06年从有道笔记导出至此。

day02-魔术方法、继承、类常量、静态属性和方法、自动加载

1、魔术方法

__get

__set

__construct:构造方法

__destruct:析构方法

触发时机:在这个对象被销毁的时候自动调用

在php中,不用内存管理,当脚本运行结束的时候,所有的空间全部销毁

弱类型 强类型

参数:没有参数

__unset:销毁一个变量

触发时机:当销毁私有成员属性的时候自动调用

参数:属性名

__isset:判断这个变量是否被设置过

触发时机:当在外部判断私有的成员属性是否被设置过时自动调用

参数:属性名

__invoke(了解)

触发时机:当将一个对象当作函数使用的时候自动调用

参数:当做函数的时候传递几个参数,这里就写几个参数

__toString(了解)

触发时机:当echo一个对象的时候自动调用

参数:没有参数

返回值:必须return一个字符串,这个字符串自己定制

__debugInfo(了解)

发现bug需要3秒钟,调试bug需要3个小时,dubug却需要一辈子

触发时机:通过var_dump来打印对象的时候自动调用

参数:没有参数

返回值:必须返回一个数组,该数组自己定制

__call

触发时机:当调用一个不存在的成员方法的时候自动调用

参数:函数名 由实参组成的一个数组

__callStatic(讲完静态方法时候再讲)

连贯操作

成员方法要返回$this

通过__call实现单字段查询

去处理特定的函数名,通过函数名得到字段名,根据参数得到字段值,然后拼接sql语句即可

2、继承

认识继承

生活上

体现在生物学中的继承

父类 子类

父类 子类

父类 子类

父类 子类

生物 动物 哺乳动物 人类 男人累

女人泪

从概念上来理解,生物是最大的

动物从生物衍生过来的,动物具有生物的特性,动物还有自己独有的特性,所以叫做动物

哺乳动物从动物衍生过来的,他不仅有动物的特性,其还有自己独有的特性,所以叫做哺乳动物

代码上

上面的特性就代表属性,属性最多的是男人累和女人泪,从属性方面来理解,是男人累大于人类,从属性方面来理解就是我们代码中的继承

基本概念

继承、派生

从代码上来理解,男人累继承自人类,人类继承自哺乳动物,继承的概念关注的是相同的属性

派生,其实继承和派生说的是同一个东西,只不过是从不同的角度来理解

父子类叫法

父类-》子类

基类-》派生类

单继承

单继承就是一个子类只能由一个父类,这种叫做单继承

php面向对象的语法是单继承,c++里面就是多继承

继承语法

基本语法

子类继承了父类,就拥有了父类的成员属性和成员方法

访问权限

类外 继承

public 公共的 可以 可以

private 私有的 不可以 不可以

protected 受保护的 不可以 可以

重写方法(重载)

重写作用

重写意思:当父类的方法子类继承过来之后,有时候这个方法并不太适合子类,这个时候我们就要在子类中重写这个方法

重写分两种:

完全重写

子类对象调用该方法调用的是重写后的方法,父类执行的还是之前的方法。

在父类的基础上增加一定的功能

通过parent关键字首先执行父类的方法,然后再增加自己的功能

parent关键字(普通方法、构造方法)

见代码8overwrite.php

final关键字(最后的,最终的)

final用来修饰class,代表这个类不能被继承

final用来修饰成员方法的时候代表这个方法不能被重写

重写中的方法权限修改

public

子类重写的时候权限还必须是public

protected

子类重写的时候权限必须是public或者protected

private protected public

后面的权限最大 重写的时候权限只能放大不能缩小

3、类常量

定义方式:

一般使用define在类外定义常量,使用const在类内定义常量

定义常量,前面不能加属性修饰符

调用方法

类外

类名::常量名 ($obj::常量名)

类内

self::常量名 self就是当前类名 ($this::常量名)

4、静态属性和静态方法

什么是静态属性和方法(static)

如果在成员属性或者成员方法前面加了static进行修饰,那么这个成员属性或者成员方法就不在属于某一个对象,而是属于整个类的

静态属性调用方法:

类外

类名::静态属性名 ($obj::静态属性名)

类内

self::静态属性名 ($this::静态属性名)

静态方法调用方法

类外

类名::静态方法名 ($obj::静态方法名,$obj->静态方法名)

类内

self::静态方法名 ($this::静态方法名,$this->静态方法名)

静态方法注意项

1、静态属性和静态方法前面可以加属性修饰符

2、静态属性和静态方法调用效率高

3、静态方法可以实现单例

4、静态方法中不能出现$this

5、自动加载(重点)

规则

在我们以后的工作中,一个类就是一个文件,文件名要和类名相同

__autoload

魔术方法:这个方法是唯一写在类外的方法

触发时机:当文件加载一个类的时候,并没有找到这个类,那么就会自动触发这个方法

参数:类名

目录(文件夹)结构

MVC:一种设计模式

model 数据模型

view 视图

controller 控制器

vendor 第三方库文件

该部分为 php 面向对象的入门部分,较为肤浅且参杂过分已经不是主流的知识。

这是我早期的 php 学习笔记,php 的学习版本版本是 5.6、7,🐟2020/05/06年从有道笔记导出至此。

day01-面向对象基本语法

为什么学习面向对象

对象:此对非彼对象 对象就是普通的对象

学完面向对象之后我们的代码非常的紧凑和高雅

现在很多语言都是面向对象的 java c++ c#

面向过程和面向对象

以前我们写的代码:是面向过程的

举例子:

谈个对象====结婚 盖房子

  • 面向过程
    • 打地基
    • 买砖
    • 盖房子
    • 装修
    • 娶媳妇
  • 面向对象
    • 创建打地基的对象
    • 创建买砖对象买砖
    • 包工头
    • 装修工
    • 自己来吧

万物皆对象,多个对象协同工作共同完成一个功能

如果面向过程是数学逻辑的映射,那么面向对象就是生活逻辑的映射

语法层面:封装、继承、多态

思想方面:学习面向对象语言最重要的就是思想的转变,语法其实没什么,人家规定怎么写我们就怎么写

类和对象

生活角度

什么是类:人类(统称),都具有共同的属性和行为,是一个抽象的概念

人类 对象(刘翔)

汽车 你的奔驰

电脑 你桌子上面的电脑

官方解释:

类:对象的抽象

对象:类的具象

编码角度 (int)

在代码中,类就是一种数据类型,int没有占用空间类型,具体到某个变量才有空间类型,类比,我们的对象也是如此,类并没有空间,对象才有空间

类的简单使用

属性和行为

类名命名规范

成员属性和成员方法

1、要以class关键字开始,问 class就是类的意思

2、类名

3、大括号里面定义这个类

4、成员变量定义都要以public开始,以分号结尾

5、成员方法就是以前的函数,以前函数怎么定义,现在还怎么定义

6、成员方法前面也可以加public,也可以不加,如果不加的话,默认就是public

7、类名:命名规范,大驼峰原则

happybirthday

happyBirthday 小驼峰

HappyBirthday 大驼峰

创建对象三种方法

//创建对象第一种

//Person后面的小括号可加可不加

$xiang = new Person();

//echo $xiang; //不能使用这种方式打印

//var_dump($xiang);

//创建对象第二种方法 通过对象创建另外一个对象 基本不用

$liu = new $xiang;

//var_dump($liu);

//创建对象第三种方法 后续经常使用的一种方式

$className = 'Person';

$liuXiang = new $className();

var_dump($liuXiang);

对象访问属性和方法

$fang->age;

$fang->cook();

构造方法和this关键字

this:代表的是当前对象,在类里面访问自己的成员属性和成员方法的时候我们就要使用this

引入构造方法

__construct()

不传递参数构造方法

传递参数构造方法

在类里面要访问自己的成员属性和成员方法

访问控制修饰符

public:公共的 在类的外部,可以通过对象直接访问这些成员属性

private:私有的 在类的外部,不可以通过对象直接访问这些成员属性

在类的内部,都可以通过this关键字来直接访问所有成员属性

间接访问私有成员变量

因为私有的成员属性,在类的外部不能直接访问,但是在类的内部可以直接访问,所以我们可以在类里面增加一个函数,通过该函数来间接访问这些私有的成员属性(封装性)

几个魔术方法

魔术方法:在php中以 __开头的都是魔术方法

特点:系统在特定的时机自动调用的方法

__get(获取值)

触发时机:当外部访问私有的成员属性的时候自动调用这个方法

参数:属性名

__set(设置值)

触发时机:当外部设置私有的成员属性的时候自动调用这个方法

参数:属性名,值

__unset

__isset

__construct

__destruct

这是我早期的 php 学习笔记,php 的学习版本版本是 5.6、7,🐟2020/05/06年从有道笔记导出至此。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#d:匹配 0-9一个

#D:除了 0到9

#w:匹配 0-9 a-z A-Z 下划线

#W:非字 除了 0-9 a-z A-Z 下划线

#s:空白字符 n r t

#S:除了空白字符

#b:匹配词边界

#B:除了词边界

#[]:原子列表,匹配其中一个 [0-9]

#[^]:反元素

# . 除了n以外的字符

#元字符 修饰原子 ,不能单独存在

#*:贪婪模式,返回最大的匹配值

#+:至少匹配一次

#?:最多多匹配一次(0,1)

#{}: 控制原子次数{n}n次 {m,n}m到n包括m,n{0,n}最多n次

#^:指定开头原子 等同A

#$:指定结尾

#|:或 最低级的

#():优先级最高 子模式

#模式修正符

#修饰整个表达式的匹配,模式秀政府卸载定界符之后

#eg: /balabala/i

#i:不区分大小写

#s:多行

#A:从目标的字符串开头进行匹配

#U:贪婪模式取反

这是我早期的 php 学习笔记,php 的学习版本版本是 5.6、7,🐟2020/05/06年从有道笔记导出至此。

1.

fileatime: 在linux下边是正常的.win7以后因为影响性能所以关闭了这个配置

copy() 不能复制目录(递归拷贝文件)

rename() 不仅可以修改文件或者目录名 也可以移动

mkdir() 默认只能创建一个目录 层级目录

mkdir('1701/2/16', 0777, true);

文件的属性:

ftruncate('资源',size):截断文件中的指定长度 返回是截断以后的

scandir() 浏览当前目录

filetype() 返回的是文件的类型 不是文件后缀


权限

0 111 111 111

0 7 7 7

- rwx rwx rwx

所有者 所属组 其他

chmod 改变文件的权限 chmod 777 文件名字 chmod -R 777 目录

chgrp 改变文件的所属组

chown: 改变文件所有者

文件的上传下载

使用场景:

上传:头像,朋友圈,微博 证件 .....

下载:安装包,图片 ...

准备工作:

七伤拳:

1.准备form表单

2.判断提交的值

3.判断文件是否错误

4.判断是否超出大小 form php 自定义

5.判断是否是允许上传的文件类型 (mime)

6.保存图片

//7.保存数据库图片路径

##配置文件:

upload_tmp_dir ="E:/wamp64/tmp" 上传的文件缓存在的目录

upload_max_filesize = 2M 允许上传文件的大小限制

file_uploads = On 允许上传

max_file_uploads = 20 允许同时上传的文件个数

memory_limit = 128M 允许脚本运行最大的内存

注意事项:

1.表单必须以post方式提交 不能忘记enctype

2.表单中传隐藏值:name=MAX_FILE_SIZE

3.多文件上传: name是数组

4.临时缓存的目录权限

5.php.ini是否开启允许上传配置

6.'##'配置文件中的一些配置项

下载:

1.告知文件类型

2.告知附件

3.文件的大小

4.发送数据

header('content-type:image/jpeg');

header('content-disposition:attachment;filename="aa.jpg"');

header('content-length:'. filesize('aa.jpg'));

readfile('2.jpg');

这是我早期的 php 学习笔记,php 的学习版本版本是 5.6、7,🐟2020/05/06年从有道笔记导出至此。

缩放:

1.打开或者准备一张图片

2.自己计算尺寸,(直接给一个倍数,形参);

3.变成一张新的图片

4.保存

5.销毁

-----------------

day22 文件函数

路径相关的函数

pathinfo('文件的路径+名字') 文件的具体信息

dirname(); 路径的名

basename 获取的是文件的名字

realpath() 返回绝对路径 从磁盘根部开始

DIRECTORY_SEPARATOR: 返回的是目录分隔符(系统)

【注】: windows / \都能识别 获取到时\

linux 系统是/ 正斜线

文件内容的相关函数

整体:

file_get_contents('文件的名'): 获取文件中的全部内容//不仅可以传一个文件名,还可以是一个url

file_put_contents('文件','内容'); 可以将内容写入到文件中,成功返回字节数,失败返回false

【注】:将原来的文件内容覆盖

【了解】readfile 将文件的内容输出到缓冲区,真正返回的值是字节数

内容:

**fopen('文件', '打开的方式') 打开一个文件,

打开方式:

r: 只读的方式打开 文件不存在的时候会报警告错误

r+:以读写的方式打开, 从头覆盖内容进行写入

w: 以写入的方式打开 如果文件存在会将文件内容清零,打开的文件不存在则创建

w+:可读可写: 文件不存在创建,存在内容清零

a: 追加写入, 不能读文件不存在创建,指针指向文件末尾

a+:读写方式打开 写的方式追加 文件不存在创建

x: 创建文件以写入的方式打开,如果文件存在报警告错误

x+: 创建文件并与读写的方式打开

c: 以只写的方式打开,会从头覆盖内容写入,文件不存在则创建

c+: 以读写方式打开,同上

**fread('打开的资源', '读取的字节数');返回的是限制读取的字节

**fwrite('操作的资源', '写入的字符')

*rewind() :将文件指针返回到文件流的开头位置

fseek(): 设置指针的位置:

参数:资源,移动的字节数,

常量 SEEK_SET/开头SEEK_CUR/当前 SEEK_END/结尾

ftell() 获取当前文件中指针的位置

feof ()[end of file]判断指针在不在结尾

//最后一个字节数或者出错时候返回true 其余返回false

fgetc() 读取出来一个字节, 指针位置保留

fgets() 读取一行 指针的位置保留

*fgetss() 读取一行 去掉内容中的html标签

fclose() 关闭这个文件

文件锁:

flock()

常量参数:

LOCK_SH:共享锁

LOCK_EX: 独占锁

LOCK_UN: 解锁

文件判断相关 (状态)

file_exists();判断文件是否存在 存在 true 不存在false

is_file() :参数名是否是一个文件

is_dir(): 参数是否是一个目录

is_readable(): 判断文件是否可读

is_writeable():判断文件是否可写

is_executable(); 是否是一个可执行的文件 //window .exe

filesize() :文件字节数

filectime() : 创建时间

filemtime(): 修改时间

文件相关的函数

touch(): 创建一个文件

unlink(): 删除一个文件

copy(): 1.要拷贝的文件 2.拷贝后新文件的名字(要拷贝的路径+mingzi)

rename(): 重命名:文件 目录

目录的操作

mkdir(): 新建目录

rmdir() : 删除目录 (删除空目录)

rename()修改目录名

copy() 拷贝目录

opendir() :打开目录

readdir()读取目录

closedir()关闭目录

文件的属性

----------

作业: 拷贝:大文件 :一边读,一边写

这是我早期的 php 学习笔记,php 的学习版本版本是 5.6、7,🐟2020/05/06年从有道笔记导出至此。

---------------------

验证码思路:

1.创建画布指定宽和高(写成一函数,传宽跟高);

2.随机产生的字符串

3.画布随机填充浅色的背景

4.画布上增加上干扰元素(随机产生点,线,弧线的位置,随机的是产生元素的位置)

5.把验证码字符串写上

6.设置header头

7.发送

8.销毁资源

水印:

1.准备图片,(两张图片 一张背景,一张水印)

2.确定位置(计算位置)

3.合并处理

4.保存(生成新的图片呢,还是原来,保存位置,文件)

5.释放资源

缩放:

1.打开或者准备一张图片

2.自己计算尺寸,(直接给一个倍数,形参);

3.变成一张新的图片

4.保存

5.销毁

这是我早期的 php 学习笔记,php 的学习版本版本是 5.6、7,🐟2020/05/06年从有道笔记导出至此。

图像处理

准备工作:

MIME:互联网邮件扩展类型

服务器会告诉浏览器当前返回的文件类型,当浏览器获取到content-type文件类型 就会自动按照类型打开文件

header('location:');

header('content-type:text/css');

常见的mime类型:

HTML JavaScript css

image/png image/jpeg image/gif

图像后缀:

png jpg jpeg gif bmp wbmp

打开支持的相对应的扩展库php.ini

修改配置文件:

扩展库所在的目录:extension_dir ="E:/wamp64/bin/php/php7.0.0/ext/"

1.如果是wampsever : 在小绿那->php->php extension 前边有对勾的就是支持的,

直接选择 之后会自动重启

2.修改配置文件:eg:打开gd2扩展库

extension=php_gd2.dll 将分号去掉 ,加上分好就是注释掉

如果还是没有支持相对应的扩展:

去扩展库文件目录,找对应.dll文件 如果没有去官网下载或者拷贝别的地方的.dll

---

GD库处理图像:

经常的使用的场景:

验证码 水印 缩放 数据图 .....

六脉神剑:

1.创建画布

imagecreatetruecolor()

2.准备颜色

imagecolorallocate()

3.图像的处理

imagefill

4.设置header 头

header('content-type:image/png');

5.保存/发送图像

imagepng()

6.关闭/释放资源

imagedestroy($img);

-----------

函数:

imagecreate:创建画布 推荐使用

imagecreatetruecolor(width, height); 返回值 资源

--使用图片

imagecreatefromjpeg('meinv.jpg');

imagecreatefrompng();

imagecreatefromgif();

准备颜色

imagecolorallocate()

填充背景颜色

imagefill()

imagefilledarc($img, 100, 100, 100, 100, 0, 360, $color3, IMG_ARC_PIE);//填充的是圆

imagefilledarc($img, 300, 200, 80, 100, 50, 180, $color3,IMG_ARC_CHORD); 弧度变成直线链接 (出来的是个三角形)

保存图像

imagepng($img, [path/filename]);

imagegif()

imagejpeg()

图像处理:

imagesetpixel($img, 100, 100, $color3); 画一个单一像素点

imageline($img, 0, 0, 500, 400, $color1); 画一条线

// imagerectangle($img, 100, 100, 200, 300, $color1);//画一个矩形 两点可以确定一个矩形

imagefilledrectangle($img, 100, 100, 200, 300, $color1);

// imagepolygon($img, [300, 100, 320, 150, 200, 200, 100, 200 ], 4, $color3); 多边形

imagefilledpolygon($img, [300, 100, 320, 150, 200, 200, 100, 200 ], 4, $color3);

--

字符:

imagechar($img, 5, 400, 50, 'A', $color3);水平的画一个字符

imagechar($img, 5, 400, 50, 'A', $color3);

imagestring($img, 5, 400, 100, 'ABCD', $color3);//水平的画一行字符 (不能是中文)

imagefttext($img, 50,10, 100, 100, $color1, 'STXINGKA.ttf', '明天就是情人节');// 资源,字体的大小,倾斜的角度,开始的位置,color,ttf, string,

-----获取指定图片的宽 高

getimagesize('图片名'); 返回值是数组 下标0 的是宽,1的是高

list($width, $height) = getimagesize('filename');

imagecopymerge($img, $imgto, 100, 100, 0, 0, 100, 100, 30);//拷贝图像中的一部分,设置透明程度

参数:作为画布的原始图,拷贝的图,起始位置, 拷贝图的起始位置, 拷贝图像的宽,高,0-100透明程度

imagecopy($img, $imgto, 100, 100, 0, 0, 100, 100);

---------------------

验证码思路:

1.创建画布指定宽和高(写成一函数,传宽跟高);

2.随机产生的字符串

3.画布随机填充浅色的背景

4.画布上增加上干扰元素(随机产生点,线,弧线的位置,随机的是产生元素的位置)

5.把验证码字符串写上

6.设置header头

7.发送

8.销毁资源

这是我早期的 php 学习笔记,php 的学习版本版本是 5.6、7,🐟2020/05/06年从有道笔记导出至此。

会话控制

http协议:

特点:无状态 ,无连接的协议(脸盲)

状态码:200 请求成功

404 未知的页面

302,307 :重定向

400:语法错误

500:服务器错误

报文头部:请求行 空行 头部信息

头部信息:分为很多种,里面重要的是cookie信息

使用场景:

访问网站的不同页面的时候 ,为了避免用户身份的重复验证

就是用cookie session

cookie:

是保存在浏览器中的指定文件内的cookie值 是保存在本地的,这个值是用setcookie设置的,下次访问的时候,浏览器会自动将cookie值提交给当前所属的站点服务器,setcookie设置的作用域是'/',name整个站点都可以使用这个值.

-----------------

如果是第一次访问,没有请求跟返回的cookie值

在后台登录以后,设置cookie 以后 访问直接把cookie 或者session值返回给浏览器

当第二次请求,login.php.时候,浏览器已经将刚才的值存储起来,当第二次请求的时候,会把数据提交给服务器,执行第二次请求以后,服务器不会返回值给浏览器

第三次.....都是一样,只要浏览器中有这个cookie值并且没有过期 服务器就不会再返回值给浏览器,什么时候回有值返回给浏览器,

1.修改了cookie值

2.cookie过期

---------------

设置cookie:

setcookie('名','值','生存时间',域);

域:'/':当前站点都有效; 不传值:当前目录

读取:

$_COOKIE['名'];

销毁:

1.设置生存时间为之前时间(浏览器自动判断不会提交)

setcookie('名','值',time()-60,域);

2.unset($_COOKIE['name']);

特点:

使用COOKIE不安全,因为可以在浏览器中查看到

尽量不要使用cookie设置保存敏感信息

session:

session:值存在服务器中,将一个加密的串返回给浏览器,也放在浏览器的cookie中

开启:session_start();

:在开启session前边不要有输出,把session_start()放在文件开始最前边

设置session:

$_SESSION['名'];

销毁:

1.unset($_SESSION['名']);

2.session_destroy() 函数

3.setcookie('PHPSESSID','','过期时间');

//因为值存在浏览器的cookie文件中,把时间设置为过期的,浏览器不会提交

函数:

session_name(); 获取到的是在浏览器中存的cookie的key

session_id(); 获取到的是在浏览器中存的cookie的value

面试题:

浏览器中禁用cookie以后,还能使用session么?

答:不能使用,因为session的真正的值保存在服务器中,但是也有value存在浏览器的cooki中,是依赖关系。但是解决方式有:

1.手动拼接URL

2.session.use_trans_sid = 1 可以在url中自动拼接

session.use_only_cookies = 0 是否依赖于浏览器中的cookie

自动登录:

使用setcookie()

-----------------

serialize:序列化

unserialize:反序列化

0%