学习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 ...
随机推荐
- Note about Cobertura
Workflow of Unit Test without Cobertura compile source code; compile test code; run unit test; Workf ...
- SIM900A—基础指令
文章目录 1.ATE指令设置回显 2.ATQ指令设置返回 3.ATV指令设置返回格式 4.AT+CFUN设置模块功能 5.AT+IPR设置波特率 6.AT+CMEE设置上报错误格式 7.各种码(IME ...
- NPM使用方法
什么是npm npm是nodejs的包管理器,在当今工程化前端开发过程中,npm包起着举足轻重的作用. 安装npm 作为nodejs的包管理器,npm随着nodejs一起安装的.通常情况下,当我们安装 ...
- javascript,html,正则表达式,邮箱密码验证
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- Linux 系统下10个查看网络与监听的命令
下面列出来的10个基础的每个linux用户都应该知道的网络和监控命令.网络和监控命令类似于这些: hostname, ping, ifconfig, iwconfig, netstat, nslook ...
- mzy,struts学习(二):struts.xml的配置
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "- ...
- 单例模式-案例Runtime
package d.create_type_single; import java.io.IOException; /** * Runtime类就是使用的单例:并且是饿汉式 * (原因考虑是因为:多线 ...
- VS code快速创建vue模板
忘记了.vue文件的格式或者不想手动敲那段模板代码怎么办?VS code快速创建vue模板帮你偷个小懒 第一步:新建模板并保存 打开 VS code,依次点击 file > Preference ...
- WPF路由事件
这节讲一下WPF中的路由事件(Routed Event). [什么是事件] 在了解路由事件前,我们应先来了解一下什么是事件(Event). 在Windows系统中,像鼠标单击,双击,移动这样 ...
- python内置函数:sorted中的参数key
x.sort和sorted函数中参数key的使用 介绍 python中,列表自带了排序函数sort >>> l = [1, 3, 2] >>> l.sort() & ...