【PHP】文件操作
文章目录
- 文件编程的必要性
- 目录操作
- 其它目录操作
- 递归遍历目录
- PHP5常见文件操作函数
- PHP4常见文件操作函数
- 其他文件操作函数
文件编程的必要性
文件编程指利用PHP代码针对文件(文件夹)进行增删改查操作。
在实际开发项目中,会有很多内容(文件上传、配置文件等)具有很多不确定性,不能在一开始就手动的创建,需要根据实际需求和数据本身来进行管理,这个时候就可以使用PHP文件编程来实现代码批量控制和其他操作。
文件操作的分类
1) 目录操作:文件夹,用来存放文件的特殊文件
2) 文件操作:用来存放内容
目录操作
创建目录
1.mkdir(目录名):创建成功返回true,创建失败返回false
2.创建目录可以结合错误抑制符使用。因为有些操作为的就是得到一个想要的结果,如果结果本身就存在,那么可以忽略得到过程的错误:抑制错误。
- 例如:上面想要创建的文件夹本身就存在
$res = @mkdir('dir');
删除目录
rmdir(指定文件夹路径):移出文件夹
@rmdir('dir');
读取目录
读取方式:将文件夹(路径)按照资源方式打开
1.opendir(目录名):打开资源,返回一个路径资源,包含指定目录下的所有文件(文件夹)
2.readdir(路径资源):从资源中读取指针所在位置的文件名字,然后指针下移,直到指针移出资源
- 如果想要读取所有内容,那么此时可以使用
while或者for进行循环操作
$r = @opendir('dir');
while($file = readdir($r))
{echo $file,'<br/>';
}
关闭目录
closedir(路径资源)
其它目录操作
1)dirname(路径):得到的是路径的上一层路径
- 作用:可以得到路径的前缀
$dir1 = 'D:/Mango/Lemon/Test.php';
$dir2 = 'D:/Mango/Lemon/Test/test.php';
echo dirname($dir1)," ",dirname($dir2);//D:/Mango/Lemon D:/Mango/Lemon/Test
注意:dirname只是根据字符串返回,无论该路径在电脑上是否存在
2)realPath(一个路径):如果文件存在,返回该文件路径。如果文件不存在,返回false
$dir1 = 'Z:/1.md';
$dir2 = 'Z:/2.md';
var_dump(realpath($dir1),realpath($dir2));//string(7) "Z:\1.md" bool(false)
3)is_dir(路径):判断指定路径是否是一个目录,如果该路径不存在&不是目录:返回false
$dir1 = 'D:/';
$dir2 = 'D:/Mango/Lemon/Test/test.php';
var_dump(is_dir($dir1),is_dir($dir2));//bool(true) bool(false)
4)scandir(路径):封装版的opendir+readdir+closedir,获取一个指定路径下的所有文件信息,以数组形式返回
var_dump(scandir('dir'));//array(3) { [0]=> string(1) "." [1]=> string(2) ".." [2]=> string(4) "ddir" }
递归遍历目录
递归遍历目录:指定一个目录的情况下,将其下的所有文件和目录,及其目录内部的所有内容都输出出来。
思路
- 设计一个能够遍历一层文件的函数
function my_scandir($dir)
1.首先要判断$dir是否是目录,如果不是目录,直接终止
2.使用scandir读取dir目录下的所有内容(文件+子目录)
3.遍历读取到的所有内容
-
此时需要构造文件路径(因为遍历得到的结果只是文件的名字) & 并且需要排除
.和..文件,否则会导致死循环 -
找到递归点:遍历得到的文件是目录,应该调用当前函数(调用自己),判断构建好的路径是目录还是普通文件,如果是目录,则调用自身函数
4.找到递归出口:遍历完这个文件夹之后,发现没有任何子文件夹(函数不再调用自己):自带递归出口
问题:如何显示层级关系
函数第一次运行遍历的结果是最外层目录,内部调用一次说明进入一个子目录,子目录再调用一次函数进入孙子目录,如果能够在第一次调用的时候给个标记,然后在进入的时候,通过标记的变化来识别层级关系,就可以达到目的:该标记还能代表层次关系:缩进
方法:可以在函数当中多增加一个参数,默认值为0,标识最外层
- 递归调用函数的时候也需要使用该参数:但是是属于当前层级的子层,所以+1
注意:递归调用的时候,是level+1,而不是level++,因为要回溯回来,如果是++就会导致level的值发生改变
根据层级来实现缩进
可以使用str_repeat函数,作用是:重复一个字符串多少次,在这里我们的层级用空格来表示即可
str_repeat(" ",$level))==>重复两个空格level次
整体代码
//递归遍历目录
//参数1:路径名 参数2:当前层级,默认是0,表示最外层
function my_scandir($dir,$level = 0)
{//1.首先判断该路径是否是一个目录,如果不是,直接结束if(!is_dir($dir))die($dir.'<br/>'); //die() 函数输出一条消息,并退出当前脚本。//2.使用scandir函数获取当前路径下所有文件信息,以数组形式返回$file_array = scandir($dir);//3.遍历路径下的所有内容foreach($file_array as $file){//$file代表的就是文件名/文件夹名//根据文件层级显示对应的空格数echo str_repeat(" ",$level),$file.'<br/>';//排除.和.. 防止死递归if($file == '.' || $file == '..') continue;//因为$file只是文件名,所以要构造路径$file_dir = $dir.'/'.$file; //利用到了 .连接符//验证: echo $file_dir;//如果是目录,那么就递归if(is_dir($file_dir))my_scandir($file_dir,$level+1);}
}
$dir = 'dir';
my_scandir($dir);
效果

PHP5常见文件操作函数
1)file_get_contents(文件路径):获取指定文件的所有内容
- 如果路径不存在最好做安全处理 ==> 错误抑制
$file = 'read.txt';
$content = @file_get_contents($file);
echo $content;//hello I am read.txt Mango Lemon
2)file_put_contents(文件路径,内容):将指定内容写入到指定文件内:如果当前路径下不存在指定的文件,函数会自动创建(如果路径不存在,不会创建路径)
- 返回值:返回写入的字符串长度(字节)
$file = 'read.txt';
// $content = @file_get_contents($file);
$test = 'hello world';
$res = file_put_contents($file,$test);echo $res;//11
PHP4常见文件操作函数
PHP4中是将文件操作用资源形式处理:不论是读还是写都依赖资源指针:文件内容中指针所在位置
1)fopen(文件路径,打开模式):打开一个文件资源,返回值资源指针,要指定打开模式
2)fread(资源指针,长度):从打开的资源中读取指定长度的内容(字节)
3)fwrite(资源指针,内容):向打开的资源中写入指定的内容
4)fclose(资源):关闭资源
$file_name = 'read.txt';
$fp = fopen($file_name,'r');//以读方式打开
$content = fread($fp,1024);
echo $content; //hello world hello world dwadaw dwadaw
fclose($fp);
其他文件操作函数
1)is_file():判断文件是否正确(不识别路径)
$filename = 'example.txt';
if (is_file($filename)) {echo "The file exists and is a regular file.";
} else {echo "The file does not exist or is not a regular file.";
}
2)filesize():获取文件大小
$filename = 'example.txt';
$filesize = filesize($filename);
echo "The size of the file is: " . $filesize . " bytes";
3)file_exists():判断文件是否存在(识别路径)
$filename = 'example.txt';
if (file_exists($filename)) {echo "The file exists.";
} else {echo "The file does not exist.";
}
4)unlink():取消文件名字与磁盘地址的连接(删除文件)
$filename = 'example.txt';
if (file_exists($filename)) {unlink($filename);echo "File deleted successfully.";
} else {echo "File does not exist, cannot delete.";
}
5)filemtime():获取文件最后一次修改的时间
$filename = 'example.txt';
if (file_exists($filename)) {$lastModified = filemtime($filename);echo "Last modified: " . date("Y-m-d H:i:s", $lastModified);
} else {echo "File does not exist.";
}
6)fseek():设定fopen打开的文件的指针位置
$filename = 'example.txt';
$fp = fopen($filename, 'r');
fseek($fp, 50); // Set the pointer position to byte 50 from the beginning of the file
// Perform other operations here, like reading or writing
fclose($fp);
7)fgetc():一次获取一个字符
$filename = 'example.txt';
$fp = fopen($filename, 'r');
$char = fgetc($fp); // Read one character from the file
echo "The first character in the file is: " . $char;
fclose($fp);
8)fgets():一次获取一个字符串(默认行)
$filename = 'example.txt';
$fp = fopen($filename, 'r');
$line = fgets($fp); // Read one line from the file
echo "The first line in the file is: " . $line;
fclose($fp);
9)file():读取整个文件,类似file_get_contents,区别是按行读取,返回一个数组
$filename = 'example.txt';
$lines = file($filename); // Read the entire file into an array
foreach ($lines as $line) {echo $line . "<br>";
}
相关文章:
【PHP】文件操作
文章目录 文件编程的必要性目录操作其它目录操作递归遍历目录PHP5常见文件操作函数PHP4常见文件操作函数其他文件操作函数 文件编程的必要性 文件编程指利用PHP代码针对文件(文件夹)进行增删改查操作。 在实际开发项目中,会有很多内容&…...
科创板50ETF期权交易:详细规则、费用、保证金和开户攻略
科创板50ETF期权是指以科创板50ETF为标的资产的期权合约。科创板50ETF是由交易所推出的一种交易型开放式指数基金(ETF),旨在跟踪科创板50指数的表现,下文介绍科创板50ETF期权交易:详细规则、费用、保证金和开户攻略&am…...
怎么把图片放大并且清晰?有详细的方法步骤
怎么把图片放大并且清晰?数字图像处理中的图片放大是许多行业和领域中广泛应用的一项技术。常规的放大方法通过插值或复制像素的方式增加像素数,但这会导致失真和模糊。无损放大是一种特殊的放大方法,它可以通过数学算法来增加图片的尺寸&…...
C++ 构造函数、析构函数调用虚函数
C虚函数是通过虚表实现的,虚函数的地址记录在需表中,只对象完成构造完成后,虚函数的地址才最终确定。 构造函数中调用虚函数 基类先于派生类构造,所以构造时没法调用到派生类的虚函数,也就是说只能调用到自己&#x…...
工业状态监测如何选择合适的无线技术?
工业领域的状态监测在提高生产效率和产品质量方面起着关键作用。过去依赖于预防性维护和例行检查的方式已经不再能满足日益复杂的生产需求,随着工业物联网(IIoT)的兴起,设备状态监测逐渐成为一种关键策略,催生了预测性…...
Mysql45讲学习笔记
前言:这篇文章主要总结事务,锁、索引的一些知识点,然后分享一下自己学习小心得,我会从点到线在到面展开说说,对于学习任何知识,我们都应该藐其全貌,不要一开始就选入细节 基础 一、基础架构&a…...
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
报错描述 情景一 1Panel在"主机-->进程守护"通过命令"nohup /opt/tomcat/bin/startup.sh > /opt/supersivor/tomcat/nohup.log &"创建守护进程,运行日志如下: #--------------------------------------------------------…...
opencv 水果识别+UI界面识别系统,可训练自定义的水果数据集
目录 一、实现和完整UI视频效果展示 主界面: 测试图片结果界面: 自定义图片结果界面: 二、原理介绍: 图像预处理 HOG特征提取算法 数据准备 SVM支持向量机算法 预测和评估 完整演示视频: 完整代码链接 一、…...
TypeScript数组和对象的操作
TypeScript数组和对象的操作 一、数组的声明二、数组初始化三、数组元素赋值、添加、更改四、删除五、合并、断开数组六、查找数组元素七、连接数组元素八、排序、反序数组九、遍历数组,对象 一、数组的声明 let arr1: Array<number>; let arr2: number[];二…...
docker之Compose与DockerSwarm
目录 Compose 简介 概念 为什么需要? 配置字段 常用命令 安装 1.下载 2.授权 使用 1.创建文件 2.启动 docker Swarm 关键概念 调度策略 spread binpack random 特性 集群部署 1.准备 2.创建swarm并添加节点 在主服务器上创建swarm集群 节点…...
VS Code 使用 clang++ 编译,使用 cppvsdbg 或 lldb 调试的配置方法
需要安装的 VS Code LLVM VS Code 需要安装的插件: C/C(用来配置 c_cpp_properties.json) CodeLLDB(如果你要用 lldb 调试,那么这个插件就需要安装,用来连接到 lldb 调试器) 流程 我们都…...
android11,12 Launcher3编译什么
1首先看看手机里的是什么 adb shell pm path com.android.launcher3 package:/system_ext/priv-app/Launcher3QuickStep/Launcher3QuickStep.apk 然后就编译Launcher3QuickStep 2push apk 没什么说的,push到对应的文件夹 /system_ext/priv-app/Launcher3Quick…...
Go 第三方库引起的线上问题、如何在线线上环境进行调试定位问题以及golang开发中各种问题精华整理总结
Go 第三方库引起的线上问题、如何在线线上环境进行调试定位问题以及golang开发中各种问题精华整理总结。 01 前言 在使用 Go 语言进行 Web 开发时,我们往往会选择一些优秀的库来简化 HTTP 请求的处理。其中,go-resty 是一个被广泛使用的 HTTP 客户端。…...
【C语言】#define 宏定义初步使用
使用宏定义可以防止出错,提高可移植性,可读性,方便性等。 下面列举了一些成熟软件中常用的宏定义。 重新定义一些基本类型 重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便…...
项目里面怎么解决跨域的?
一.前端配置跨域 proxy解决跨域 在vue.config.js中通过proxy devServer中配置反向代理。 devServer: {port: port,open: true,overlay: {warnings: false,errors: true},// 配置反向代理proxy: {// 当地址中有/api的时候会触发代理机制/api: {target: http://ihrm-java.ithe…...
Oracle 批量导出表注释和主键
–查询分表(目前分了16张表) –先查询注释为空的表,也就是11表做示例,统计出来以后11批量修改成1 select owner,column_name,comments,table_name from all_col_comments a where a.table_name like ‘TB%1’ and a.comments is n…...
Linux C++ 海康摄像头获取过车信息
代码 void CALLBACK MessageCallback(LONG lCommand, NET_DVR_ALARMER *pAlarmer, char *pAlarmInfo, DWORD dwBufLen, void *pUser) {printf("enter MessageCallback---------------------->\n");int i;NET_DVR_ALARMINFO_V30 struAlarmInfo;memcpy(&struAl…...
iOS逆向:越狱及相关概念的介绍
在上一篇内容中我们介绍了App脱壳的技术,今天我们来介绍一个和iOS逆向密切相关的知识:越狱。 iOS操作系统的封闭性一直是开发者们关注的焦点之一。为了突破Apple的限制,越狱技术应运而生。本文将深入探讨iOS越狱,包括可越狱的版本…...
SQL语法与DDL语句的使用
文章目录 前言一、SQL通用语法二、DDL语句1、DDL功能介绍2、DDL语句对数据库操作(1)查询所有数据库(2)查询当前数据库(3)创建数据库(4)删除数据库(5)切换数据…...
Node.js /webpack DAY6
一、Node.js 入门 1. 什么是 Node.js? 2. 什么是前端工程化? 3. Node.js 为何能执行 JS? 4. Node.js 安装 5. 使用 Node.js 总结 6. fs 模块 - 读写文件 /*** 目标:基于 fs 模块 读写文件内容* 1. 加载 fs 模块对象* 2. 写入文件…...
全链路压测实战:双十一级别的流量,我是这样扛住的
作为一名在质量保障领域摸爬滚打多年的测试工程师,我深知传统的单接口压测在如今分布式架构下的无力感。当业务流量达到双十一这种脉冲式、高并发的级别时,任何一个非核心链路上的“短板”都可能引发系统性的雪崩。全链路压测不再是选择题,而…...
[智能体-81]:工程化智能体 = 模型做脑力拆解 + 框架做流程落地。前者是决策者,后者是管理者,tools/function call是内部员工;mcp server是外部资源;
一、全角色人设 & 对应技术组件角色定位对应技术模块核心职责决策者(脑力大脑)大模型 LLM理解目标、任务拆解、逻辑判断、分支决策、内容生成,负责 “想方案、定步骤”管理者(流程总管)智能体编排框架(…...
Owl-Alpha 新手快速上手指南
在处理大规模数据或构建高性能应用时,我们常常会遇到一个棘手的问题:如何在不阻塞主线程的情况下,高效地执行耗时任务?无论是处理图像、解析大型文件,还是进行复杂的数学运算,传统的单线程模式往往会让界面…...
终极Chrome画中画扩展:如何在浏览器中实现高效视频多任务处理
终极Chrome画中画扩展:如何在浏览器中实现高效视频多任务处理 【免费下载链接】picture-in-picture-chrome-extension 项目地址: https://gitcode.com/gh_mirrors/pi/picture-in-picture-chrome-extension 想要在浏览网页、处理文档的同时继续观看视频内容吗…...
DS4Windows终极指南:3步让PS手柄在PC上完美运行游戏
DS4Windows终极指南:3步让PS手柄在PC上完美运行游戏 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows 还在为PS手柄连接Windows电脑后无法识别而烦恼吗?🎮…...
Codex使用API Key授权无法使用插件?
小伙伴们,大家好,我是小溪,见字如面。对于没有ChatGPT账号的小伙伴来说,虽然可以通过API Key授权的方式使用Codex桌面端,但是会有一些限制。比如无法使用插件功能,无法使用Codex移动端进行远程控制等。为了…...
从零构建FOC轮腿机器人:开源平衡机器人完整指南
从零构建FOC轮腿机器人:开源平衡机器人完整指南 【免费下载链接】foc-wheel-legged-robot Open source materials for a novel structured legged robot, including mechanical design, electronic design, algorithm simulation, and software development. | 一个…...
操作符从浅入深的讲解
1. 操作符的分类 2. ⼆进制和进制转换 3. 原码、反码、补码 4. 移位操作符 5. 位操作符:&、|、^、~ 6. 单⽬操作符 7. 逗号表达式 8. 下标访问[]、函数调⽤() 9. 结构成员访问操作符 10. 操作符的属性:优先级、结合性 11. 表达式求值1.操作符的分类以…...
利用 Taotoken 多模型能力为智能客服场景提供备份路由
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 利用 Taotoken 多模型能力为智能客服场景提供备份路由 智能客服系统是许多企业与用户交互的关键入口,其响应能力和服务…...
如何快速实现U盘文件自动备份:USBCopyer终极指南
如何快速实现U盘文件自动备份:USBCopyer终极指南 【免费下载链接】USBCopyer 😉 用于在插上U盘后自动按需复制该U盘的文件。”备份&偷U盘文件的神器”(写作USBCopyer,读作USBCopier) 项目地址: https://gitcode.…...
