对于一门编程语言来说,对文件和目录的操作是其最基本的功能。我们日常生活中最常见的图片上传、文件上传等功能,都需要文件和目录操作的支持。今天我们先简单学习一下PHP中关于目录操作的一些类和函数。
目录分隔符和路径分隔符
我们先来看两个常量,分别是目录和路径的分隔符。
echo DIRECTORY_SEPARATOR, PHP_EOL; // /echo PATH_SEPARATOR, PHP_EOL; // :
DIRECTORY_SEPARATOR常量的输出在Linux系统中是斜杠/也就是说,它根据当前操作系统确定使用哪个目录分隔符。PATH_SEPARATOR是环境路径的分隔符。在Linux系统中,输出是:,实际上就像我们定义的系统环境变量一样。在Linux系统中,当我们查看或添加或修改path环境变量时,我们使用:来分隔。
目录操作
既然有了对象的概念,就意味着目录相关的操作实际上有两种形式:面向对象和面向过程。我们先来看看面向对象是如何操作的。
$directory = dir('../');while(($dir = $directory->read())!== false){ echo $dir, PHP_EOL;}// .// ..// 1.PHP中的日期相关函数(三).md// source
我们使用dir()函数返回一个目录对象。这里需要注意的是,目录对象只能由dir()函数获取,实例不能由new方法生成。获得目录对象后,我们可以通过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()方法用于关闭当前目录对象句柄。
面向过程的目录操作
接下来,让我们看看如何使用面向过程的方法获取目录的内容。我们还查看相同的目录,并输出与上面的面向对象方法相同的信息。
$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
函数的作用是:判断一个给定的路径是否是一个目录。相信很多同学都用过这个功能。Opendir()是打开一个给定路径的目录句柄,实际上类似于dir()函数获取一个目录对象。但是,需要注意的是,opendir()函数返回的是一个句柄资源对象,而不是一个目录对象。然后我们可以使用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://www.chinashuhua.cn/24/651479.html