8.3文件和目录的通用操作
8.3 文件和目录的通用操作
有的函数既能操作文件也能操作目录,有的操作既要操作目录又要操作文件,所以文件和目录的操作有时候并没有明显的界线,本节将介绍一些文件和目录的通用操作。
8.3.1 获取路径中的文件名和目录名
调用函数basename()可以取得一个路径中的文件名部分,语法如下。
string basename(string $path);
参数$path是完整的路径名,该函数返回指定路径$path中的文件名部分。在Windows系统中,可以使用/或\作为目录分隔符,在UNIX系统中,使用/作为目录分隔符。
调用函数dirname()可以取得一个路径中的目录名部分,语法如下。
string dirname(string $path);
参数$path是完整的路径名,该函数返回指定路径$path中的目录名。
代码8-8演示了这两个函数的用法。
代码8-8 使用函数basename()和dirname()获取文件名和目录名8-8.php
01 <?php
02 $path = "/home/prog/php/sayHello.php"; //
完整的包含路径名的文件
03
04 $file_name = basename($path); //
获取完整路径中的文件名
05 $dir_name = dirname($path); //
获取完整路径中的目录名
06
07 echo "
完整路径:".$path;
08 echo "<hr>";
09 echo "<br/>";
10
11 echo "
其中目录名为:".$dir_name; //
输出目录名
12 echo "<br/>";
13 echo "
其中文件名为:".$file_name; //
输出文件名
14 echo "<br/>";
15 ?>
【代码解析】网络上传文件时经常需要判断文件的路径和名称,代码第04~05行很好地演示了获取这两个属性的过程。这段代码的执行结果如图8-10所示。
8.3.2 判断文件或目录是否存在
调用函数file_exists()可以检查指定的文件或目录是否存在,语法如下。
bool file_exists(stirng $filename);
该函数判断由参数$filename指定的文件或目录是否存在,如果存在,函数返回TRUE,否则函数返回FALSE。代码8-9演示了该函数的用法。
代码8-9 判断文件或目录是否存在8-9.php
01 <?php
02 $file = "data.txt"; //
文件名
03 $dir = "info/newdata"; //
目录名
04
05 if(file_exists($file)) //
判断文件是否存在
06 {
07 echo "
当前目录中,文件".$file."
存在";
08 echo "<br/>";
09 }
10 else
11 {
12 echo "
当前目录中,文件".$file."
不存在";
13 echo "<br/>";
14 }
15 echo "<br/>";
16 echo "<hr>";
17 echo "<br/>";
18
19 if(file_exists($dir)) //
判断目录是否存在
20 {
21 echo "
当前目录下,目录".$dir."
存在";
22 echo "<br/>";
23 }
24 else
25 {
26 echo "
当前目录下,目录".$dir."
不存在";
27 echo "<br/>";
28 }
29 ?>
【代码解析】代码第02行定义了一个文件名,第03行定义了一个目录,第05行判断文件是否存在,第19行判断目录是否存在。这段代码的执行结果如图8-11所示。

图8-10 使用PHP函数获取路径中的目录名和文件名

图8-11 使用PHP函数判断文件和目录是否存在
8.3.3 建立目录和删除目录
PHP提供了如下函数在文件系统中建立目录和删除目录,在PHP程序中可以很方便地使用它们。
·函数mkdir($pathname,$mode),用来创建一个目录。参数$pathname指要创建的目录的路径或名称,参数$mode指所建目录的访问权限,它通常是指UNIX系统下的访问权限。如果目录创建成功,函数返回TRUE,否则返回FALSE。
·函数rmdir($pathname),用来删除一个目录。参数$pathname指要删除的目录,但该目录必须是空目录,并且在UNIX下,该目录要有相应的删除权限。如果目录删除成功,函数返回TRUE,否则返回FALSE。
代码8-10演示了这两个函数的用法。
代码8-10 使用函数创建并删除目录8-10.php
01 <?php
02 $dir_name = "tmp_data"; //
一个目录名
03
04 if(mkdir($dir_name)) //
在当前目录下创建目录tmp_data
05 {
06 echo "
目录".$dir_name."
创建成功!";
07
08 //
在目录tmp_data
中创建一个文件tmp.txt
,并向其中写入一些内容
09 if($fp = fopen($dir_name."/tmp.txt","a"))
10 {
11 if(fwrite($fp,"Put Some Contenets into File."))
12 {
13 echo "<hr>";
14 echo "
在目录".$dir_name."
下创建文件tmp.txt";
15 }
16 }
17 }
18 else
19 {
20 echo "
创建目录失败!";
21 exit;
22 }
23 echo "<hr>";
24
25 if(rmdir($dir_name)) //
尝试删除目录tmp_data
26 {
27 echo "
删除目录".$dir_name."
成功!";
28 }
29 else
30 {
31 echo "
删除目录失败!";
32 exit;
33 }
34 ?>
【代码解析】这段代码首先在当前目录下创建名为tmp_data的目录,如果创建成功,则在该目录下创建一个名叫tmp.txt的文件,并向其写入一些内容。接着,程序使用函数rmdir()删除刚刚创建的目录tmp_data,如果前面的文件创建成功,说明目录tmp_data不为空,则调用函数rmdir()删除目录会失败。程序的执行结果如图8-12所示。
说明 读者的演示效果可能与笔者不同,因为如果是XP系统,则全部代码可能顺利运行,如果是Windows 7系统,由于用户控制权限的不同,所以可能输出效果会不同。当然,如果已经存在这个文件或打开了这个文件,也有创建失败的可能。
8.3.4 复制、删除和移动文件
在PHP中,复制、删除和移动文件也可以通过其提供的预定义函数完成。下面列举了用于复制、删除和移动文件的函数。
·函数copy($source,$desc),用来把文件从参数$source指定的位置,复制到由参数$desc指定的位置。如果复制成功,该函数返回TRUE,否则该函数返回FALSE。
·函数unlink($file),用来删除由参数$file指定的文件。如果删除成功,该函数返回TRUE,否则返回FALSE。
·函数rename($oldname,$newname),用来把由参数$oldname指定的文件重命名为由参数$newname指定的名字。这两个参数都可以是一个带文件名的完整路径,从而完成文件从一个目录到另一个目录的移动。
代码8-11演示了这些函数的用法。
代码8-11 使用函数复制并删除文件8-11.php
01 <?php
02 $dir_name = "tmp_data"; //
目录名
03 $new_file = "tmp_new.txt"; //
文件名
04
05 if(!copy($dir_name."/tmp.txt",$new_file)) //
复制文件
06 {
07 echo "Copy
文件tmp.txt
失败";
08 exit;
09 }
10
11 echo "
文件tmp.txt
复制成功";
12 echo "<br/>";
13 echo "<br/>";
14 echo "<hr>";
15 echo "<br/>";
16
17 if(unlink($new_file)) //
删除指定的文件
18 {
19 echo "
文件".$new_file."
删除成功";
20 }
21 else
22 {
23 echo "
文件".$new_file."
删除失败";
24 }
25 ?>
【代码解析】这段代码首先将8.3.3小节由代码8-10创建的目录tmp_data下的文件tmp.txt复制到当前目录下,同时重新命名为tmp_new.txt。然后,使用函数unlink()删除文件tmp_new.txt。如果一切正常,该函数的执行结果如图8-13所示。

图8-12 使用PHP的函数创建和删除目录

图8-13 复制并删除文件
上一篇:8.2常见的文件操作
下一篇:8.4文件的高级操作
