学习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 ...
随机推荐
- python3+telnetlib实现简单自动测试
1 telnetlib介绍 1.1 简介 官方介绍文档:telnetlib -- Telnet 客户端 - Python 3.9.6 文档 telnetlib 模块提供一个实现Telnet协议的类 T ...
- bootstrap.yaml和application.yaml的区别
bootstrap.yaml 配置一些引导系统启动的参数,这些参数一旦指定后就不会变动了.比如程序的端口号,配置中心的地址等. application.yaml 应用级别的参数配置,可能会根据业务需求 ...
- 早产的《HelloGitHub》第 65 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这里有实战项目.入门教程.黑科技.开源书籍.大厂开源项目等,涵盖多种编程语言 Pyt ...
- 【mysql】mysql逻辑框架简介及show profile说明
1.mysql逻辑框架简介 和其它数据库相比,MySQL 有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用.主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数 ...
- C# volatile 的使用
class Program { private static volatile bool bChanged; static void Main(string[] args) { Thread t1 = ...
- java实用资料
1.怎么构造一个线程安全的hashmap?用reentrantreadwritelock2.线程是怎么处理二个以上的对象同时处理一个全局变量 3.读文件为啥不用字符流 4.请求鉴定,各种错误码502- ...
- mfc HackerTools监控键盘按键
string GetKey(int Key) { string KeyString = ""; //判断符号输入 const int KeyPressMask = 0x800000 ...
- 【springcloud】Eureka服务注册中心搭建
转自:https://blog.csdn.net/pengjunlee/article/details/86538997 Spring Cloud是一系列框架的集合,它利用Spring Boot的开发 ...
- Spring详解------概述
1.什么是 Spring ? Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2E ...
- jq的常用事件及其案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...