文章教程

8.1常见的目录操作

9/17/2020 9:31:19 PM 人评论 次浏览

8.1 常见的目录操作

目录是计算机文件系统的重要组成部分,可以将其看成是一种特殊的文件。本节将介绍一些和目录操作有关的PHP内置函数。

8.1.1 打开和关闭目录

要完成对目录的操作,首先要获取操作的目录句柄,即打开一个目录。所谓句柄,读者可以将其理解成目录的别名,或者理解成句柄代表的就是目录本身。PHP提供函数opendir()完成打开目录的操作,该函数的语法如下。


$dh = opendir(string $path);

参数$path是要打开的目录。如果处理成功,函数返回目录的句柄,否则函数返回FALSE。如果$path不是一个合法的目录或因为权限、文件系统等错误而无法打开目录,该函数也会返回FALSE。

对一个目录的操作结束之后,需要关闭已打开的目录,即释放操作目录时所占用的资源。PHP提供了函数closedir()完成关闭目录的操作,该函数的语法如下。


void closedir($dh);

该函数用于关闭由函数opendir()打开的目录句柄$dh,没有返回值。这两个函数的应用演示将在下小节举例。

8.1.2 获取目录中下一个文件的文件名

使用函数readdir()可以获取目录中下一个文件的文件名。该函数的语法如下。


string readdir($dh);

参数$dh是由函数opendir()打开的目录句柄,该函数返回这个句柄所指目录中的文件名,如果失败,返回FALSE。代码8-1演示了该函数的用法,同时也演示了如何使用opendir()打开目录和如何使用colsedir()关闭目录。

代码8-1 使用函数opendir()、readdir()和closedir()处理目录8-1.php


     01 <?php
     02 $dir = "D:\files";
     03 
     04 if($dh = opendir($dir))         //
打开目录$dir
,并将目录句柄赋给变量$dh
     05 {
     06     while(($file_name = readdir($dh)) !== FALSE)        
                                        //
通过while
循环,使用函数readdir()
获取文件名
     07     {
     08         echo "file name: ".$file_name;
     09         echo "<br/>";
     10         echo "<br/>";
     11     }
     12 
     13     closedir($dh);              //
处理完成后,关闭目录句柄$dh
     14 }
     15 ?>

【代码解析】代码第04行打开指定的目录,第13行不要忘记关闭打开的目录。第06~11行通过一个while语句。循环输出了指定目录中的文件。假如目录“D:\files”下的内容如图8-1所示,那么代码8-1的执行结果如图8-2所示。

图8-1 目录结构示意图

图8-2 使用readdir()获取目录中的文件名

8.1.3 列出某一目录下的所有文件

除了使用函数readdir()可以获取目录下的文件名之外,函数scandir()也可以列出指定目录中的文件和目录,该函数是PHP5新增的函数。它的语法如下。


array scandir(string $directory);

参数$directory是指定的目录,函数返回值是一个含有文件名的数组,如果失败,函数返回FALSE。如果参数$directory不是一个目录,函数也会返回FALSE。该函数还有一个常用的可选参数作为第2个参数,用来为文件名做排序。代码8-2演示了该函数的用法。

代码8-2 使用函数scandir()列出目录下所有文件8-2.php


     01 <?php
     02 $dir = "D:\files";                              //
指定路径
     03 
     04 $file_list1 = scandir($dir);
     05 //
向函数scandir
传入第2
个参数,如果第2
个参数为1
,表示按字母降序排列文件名
     06 $file_list2 = scandir($dir,1);
     07 
     08 echo "<pre>";                                   //
格式化输出
     09 print_r($file_list1);
     10 print_r($file_list2);
     11 ?>

【代码解析】这段代码的执行结果如图8-3所示。从程序的执行结果可以看出,目录“D:\files”下所有文件(含目录)的名称都被存放在数组中,这些文件名可以按不同的排序方式列出,第06行代码表示降序排列。

8.1.4 获取和改变PHP的当前工作目录

PHP提供了以下两个函数,分别完成获取和更改PHP当前工作目录的功能。

·getcwd():返回当前工作目录,如果失败返回FALSE。该函数不需要传入参数。

·chdir():改变PHP的当前工作目录,处理成功该函数返回TRUE,否则返回FALSE。

代码8-3演示了这两个函数的用法。

代码8-3 获取和改变PHP的工作目录8-3.php


     01 <?php
     02 echo "PHP
当前的工作目录:";
     03 
     04 echo "<br/>";
     05 echo getcwd();                                  //
返回当前目录
     06 echo "<br/>";
     07 
     08 chdir("dir_test");                              //
改变工作目录至当前目录的dir_test
目录下
     09 
     10 echo "<br/>";
     11 echo "
改变工作目录后,工作目录变为:";
     12 echo "<br/>";
     13 
     14 echo getcwd();                                  //
返回当前目录
     15 ?>

【代码解析】代码第05行首先输出当前操作的目录,第08行更改当前目录,然后再用第14行输出改变后的当前目录。这段代码的执行结果如图8-4所示。

图8-3 使用scandir()列出目录下所有文件

图8-4 获取和改变PHP当前的工作目录

8.1.5 从目录句柄中读取条目

使用readdir()函数可以从目录句柄中读取下一个文件的文件名,配合while循环可以实现对目录的遍历,代码如下。


     <?php
         $dir = "html";
         $handle = opendir($dir);
         if ($handle != false) {
                 echo '
本目录包含:<br>';
                 /* 
这是正确的遍历目录方法 */
                 while(false !== ($file = readdir($handle))){
                         echo $file.
’<br>
’;
                 }
                 closedir($handle);
         }else{
                 echo "
打开目录错误!";
         }
     ?>

使用readdir()函数时,要注意以下问题。

·本例中的chdir()将当前目录更改为“html”。

·成功返回TRUE,失败将返回FALSE。

·上例展示的是一个正确的遍历目录的方式,它包括句柄的获取,读取目录和文件的错误控制(体现在while后边的括号内)及关闭句柄。正确遍历目录的方式,三个条件缺一不可。

8.1.6 关闭目录句柄

在使用完opendir()打开的目录句柄后,应使用closedir()进行关闭,以节省服务器资源,代码如下。


     <?php
     $dir = "html";
     //
检查$dir
是否为目录
     if(is_dir($dir)){
           if($dir_handle = opendir($dir)){
                   $directory = readdir($dir_handle);
                   closedir($dir_handle);
           }
     }
     ?>

在使用closedir()关闭目录句柄前,应该确认这个句柄是有效的目录句柄,本小节的代码就是一个很好的例子。

教程类别