php语法记录3
十、文件系统
1. 文件相关操作
- 什么是文件系统?
-
文件系统只是PHP知识的一个完整的模块而已。
-
对所有的文件进行的任何操作都需要文件系统相关的函数
-
学习文件系统就是学习操作文件的相关函数。
-
创建文件
- touch()
参数1:文件路径及名称
参数2:可选参数 修改时间
参数3:可选参数 访问时间
返回值:成功返回true,失败返回false;
- touch()
-
移动文件 - 重命名
- rename()
参数1:旧的文件名
参数2:新的文件名
返回值:成功返回true,失败返回false
- rename()
-
删除文件
- unlink()
参数:要删除的文件路径
返回值:成功返回true,失败返回false
- unlink()
-
复制文件
- copy()
参数1:源文件路径
参数2:目标文件路径
返回值:成功返回true,失败返回false
注意:如果目标文件存在则会覆盖。
- copy()
-
获取文件大小
- filesize()
参数:要获取文件大小的文件路径
返回值:返回文件的大小
- filesize()
-
判断是否是文件
- is_file()
参数:文件的路径
返回值:是文件返回true,不是文件返回false
- is_file()
-
判断文件或者目录是否存在
- file_exists()
参数:文件或目录的路径
返回值:存在则返回true,不存在则返回false;
- file_exists()
-
文件是否可执行
- is_executable()
-
文件是否可读
- is_readable()
-
文件是否可写
- is_writable()
-
获取文件的创建时间
- filectime() 返回创建时间的时间戳
-
获取文件的修改时间
- filemtime()
-
获取文件上次访问时间
- fileatime()
-
flock 简单文件加锁
-
打开文件
-
fopen()
-
参数:要打开文件的路径
-
参数:打开文件的方式 r 只读的方式打开文件
-
r 只读方式打开文件
-
r+ 读写方式打开文件(可以执行写入功能)
-
w 写入方式打开文件,如果文件不存在则会创建,如果文件存在清空文件后再写入内容。
-
w+ 读写方式打开文件 可以执行部分读取功能(一般没有效果),但是写都好使。
-
a 追加的方式打开文件,如果文件不存再则会创建,如果文件存在追加数据。
-
a+ 读写方式打开文件 (可以执行部分读取功能)
-
x 抑或方式打开文件(文件存在则保持,不存在新建并且写入文件)
-
x+ 增强的抑或模式 (可以执行部分读取功能)
-
返回值:成功返回资源,失败返回false
-
-
关闭文件
- fclose()
- 参数:由fopen成功打开文件返回的资源
-
读取文件
- fread() 读取文件
- 参数1:由fopen成功打开文件返回的资源
- 参数2:要读取的字节数
- 返回:返回读取到的内容,如果读取到最后则返回空字符。
- feof() 判断文件指针是否到了结尾处
- 参数1:由fopen成功打开文件返回的资源
- 返回值:如果文件指针到了结尾处或者出错返回true,没到结尾处返回false;
- fgets() 从文件指针中读取一行
- 参数1:由fopen成功打开文件返回的资源
- 返回值:返回读取到的内容
-
写入文件
- fwrite() 写入文件
- 参数1:由fopen成功打开文件返回的资源
- 参数2:要写入的内容
- 返回值:返回写入成功后的字节数
-
- 生成器yield
- 优点:
- 生成器会对PHP应用的性能有非常大的影响
- PHP代码运行时节省大量的内存
- 比较适合计算大量的数据
- 生成器的执行过程
- 首先调用demo1函数,传入参数10,但是for循环执行了一次就停止了,并且告诉foreach第一次循环可以用的值
- foreach开始对$result结果变量进行循环,进来首先sleep(1),然后开始使用for给的一个值执行输出。
- foreach准备第二次循环,开始第二次循环之前,它向for循环在请求一次。
- for循环于是又执行了一次,将生产的结果告诉foreach
- foreach拿到第二个值,并且输出。由于foreach中sleep(1),所以,for循环延迟1秒生成当前时间。
- 所以整个代码执行中,使用只有一个记录值参与循环,内存中也只有一条信息。
- 生成器概念
- 生成器yield关键字不是返回值,它的专业术语叫产出值,只是生成一个值。
2. 目录相关操作
- 目录相关操作都有哪些?
-
打开目录
- opendir()
- 参数:要打开的目录信息
- 返回值:成功返回一个资源,失败返回false
-
关闭目录
- closedir()
- 参数:由opendir打开目录成功返回的资源。
- 返回值:没有返回值
-
读取目录
- readdir();
- 参数1:由opendir打开目录成功返回的资源。
- 返回值:读取成功返回督导的目录名称,读取失败或者读取到目录的最后时返回false
- 注意:每个目录下默认都有一个点和一个点点目录,读取目录时,第一次会读取到点.代表当前目录。第二次会读取到点点.. 代表上一级目录。注意每个目录中都会有这两个隐藏目录。
-
创建目录
- mkdir()
- 参数1:路径信息(创建目录的名称)
- 参数2:可选参数,创建目录的权限,默认为0777 最高权限。
- 参数3:可选参数,默认是false,如果设置为true,表示允许嵌套方式创建目录
- 返回值:成功返回true,失败返回false
-
删除目录
- rmdir();
- 参数1:要删除的目录信息
- 返回值:成功返回true,失败返回false;
- 注意:该函数只能删除一个空目录,如果想嵌套删除目录需要自己来定义函数。
-
复制目录 (自己来完成)
-
移动目录 (自己来完成)
-
重命名目录 (自己来完成) 和移动目录时一个函数
-
判断是否是目录
- is_dir()
- 参数:以存在的目录信息
- 返回值:是目录返回true,不是目录返回false,如果该目录不存在则返回false;
-
判断目录是否存在
- file_exists();
-
统计目录大小
- 注意:目录没有大小,目录的大小就是里面包含文件大小的总和
-
遍历目录(一个一个去看)
-
统计目录中文件个数及目录个数 已完成
-
返回路径中的目录部分
- dirname()
- 参数:路径信息
- 返回值: 返回路径中的目录部分。
-
获取文件名
- basename()
- 参数:路径信息
- 返回路径中的文件部分,失败返回false
-
返回路径信息
- pathinfo()
- 参数:路径信息
- 返回值:会返回一个数组,数组中包含路径信息中的路径部分,文件部分,后缀名以及文件名四个元素
-
3. 文件上传与下载
1. 文件上传
- 需要使用文件上传的功能?
- 网盘
- 网络相册
- 头像
- 实名认证
- 百度文库
- 邮件附件
- 什么是文件上传呢?
- 将本地的文件复制一份传送到网络的服务器中存储。
- 文件上传时需要注意的事项有哪些。
- HTML表单部分:
- 上传文件时,传输方式必须是POST方式。
- 需要指定表单传输编码格式:enctype="multipart/form-data";
- PHP页面需要注意:
- 如果有文件上传,那么上传的文件在PHP脚本中不能用$_POST来接收,必须用$_FILES来接收,其它内容依然用$_POST
- php.ini配置文件中:upload_max_filesize = 2M 允许上传文件大小的最大值
- upload_tmp_dir ="c:/wamp64/tmp" 文件上传的临时目录
- file_uploads = On 允许文件上传
- max_file_uploads = 20 表示允许最大上传文件个数为20个。
- post_max_size = 8M 表示POST最大传输内容为8m
注意:upload_max_filesize设置的值不允许超过post_max_size设置的值。
- HTML表单部分:
2. 文件下载:
- 将字符串按照指定的编码进行转换
- iconv(输入字符串,输出字符集,要转换的字符串)
- 返回转换后的字符串
- header 发送原生的HTTP头
//声明要下载的文件类型
header('Content-type: image/jpeg');
// 对下周再文件进行描述并且指定下载文件的名称
header('Content-Disposition: attachment; filename='.$newName);
// 读取下载的文件
readfile('./xxyd/595106ff62421205e64982b67f0d7723.jpg')
//设置页面字符集
header('content-type:text/html;charset=utf-8');
4.网盘制作
- 遍历目录 已做
- 创建目录 以做
- 删除目录 以做
- 复制目录 没做
- 移动和重命名目录 没做
- 上传内容 支持多文件上传(以有)
- 创建文件 系统函数
- 打开文件(如果是文件可以打开编辑,如果是图片可以预览) 系统函数
- 删除文件 系统函数
- 复制文件 系统函数
- 移动和重命名文件 系统函数
- 下载文件
- 统计目录及文件大小 已做
十一、 正则表达式
1. 介绍正则表达式及其作用
-
简单介绍正则表达式
- 正则表达式就是描述字符串排列模式的一种自定义语法规则
- 如果可以使用字符串处理函数完成的任务,就不要使用正则表达式。
- 有一些复杂性的操作,只能用正则表达式来完成。
- 正则表达式也称为一种模式表达式
- 正则表达式就是通过构建具有特定规则的模式,在与输入的字符串信息进行比较、分割、匹配、查找和替换等功能。
-
什么是正则表达式
- 例子:'/<img\s+src=".*?" />/' 它就是正则表达式
- 乱七八糟的一堆字符堆砌在一起,神秘的符号,有奇特的意义。
-
学习正则表达式可以做什么
- 验证用户名长度是否合法。
- 验证邮箱规则
- 验证手机号
- 验证URL
- BBS编辑器
- QQ聊天表情
- 新闻采集器、(小偷程序)
-
看看正则表达式的几个特点
- 正则表达式也是一个字符串
- 由具有特殊意义的字符组成的字符串。
- 具有一定编写规则,也是一种模式
- 看做是一种贬称该语言。因为是用一些特殊的字符,按照规则编写出一个字符串,形成一种模式-正则表达式。
- 如果正则表达不和函数一起使用,则它就是一个普通的字符串,如果将正则表达式放大某个函数中使用,才能发挥出正则表达式的作用。
-
PHP中提供了两套正则表达式的函数库
- posix 扩展正则表达 ereg
- perl 兼容正则表达式 preg
- 推荐使用perl兼容正则表达式函数库
-
学习正则表达式时,有两方面需要学习。
- 正则表达式的模式如何编写
- 学习正则表达式的强大处理函数
2. 正则表达式的语法
-
正则表达式的语法
- 正则定界符
- 正则表达式中的原子
- 正则表达式的元字符 (原子修饰符)
- 正则表达式的模式修正符
-
正则表达式的定界符
- 正则定界符就是用来声明正则表达式边界的符号,正则表达式是字符串类型。所以在定义正则表达式时先定义字符串类型
- 正则表达式常用的边界符'/',实际上字母和非数字字符以及‘\’之外的字符都可以做正则表达式的边界符使用。
- 注意:一个完整的正则表达式准确的说有两个边界符。
- 第一个是字符串类型的引号边界符
- 第二个是正则表达式的边界符
-
正则表达式中的原子
- 什么是原子:组成正则表达式的最小单位就是原子。
- 原子有哪些内容组成?
- 正常的字母都是原子,所有可见字符都是原子。
- 大部分不可见字符也是原子,比如:空格、\n、\r 、\t
- \d 表示数字0-9之间任意一个字符。 [0-9]
- \D 表示匹配除数字0-9之外的任意一个字符
- \s 表示匹配空白字符、包括空格、\n、\r、\t中的任意一个字符
- \S 表示匹配除空白字符之外的任意一个字符
- \w 表示匹配数字、大小写字母以及下划线中任意一个字符
- \W 表示匹配除了数字、大小写字母以及下划线中任意一个字符。
- [] 原子列表
- 表示在指定的字符中选取一个原子
- [5-9]表示5,6,7,8,9连续的字符,允许缩写为开始字符-结束字符
- [^ ]排除列表
- [^ abc] 表示除了abc之外的所有字符都可以使用。
-
元字符(原子修饰符)
- 表示前面的原子可以出现一次或者多次 {1,}
? 表示前面的原子可以出现0次或者一次
- 表示前面的原子出现0次1次或者多次。 {0,}
{m,n}表示前面的原子最少出现m次,最多出现n次
{m}表示前面的原子出现指定的m次。
{m,}表示前面的原子最少出现m次。
- 什么是词边界
可以分割一个单词的字符都是词边界,包括空格 标签符号,特殊字符,字符串的开始和结束,每一行的结束。
不可以当做词边界就是数字,字母和_
\b 词边界
\B 非词边界
注意:词边界仅对英文有效。
字符串边界修饰符(开始和结束)
^ 表示以指定字符开头的内容
$ 表示以指定字符结尾的内容
^字符串$表示精确匹配某个字符串 多一个少一个都算错
注意:如果要使用^和$可以匹配每一行的开始和结束部分,需要使用后面学习到的模式修正符m 视为多行处理。
| 选择修饰符
模式单元 ()
- 改变优先级
- 将多个原子视为一个原子,好处可以使用原子数量修饰符
- 将匹配到括号内容占时存放到内存当中。
- 如果使用()仅仅为了模拟一个原子使用原子修饰符,那么可以在括号的开始处使用?:来解除存于内存的作用,提高效率。
- 可以将括号的内容在函数的辅助下进行反向引用操作。
- 表示前面的原子可以出现一次或者多次 {1,}
练习:
匹配域名的规则
- 模式修正符
- i 忽略大小写
- x 忽略正则中的空白
- s 使用.元字符可以匹配到\n
元字符(.)可以匹配任意一个原子,除了\n之外. - m 视为多行处理,在该模式下^和$可以匹配\n
- S(大s) 加速匹配
- U模式(必须记住) 改变贪婪模式
改变贪婪模式,程序默认是贪婪的,匹配最远的结束为止,我们可以在正则中使用.*?匹配任意字符的同事使用非贪婪模式。
3. 正则表达式的函数
- preg_grep() 返回与模式匹配的数组单元(一维数组)
- preg_split() 通过一个正则表达式分隔字符串
- preg_match() 进行一次正则匹配
- preg_match_all() 执行一个全局正则表达式匹配
- preg_replace() 执行一个正则表达式的搜索和替换
十二、GD库
1.学习GD2模块
- 哪些地方需要用到图像处理
验证码
相册中图片 缩放 水印
在线生成图片 - 学习GD2模块
- 确定当前环境是否支持GD2相关操作
- 查看PHPINFO 中是否存在GD模块的说明
- 如果没有找到GD模块说明,需要修改配置文件中extension=gd2去爱到前面的分号,然后重启apache
- 注意:也有可能叫:extension=php_gd2.dll
- 如果修改了配置文件还不能开启gd2模块,要检查PHP程序的ext文件夹中是否具有php_gd2.dll文件的存在,如果没有请去下载(官网)
- 确定当前环境是否支持GD2相关操作
2.绘图的步骤
-
现实中画家如何绘画(绘画步骤)
- 准备纸或者画布
- 为每一幅画调配颜色
- 拿笔绘图
- 告诉别人你画的是什么
- 把画卖掉或者自己留着
- 收拾东西走人。
-
使用GD2程序绘图步骤
- 创建画布
- 为每一幅画分配颜色
- 使用相关函数进行绘图操作(圈、点、线、写字)
- 通知浏览器图片相关信息(jpg,jpeg,png)
- 将图片显示到浏览器或者保存到本地
- 释放资源
- 注意:六脉神剑
3.使用GD2相关函数进行绘图操作
- imagecreate() 创建基于调色板的图像(意思颜色少,只能表示256中颜色,适合做gif图像)
- imagecreateturecolor() 创建一个真彩色的图像 (意思颜色多,能表示除65535种颜色值,适合做jpg\png)
- 参数1:图像宽度
- 参数2:图像高度
- 返回值:返回创建成功后的图像资源
- imagecolorallocate() 为每张画布分配颜色
- 参数1:创建画布函数成功返回的资源
- 参数2:红色
- 参数3:绿色
- 参数4:蓝色
- imagefill() 区域填充
- 参数1:创建画布函数成功返回的资源
- 参数2:填充开始的X点
- 参数3:填充开始的Y点
- 参数4:要填充的颜色由imagecolorallocate创建颜色返回的数字标识
- imagedestroy() 销毁一个图像
- 参数1: 由创建图像函数成功返回资源
- 返回值: 成功返回true失败返回false
- header('content-type:image/jpeg') 告诉浏览器图片相关信息
- imagejpeg() 输出或者保存jpeg图像
- 参数1:创建画布函数成功返回的资源
- 参数2:可选参数,如果设置表示需要保存图片,填写保存图片的路径
- imagepng() 输出或者保存png图像
- imagegif() 输出或者保存gif图像
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析