学习PHP中的目录操作
对于编程语言来说,文件和目录的操作是其最最基础的功能。就像我们日常中最常见的图片上传、文件上传之类的功能,都需要文件和目录操作的支持。今天我们先来简单地学习一下 PHP 中关于目录操作的一些类和函数。
目录与路径分隔符
首先来看看两个常量,它们分别是目录与路径的分隔符号。
echo DIRECTORY_SEPARATOR, PHP_EOL; // /
echo PATH_SEPARATOR, PHP_EOL; // :
DIRECTORY_SEPARATOR 常量在 Linux 系统中输出的就是 / 这个斜杠,而在 Win 系统中则是 \ 这样的反斜杠。也就是说,它是根据当前的操作系统来确定使用哪种目录分隔符号的。PATH_SEPARATOR 是环境路径的分隔符,在 Linux 系统中输出的是 : ,其实就像是我们定义的系统环境变量一样,在 Linux 系统中我们查看或添加修改 PATH 环境变量就都都是使用 : 来分隔的。
Directory 对象操作
既然有对象这个概念,那么也就说明目录相关的操作其实也是有面向对象和面向过程两种形式的,我们先来看看面向对象是如何操作的。
$directory = dir('../');
while(($dir = $directory->read())!== false){
echo $dir, PHP_EOL;
}
// .
// ..
// 1.PHP中的日期相关函数(三).md
// source
我们使用 dir() 函数来返回一个 Directory 对象,这里需要注意的是,Directory 对象是只能通过 dir() 函数来获取的,无法通过 new 的方式来生成实例。在获得 Directory 对象之后,我们就可以通过 read() 方法来读取目录中的所有内容信息了。展示的内容其实和我们在操作系统中使用 ll -a 命令获取的结果是类似的,它会获得 . 、 .. 这两个目录信息,代表当前目录和上级目录。
echo $directory->read(), PHP_EOL;
//
$directory->rewind();
while(($dir = $directory->read())!== false){
echo $dir, PHP_EOL;
}
// .
// ..
// 1.PHP中的日期相关函数(三).md
// source
read() 方法是游标操作,也就是遍历一次后游标就会移动到最后一个位置,这时再调用 read() 就不会有任何信息了。这时我们可以通过 rewind() 方法重置游标,然后就可以重新遍历目录内容。
$directory->close();
// while($dir = $directory->read()){
// echo $dir, PHP_EOL;
// }
// Warning: Directory::read(): supplied resource is not a valid Directory resource
最后就是 close() 方法,用于关闭当前的目录对象句柄。
面向过程 Directory 操作
接下来我们就看看使用面向过程的方式如何获取目录里面的内容,我们同样还是查看相同的这个目录,输出和上面面向对象的方式中同样的信息。
$dirPath = __DIR__;
if(is_dir($dirPath)){
if ($dh = opendir($dirPath)) {
while(($dir = readdir($dh)) !== false){
echo $dir, PHP_EOL;
}
echo readdir($dh), PHP_EOL;
rewinddir($dh);
while(($dir = readdir($dh)) !== false){
echo $dir, PHP_EOL;
}
closedir($dh);
}
}
// .
// ..
// 2.学习PHP中的目录操作.php
// 1.PHP中的日期相关函数(三).php
//
// .
// ..
// 2.学习PHP中的目录操作.php
// 1.PHP中的日期相关函数(三).php
is_dir() 函数用于判断给定的路径是否是一个目录,这个函数相信不少同学都使用过。opendir() 是打开一个给定路径的目录句柄,其实就类似于 dir() 函数来获得 Directory 对象,不过需要注意的是,opendir() 函数返回的是一个句柄资源对象,不是 Directory 对象。然后我们就可以使用 readdir() 函数读取句柄对象中的所有目录信息内容了。
和 Directory 对象中的 read() 方法类似,readdir() 也是游标操作的,当遍历完一次之后,我们可以通过 rewinddir() 函数来重置句柄游标。最后就是 closedir() 函数,同样也是关闭一个句柄资源的函数。
其它目录路径操作
除了遍历查看目录之外,还有其它一些函数辅助我们获得目录相关的信息。
echo getcwd(), PHP_EOL;
// /Users/zhangyue/MyDoc/博客文章
chdir('dev-blog/php/202010');
echo getcwd(), PHP_EOL;
// /Users/zhangyue/MyDoc/博客文章/dev-blog/php/202010
// chdir('dev-blog/php/202013');
// Warning: chdir(): No such file or directory (errno 2)
chdir('/home');
echo getcwd(), PHP_EOL;
// /System/Volumes/Data/home
getcwd() 函数是获取当前运行 PHP 脚本的目录信息。注意,它是你在什么位置运行的 PHP 这个命令脚本的路径,也就是 PHP 程序的工作目录,不是你当前运行的文件的路径。使用 chdir() 可以改变这个目录信息。关于 getcwd() 函数的概念如果不是特别的清楚的话,请一定自己手动测试一下。
print_r(scandir($dirPath));
// Array
// (
// [0] => .
// [1] => ..
// [2] => 1.PHP中的日期相关函数(三).php
// [3] => 2.学习PHP中的目录操作.php
// )
print_r(scandir('/Users'));
// Array
// (
// [0] => .
// [1] => ..
// [2] => .localized
// [3] => Guest
// [4] => Shared
// [5] => share
// [6] => zhangyue
// )
scandir() 函数是列出指定路径中的文件和目录,它的参数必须是一个绝对路径,能够以数组的形式返回所有的内容,在某些情况下非常地方便好用。
总结
关于 PHP 的目录操作相关的内容就是这些,其实还有 mkdir() 之类的函数也是操作目录的,不过在 PHP 官方文档中将它归到了文件操作的讲解中,所以我们也将在后面学习文件操作的时候再进行深入的学习。
测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202010/source/2.学习PHP中的目录操作.php
参考文档:
https://www.php.net/manual/zh/book.dir.php
关注公众号:【硬核项目经理】获取最新文章
添加微信/QQ好友:【xiaoyuezigonggong/149844827】免费得PHP、项目管理学习资料
知乎、公众号、抖音、头条搜索【硬核项目经理】
B站ID:482780532
学习PHP中的目录操作的更多相关文章
- Java学习笔记七(目录操作)
1.介绍 上一篇博客介绍的是java中经常使用的操作文件的方式,本篇博客着重解说一下,在Java中是怎样来操作目录的.主要是利用的是Java.IO包以下的File类,本篇博客着重解说一下该类的构造函数 ...
- liunx学习(一):linux下目录操作大全
Linux C函数之文件及目录函数(全):http://blog.sina.com.cn/s/blog_695e489c01013ldd.html linux目录操作发:http://www.cnbl ...
- python中OS模块操作文件和目录
在python中执行和操作目录和文件的操作是通过内置的python OS模块封装的函数实现的. 首先导入模块,并查看操作系统的类型: >>> import os os.name # ...
- 【Java EE 学习 33 上】【JQuery样式操作】【JQuery中的Ajax操作】【JQuery中的XML操作】
一.JQuery中样式的操作 1.给id=mover的div采用属性增加样式.one $("#b1").click(function(){ $("#mover" ...
- UNIX环境编程学习笔记(12)——文件I/O之目录操作
lienhua342014-09-18 1 引言 在 UNIX 系统中,目录是一种特殊的文件类型.我们可以使用 open 函数来打开目录,获取文件描述符,然后调用 stat 函数来获取目录的属性信息, ...
- perl学习笔记——目录操作
在目录书中移动 chdir 操作副改变当前的工作目录.它和shell中cd命令类似: chdir ‘/etc’ or die “cannot chdir to /etc:$1”; 注意:工作目录不能更 ...
- Python中的文件和目录操作实现
Python中的文件和目录操作实现 对于文件和目录的处理,虽然可以通过操作系统命令来完成,但是Python语言为了便于开发人员以编程的方式处理相关工作,提供了许多处理文件和目录的内置函数.重要的是,这 ...
- 学习PHP中好玩的Gmagick图像操作扩展的使用
在 PHP 的图像处理领域,要说最出名的 GD 库为什么好,那就是因为它不需要额外安装的别的什么图像处理工具,而且是随 PHP 源码一起发布的,只需要在安装 PHP 的时候添加上编译参数就可以了. G ...
- 【Java EE 学习 32 下】【JQuery】【JQuey中的DOM操作】
一.JQuery中的DOM操作. 什么是DOM:DOM是一中和浏览器.平台.语言无关的接口,使用该接口可以轻松访问页面中所有的标准组件.DOM简称文档对象模型,是Document Oject Mode ...
随机推荐
- spring学习05(代理模式)
8.代理模式 为什么要学习代理模式,因为AOP的底层机制就是动态代理! 代理模式: 静态代理 动态代理 8.1 静态代理 静态代理角色分析 抽象角色 : 一般使用接口或者抽象类来实现 真实角色 : 被 ...
- 【笔记】SVM思想解决回归问题
使用svm思想解决回归问题 使用svm思想解决是如何解决回归问题,其中回归问题的本质就是找一条线,能够最好的拟合数据点 怎么定义拟合就是回归算法的关键,线性回归算法就是让预测的直线的MSE的值最小,对 ...
- docker搭建clickhouse集群
//需要先搭建zookeeper集群.机器1: sudo docker run -d \ --name clickhouse --ulimit nofile=262144:262144 \ -p 81 ...
- 10、二进制安装K8s之部署CoreDNS 和Dashboard
二进制安装K8s之部署CoreDNS 和Dashboard CoreDNS 和Dashboard 的yaml文件在 k8s源代码压缩包里面可以找到对应的配置文件,很多人从网上直接下载使用别人的,会导致 ...
- 04.SpringMVC之用
分析 Spring MVC 是怎么处理请求的.首先分析 HttpServletBean.FrameworkServlet 和 DispatcherServlet 这三个 Servlet 的处理过程,最 ...
- C# 对SQlServer访问的完整类
using System; using System.Collections.Generic; using System.Collections.Specialized; using System.C ...
- 在Java泛型
1,泛型的定义以及存在意义 泛型,即"参数化类型".就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传 ...
- jdbc操作mysql(二):封装
案例四:封装共有操作 封装一个数据库的会话的类 import java.sql.*; public class ConnectionUtil { /** * 获取连接对象的方法,返回一个Connect ...
- 高德地图——2D转换3D
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script ty ...
- [bug]spring项目通过反射测试私有方法时,注入对象异常
背景 遇到问题:在进行Spring单元测试编写时,发现被测方法是一个私有方法,无法直接通过注入对象调用 解决思路:首先想到通过反射获取该私有方法的访问权限,并传入注入对象,最终调用对象的私有方法. 出 ...