网站首页 > 博客文章 正文
对于编程语言来说,文件和目录的操作是其最最基础的功能。就像我们日常中最常见的图片上传、文件上传之类的功能,都需要文件和目录操作的支持。今天我们先来简单地学习一下 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
- 上一篇: PHP文件上传(php文件上传下载代码)
- 下一篇: PHP 文件处理详解(php文件内容)
猜你喜欢
- 2024-09-12 世界上最好的编程语言PHP图层裁剪服务搭建详解
- 2024-09-12 php之多级目录下查找文件中是否含有某个字符串功能实现
- 2024-09-12 phpcms v9类别调用方法(php class 调用)
- 2024-09-12 某设备产品漏洞挖掘-从JS文件挖掘RCE
- 2024-09-12 PHP页面缓存简单实现(php页面缓存简单实现方法)
- 2024-09-12 Laravel 创建自己的扩展包 package
- 2024-09-12 php 一步步实现mvc架构——view篇
- 2024-09-12 php写的mysql备份恢复的类(php备份mysql数据库)
- 2024-09-12 29、php类加载器实现(php类自动加载)
- 2024-09-12 轻松搭建基于 Serverless 的 ThinkPHP 应用
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)