当前位置: 首页 > news >正文

PHP文本操作+文件夹遍历+递归文件夹操作

1、什么是文件操作?磁盘上用户能看到的逻辑数据结构(文件夹和文件)对文件的增删改查

2、为什么要有文件操作?
当程序需要为某些特定操作进行文件夹或者文件处理的时候,都会应用到文件操作。
文件上传的时候创建目录;下载文件的时候读取内容;日志分析的时候读取内容,文件夹操作、文件夹不属于php本身,php要去操作文件夹,通过资源的形式进行操作。

1、建立连接。获取文件资源。
opendir(路径):打开一个路径资源(将路径内部的所有数据读入到内存)

2、获取文件夹资源里面的文件:文件名
readdir(路径资源):从文件夹资源中读取当前资源指针所指向的文件的名字,指针会向下移动一位

3、释放资源
closedir(资源):释放对应的文件资源

遍历文件夹
将文件夹资源内部的所有文件给遍历出来。利用readdir能够读取元素,并且下移指针的过程,配合如果指针移出资源,返回的是false来进行循环遍历。

结果集指针回位
rewinddir(资源)

函数遍历文件夹
scandir(路径):读取一个路径内部的所有文件名,返回一个数组,数组的每一个元素都是文件名。


文件夹操作相关函数
file_exists:判断一个文件是否存在(文件是广义:路径和文件)

is_dir:判断一个指定路径是否存在(文件夹)

is_file:判断一个指定路径是否是文件(文件)

mkdir:创建一个路径,如果路径存在就会报错

rmdir:移除文件夹

注意:文件夹的删除只能删除空文件夹,不能删除有文件的文件夹(.和..除外)
getcwd:获取当前工作路径


chdir:改变当前工作路径


作业:将文件上传做成按月日时分,分类管理
思路:判断当前年月日时分秒这样的路径是否存在,不存在创建,存在将将文件放进去

遍历所有文件及其子目录
遍历一个文件夹内的所有文件的同时,如果其文件是目录,那么也需要遍历出来。

1.定义一个函数:获取当前指定目录下面的所有文件
2.先取出当前文件夹内的所有文件
3.将取出的文件数组遍历输出

4.修改判断逻辑:所有的文件的判断,都必须配合路径。

5.如果文件结果是文件夹:说明有子文件,重新遍历获取里面的所有内容


以上解决方案:只能变量两层文件夹,如果有多层就没有办法全部遍历处理。

规律
要解决的问题:获取一个文件夹内的所有文件夹和文件
子问题:获取一个文件夹内的所有的文件夹和文件


内存分析
在函数内部调用函数自己,实现文件夹及其字目录遍历

递归
1.什么是递归?
递归就是函数在自己内部调用函数。

2.递归两个点
a)递归点:如果在函数内部去解决一个问题的时候,发现把问题减小之后,子问题与父问题(函数要解决的问题)一致,只是规模变小,这个时候就应该采用父问题的解决方案去解决子问题,递归点。
文件夹遍历的递归点:遍历到子文件夹的时候,子文件夹与外层的符文件件本质上没有区别,递归点。
b)递归出口:当递归发生后(函数内部调用了函数自己之后),函数不应该无限的调用自己,应该在某个点结束自己。结束点称之为递归出口
文件夹遍历的递归出口:读到的文件是文件不是路径,递归出口是一个文件夹内没有子文件夹或者子文件夹都被遍历完。

作业:
1.实现递归遍历文件夹及其子目录:输出
2.递归遍历文件夹及其子目录:通过数组保存,保存的数据能够被区分出是文件还是文件夹,还能确定层级(无限级分类):静态变量,二维数组(文件名,层级,是否是目录)

文件操作
对文件里面的对文件里面的内容内容进行读写

PHP5文件操作
将文件的内容整个进行读取和写入

读取文件
file_get_contents:从一个指定的文件内读取数据内容。


写入内容
file_put_contents:将指定的字符串写入到对应的文件


注意:file_put_contents如果要写入的文件不存在,系统会自动创建,有的话就直接写入
默认的file_put_contents写入数据的时候,会先清空数据再写入

如果要在文件后面追加内容:应该使用file_put_contents的第三个参数
FILE_USE_INCLUDE_PATH:先清空文件,再重新写入(默认的)
FILE_APPEND:追加数据到文件末尾


file操作
file就是将一个文件里面的内容,逐行取出,存放到一个数组的元素里,返回一个数组


PHP4文件操作
php5以前文件的操作,与文件夹一样,都是通过资源的形式进行操作

1.获取文件资源
fopen:打开一个文件资源


如果是通过资源形式去操作文件的话,那么必须在打开文件的时候,就指定操作模式。


只读模式打开

2.读取文件内容
fgetc:c代表character,一次读取一个字符
fgets:s代表string,代表可以读取多个字符,取决于指定的读取长度或者是否碰到换行(最多只能读取一行数据)
两个函数都是对当前资源指针进行操作,读取之后都会将指针下移


fread:获取指定长度的数据直到文件结束


遍历文件


3.修改文件(写)
fwrite:向文件资源指针所在的位置写入数据,写东西不会将当前位置已有的东西往后移,而是会覆盖
fputs:fwrite别名


没有办法在指定的中间位置去写入内容,只能覆盖内容

文件指针移动
fseek:将指针指定到对应的位置

4.释放资源
fclose:使用对应的文件资源


文件操作相关函数
copy:复制
unlink:删除文件
rename:重命名文件
filemtime:m代表modify,文件最后被修改的时间
filesize:文件大小(字节)
fileperms:文件权限(Linux下的八进制)


简单文件操作
1.文件下载
服务器的文件被下载到浏览器端所在的电脑。

HTML的a标签实现下载:a标签中如果出现了浏览器不能识别的文件的(URL),浏览器就会认为是文件(附件),形成文件下载


php实现文件下载
php需要修改一个http响应头(http协议)
header("Content-type: application/octet-stream"):服务器给浏览器的内容是二进制流式文件,
header("Content-Disposition: attachment; filename=filename"):告诉浏览器当前数据不需要解析,是附件,本地保存的时候建议使用的文件名字是filename


PHP实现下载的好处
1.隐藏真实文件的路径,防止别人攻击
2.隐藏文件的真实内容

作业:
1.做一个统计网站:如果一个用户去请求对应的脚本文件,记住当前用户的ip地址,访问时间,写入到对应的统计文件(一个用户的一次访问占一行);当用户访问的时候,提示当前用户是第几次访问,是第几个访客;

http://www.jsqmd.com/news/643830/

相关文章:

  • 【原创】IgH EtherCAT主站详解(二十三)--API 参考
  • 【GESP】C++五级真题 luogu-P15798, [GESP202603 五级] 有限不循环小数
  • Vue3.0中优雅重置reactive/ref数据的实用方案与封装技巧
  • # 019、AutoSAR CP网络管理(NM)与诊断(UDS/DCM)配置实战笔记
  • 避坑实操:Ollama安装Yi-Coder-1.5B全流程,附常见错误解决方案
  • FID指标避坑指南:当你的生成模型分数突然飙升时该怎么办?
  • 剖析做车身电子PCB打样的厂家,推荐几家好用的靠谱品牌 - 工业品网
  • Blender3mfFormat插件深度解析:3D打印工作流中的关键技术实现与性能优化
  • 【含文档+PPT+源码】4S店车辆保养维护管理系统的设计与实现
  • 三月七小助手:崩坏星穹铁道全自动游戏助手终极指南
  • Hermes Agent 配置大全
  • d3d9.dll文件丢失怎么办?教你免费下载修复方法
  • 二叉树的右透视图
  • 如何用SMUDebugTool彻底解决AMD Ryzen系统故障:终极调试指南
  • 别再只写int main()了!C语言main函数传参的3种实战用法(附VS/PowerShell配置)
  • 2026年靠谱的智能制造伺服电机厂家推荐与采购指南 - 工业品牌热点
  • SQL注入(1)
  • kali 软件源设置为国内站点配置详解
  • 视频内容宝藏挖掘:智能PPT提取工具让知识留存更简单
  • SeqGPT-560M一键部署教程:开箱即用的NLP解决方案
  • 超元力VR大空间:以技术为桥,解锁沉浸式体验新可能
  • JetBrains IDE评估期重置技术解析:跨平台配置清理与插件化实现方案
  • 032.Web端部署:用Flask/FastAPI给YOLO造个API服务,这些坑我替你踩过了
  • Nano-Banana批量处理技巧:高效生成风格一致的产品拆解图
  • WindowsCleaner:高效解决C盘爆红问题的终极系统清理工具
  • 基于 FastAPI + Vue 深度定制的全栈自动化执行引擎设计全解
  • PMO-N8N
  • 改进型Z源逆变器拓扑及其并网研究
  • 【信奥业余科普】04:承载“0和1”的物理躯壳——从30吨的庞然大物到指甲盖大小的微缩奇迹
  • AI智能二维码工坊技术解析:H级容错编码原理与实现