11.2 目录操作
在PHP中,利用相关函数可以实现对目录的操作。常见的目录操作函数的使用方法和技巧如下。
1.string getcwd ( void )
该函数主要是获取当前的工作目录,返回的是字符串。下面举例说明此函数的使用方法。
【例11.3】(实例文件:ch12\11.4.php)
<html> <head> <title> 获取当前工作目录</title> </head> <body> <?php $d1=getcwd(); //获取当前路径 echo getcwd(); //输出当前目录 ?> </body> </html>
运行结果如图11-5所示。
2.array scandir ( string directory [, int sorting_order])
返回一个array,包含有directory中的文件和目录。如果directory不是一个目录,则返回布尔值FALSE,并产生一条E_WARNING级别的错误。默认情况下,返回值是按照字母顺序升序排列的。如果使用了可选参数sorting_order(设为1),则按照字母顺序降序排列。
下面举例说明此函数的使用方法。
【例11.4】(实例文件:ch12\11.5.php)
<html> <head> <title> 获取当前工作目录中的文件和目录</title> </head> <body> <?php $dir='d:/ch12'; //定义指定的目录 $files1 = scandir($dir); //列出指定目录中文件和目录 $files2 = scandir($dir, 1); print_r($files1); //输出指定目录中文件和目录 print_r($files2); ?> </body> </html>
运行结果如图11-6所示。
3.new dir(string directory)
此函数模仿面向对象机制,将指定的目录名转换为一个对象并返回。
class dir { dir ( string directory) string path resource handle string read ( void ) void rewind ( void ) void close ( void ) }
其中,handle属性含义为目录句柄,path属性的含义为打开目录的路径,函数read(void)含义为读取目录,函数rewind (void )含义为复位目录,函数close ( void )含义为关闭目录。
下面举例说明此函数的使用方法。
【例11.5】(实例文件:ch12\11.6.php)
<html> <head> <title> 将目录转换为对象</title> </head> <body> <?php $d2 = dir("d:/ch12"); echo "Handle: ".$d2->handle."<br>\n"; echo "Path: ".$d2->path."<br>\n"; while (false !== ($entry = $d2->read())) { echo $entry."<br>\n"; } $d2->close(); ?> </body> </html>
运行结果如图11-7所示。
4.chdir(string directory)
此函数将PHP的当前目录改为directory。若成功则返回TRUE,若失败则返回FALSE。下面举例说明此函数的使用方法。
【例11.6】(实例文件:ch12\11.7.php)
<html> <head> <title> 将当前目录修改directory</title> </head> <body> <?php if(chdir("d:/ch12")){ echo "当前目录更改为:d:/ch12<br>"; }else{ echo "当前目录更改失败了"; } ?> </body> </html>
运行结果如图11-8所示。
5.void closedir ( resource dir_handle)
此函数主要是关闭由dir_handle指定的目录流,另外目录流必须之前被opendir()所打开。
6.resource opendir( string path)
此函数返回一个目录句柄。其中path为要打开的目录路径。如果path不是一个合法的目录或者因为权限限制或文件系统错误而不能打开目录,返回FALSE并产生一个E_WARNING级别的PHP错误信息。如果不想输出错误,可以在opendir()前面加上“@”符号。
【例11.7】(实例文件:ch12\11.8.php)
<html> <head> <title> </title> </head> <body> <?php $dir = "d:/ch12/"; // 打开一个目录,然后读取目录中的内容 if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { print "filename: $file : filetype: " . filetype($dir . $file) . "\n"; } closedir($dh); } } ?> </body> </html>
运行结果如图11-9所示。
其中,is_dir()函数主要是判断给定文件名是否是一个目录,readdir()函数从目录句柄中读取条目,closedir()函数关闭目录句柄。
7.string readdir ( resource dir_handle)
该函数主要是返回目录中下一个文件的文件名。文件名以在文件系统中的排序返回。
【例11.8】(实例文件:ch12\11.9.php)
<html> <head> <title> </title> </head> <body> <?php // 注意在 4.0.0-RC2 之前不存在 !== 运算符 if ($handle = opendir('d:/ch12')) { echo "Directory handle: $handle\n"; echo "Files:\n"; /* 这是正确地遍历目录方法 */ while (false !== ($file = readdir($handle))) { echo "$file\n"; } closedir($handle); } ?> </body> </html>
运行结果如图11-10所示。
提 示
在遍历目录时,有的读者会经常写出下面错误的方法。
/* 这是错误的遍历目录的方法 */ while ($file = readdir($handle)) { echo "$file\n"; }