php语法记录3

十、文件系统

1. 文件相关操作

  1. 什么是文件系统?
    • 文件系统只是PHP知识的一个完整的模块而已。

    • 对所有的文件进行的任何操作都需要文件系统相关的函数

    • 学习文件系统就是学习操作文件的相关函数。

    • 创建文件

      • touch()
        参数1:文件路径及名称
        参数2:可选参数 修改时间
        参数3:可选参数 访问时间
        返回值:成功返回true,失败返回false;
    • 移动文件 - 重命名

      • rename()
        参数1:旧的文件名
        参数2:新的文件名
        返回值:成功返回true,失败返回false
    • 删除文件

      • unlink()
        参数:要删除的文件路径
        返回值:成功返回true,失败返回false
    • 复制文件

      • copy()
        参数1:源文件路径
        参数2:目标文件路径
        返回值:成功返回true,失败返回false
        注意:如果目标文件存在则会覆盖。
    • 获取文件大小

      • filesize()
        参数:要获取文件大小的文件路径
        返回值:返回文件的大小
    • 判断是否是文件

      • is_file()
        参数:文件的路径
        返回值:是文件返回true,不是文件返回false
    • 判断文件或者目录是否存在

      • file_exists()
        参数:文件或目录的路径
        返回值:存在则返回true,不存在则返回false;
    • 文件是否可执行

      • 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:要写入的内容
      • 返回值:返回写入成功后的字节数
  2. 生成器yield
  • 优点:
    • 生成器会对PHP应用的性能有非常大的影响
    • PHP代码运行时节省大量的内存
    • 比较适合计算大量的数据
  • 生成器的执行过程
    1. 首先调用demo1函数,传入参数10,但是for循环执行了一次就停止了,并且告诉foreach第一次循环可以用的值
    2. foreach开始对$result结果变量进行循环,进来首先sleep(1),然后开始使用for给的一个值执行输出。
    3. foreach准备第二次循环,开始第二次循环之前,它向for循环在请求一次。
    4. for循环于是又执行了一次,将生产的结果告诉foreach
    5. foreach拿到第二个值,并且输出。由于foreach中sleep(1),所以,for循环延迟1秒生成当前时间。
    6. 所以整个代码执行中,使用只有一个记录值参与循环,内存中也只有一条信息。
  • 生成器概念
    • 生成器yield关键字不是返回值,它的专业术语叫产出值,只是生成一个值。

2. 目录相关操作

  1. 目录相关操作都有哪些?
    • 打开目录

      • 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. 文件上传

  1. 需要使用文件上传的功能?
    • 网盘
    • 网络相册
    • 头像
    • 实名认证
    • 百度文库
    • 邮件附件
  2. 什么是文件上传呢?
    • 将本地的文件复制一份传送到网络的服务器中存储。
  3. 文件上传时需要注意的事项有哪些。
    • HTML表单部分:
      1. 上传文件时,传输方式必须是POST方式。
      2. 需要指定表单传输编码格式:enctype="multipart/form-data";
    • PHP页面需要注意:
      1. 如果有文件上传,那么上传的文件在PHP脚本中不能用$_POST来接收,必须用$_FILES来接收,其它内容依然用$_POST
      2. php.ini配置文件中:upload_max_filesize = 2M 允许上传文件大小的最大值
      3. upload_tmp_dir ="c:/wamp64/tmp" 文件上传的临时目录
      4. file_uploads = On 允许文件上传
      5. max_file_uploads = 20 表示允许最大上传文件个数为20个。
      6. post_max_size = 8M 表示POST最大传输内容为8m
        注意:upload_max_filesize设置的值不允许超过post_max_size设置的值。

2. 文件下载:

  1. 将字符串按照指定的编码进行转换
    • iconv(输入字符串,输出字符集,要转换的字符串)
    • 返回转换后的字符串
  2. 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. 遍历目录 已做
  2. 创建目录 以做
  3. 删除目录 以做
  4. 复制目录 没做
  5. 移动和重命名目录 没做
  6. 上传内容 支持多文件上传(以有)
  7. 创建文件 系统函数
  8. 打开文件(如果是文件可以打开编辑,如果是图片可以预览) 系统函数
  9. 删除文件 系统函数
  10. 复制文件 系统函数
  11. 移动和重命名文件 系统函数
  12. 下载文件
  13. 统计目录及文件大小 已做

十一、 正则表达式

1. 介绍正则表达式及其作用

  1. 简单介绍正则表达式

    • 正则表达式就是描述字符串排列模式的一种自定义语法规则
    • 如果可以使用字符串处理函数完成的任务,就不要使用正则表达式。
    • 有一些复杂性的操作,只能用正则表达式来完成。
    • 正则表达式也称为一种模式表达式
    • 正则表达式就是通过构建具有特定规则的模式,在与输入的字符串信息进行比较、分割、匹配、查找和替换等功能。
  2. 什么是正则表达式

    • 例子:'/<img\s+src=".*?" />/' 它就是正则表达式
    • 乱七八糟的一堆字符堆砌在一起,神秘的符号,有奇特的意义。
  3. 学习正则表达式可以做什么

    • 验证用户名长度是否合法。
    • 验证邮箱规则
    • 验证手机号
    • 验证URL
    • BBS编辑器
    • QQ聊天表情
    • 新闻采集器、(小偷程序)
  4. 看看正则表达式的几个特点

    1. 正则表达式也是一个字符串
    2. 由具有特殊意义的字符组成的字符串。
    3. 具有一定编写规则,也是一种模式
    4. 看做是一种贬称该语言。因为是用一些特殊的字符,按照规则编写出一个字符串,形成一种模式-正则表达式。
    5. 如果正则表达不和函数一起使用,则它就是一个普通的字符串,如果将正则表达式放大某个函数中使用,才能发挥出正则表达式的作用。
  5. PHP中提供了两套正则表达式的函数库

    • posix 扩展正则表达 ereg
    • perl 兼容正则表达式 preg
    • 推荐使用perl兼容正则表达式函数库
  6. 学习正则表达式时,有两方面需要学习。

    • 正则表达式的模式如何编写
    • 学习正则表达式的强大处理函数

2. 正则表达式的语法

  1. 正则表达式的语法

    1. 正则定界符
    2. 正则表达式中的原子
    3. 正则表达式的元字符 (原子修饰符)
    4. 正则表达式的模式修正符
  2. 正则表达式的定界符

  • 正则定界符就是用来声明正则表达式边界的符号,正则表达式是字符串类型。所以在定义正则表达式时先定义字符串类型
  • 正则表达式常用的边界符'/',实际上字母和非数字字符以及‘\’之外的字符都可以做正则表达式的边界符使用。
  • 注意:一个完整的正则表达式准确的说有两个边界符。
    • 第一个是字符串类型的引号边界符
    • 第二个是正则表达式的边界符
  1. 正则表达式中的原子

    1. 什么是原子:组成正则表达式的最小单位就是原子。
    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之外的所有字符都可以使用。
  2. 元字符(原子修饰符)

    • 表示前面的原子可以出现一次或者多次 {1,}
      ? 表示前面的原子可以出现0次或者一次
    • 表示前面的原子出现0次1次或者多次。 {0,}
      {m,n}表示前面的原子最少出现m次,最多出现n次
      {m}表示前面的原子出现指定的m次。
      {m,}表示前面的原子最少出现m次。
    • 什么是词边界
      可以分割一个单词的字符都是词边界,包括空格 标签符号,特殊字符,字符串的开始和结束,每一行的结束。
      不可以当做词边界就是数字,字母和_
      \b 词边界
      \B 非词边界
      注意:词边界仅对英文有效。
      字符串边界修饰符(开始和结束)
      ^ 表示以指定字符开头的内容
      $ 表示以指定字符结尾的内容
      ^字符串$表示精确匹配某个字符串 多一个少一个都算错
      注意:如果要使用^和$可以匹配每一行的开始和结束部分,需要使用后面学习到的模式修正符m 视为多行处理。
      | 选择修饰符
      模式单元 ()
    1. 改变优先级
    2. 将多个原子视为一个原子,好处可以使用原子数量修饰符
    3. 将匹配到括号内容占时存放到内存当中。
    4. 如果使用()仅仅为了模拟一个原子使用原子修饰符,那么可以在括号的开始处使用?:来解除存于内存的作用,提高效率。
    5. 可以将括号的内容在函数的辅助下进行反向引用操作。

练习:
匹配域名的规则

  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模块

  1. 哪些地方需要用到图像处理
    验证码
    相册中图片 缩放 水印
    在线生成图片
  2. 学习GD2模块
    1. 确定当前环境是否支持GD2相关操作
      • 查看PHPINFO 中是否存在GD模块的说明
      • 如果没有找到GD模块说明,需要修改配置文件中extension=gd2去爱到前面的分号,然后重启apache
      • 注意:也有可能叫:extension=php_gd2.dll
      • 如果修改了配置文件还不能开启gd2模块,要检查PHP程序的ext文件夹中是否具有php_gd2.dll文件的存在,如果没有请去下载(官网)

2.绘图的步骤

  1. 现实中画家如何绘画(绘画步骤)

    1. 准备纸或者画布
    2. 为每一幅画调配颜色
    3. 拿笔绘图
    4. 告诉别人你画的是什么
    5. 把画卖掉或者自己留着
    6. 收拾东西走人。
  2. 使用GD2程序绘图步骤

    1. 创建画布
    2. 为每一幅画分配颜色
    3. 使用相关函数进行绘图操作(圈、点、线、写字)
    4. 通知浏览器图片相关信息(jpg,jpeg,png)
    5. 将图片显示到浏览器或者保存到本地
    6. 释放资源
    • 注意:六脉神剑

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图像
posted @ 2022-04-12 06:30  技术小白丁  阅读(33)  评论(0编辑  收藏  举报