PHP文件相关的操作函数——目录操作

时间:2022-05-19 10:00:13

1.有关文件类型的函数

  PHP是以UNIX的文件系统为模型的,因此在Windows系统中我们只能获得“file”、“dir”或者“unknown”三种文件类型。而在UNIX系统中,我们可以获得“block”、“char”、“dir”、“fifo”、“file”、“link”和“unknown”7种类型。

  1.1 filetype()

    作用:获取文件的上传类型

    语法:filetype(filename)

    参数:该函数接受一个文件名作为参数,如果文件不存在将返回FALSE。

    代码示例:

      echo filetype("C:\Users\lenovo\Desktop");    //输出:dir

      echo filetype("C:\Users\lenovo\Desktop/test.txt"); //输出:file

  1.2 is_file():判断给定的文件名是否为一个正常的文件。如果是返回true,否则返回false

    is_dir():判定给定的文件名是否是一个目录,返回结果同上

    is_link():判定给定的文件名是否为一个符号链接,返回结果同上。

2.与文件属性相关的函数

  2.1 file_exists()

    作用:检查文件或目录是否存在

    参数:文件名

    返回值:文件存在返回TRUE,不存在返回FALSE

  2.2 filesize()

    作用:获得文件大小

    参数:文件名

    返回值:返回文件大小的字节数,出错返回FALSE

  2.3 is_readable()

    作用:判定给定文件名是否可读

    参数:文件名

    返回值:如果文件存在且可读则返回TRUE

  2.4 is_writable()

    作用:判断给定文件名是否可写

    参数:文件名

    返回值:如果文件存在且可写则返回TRUE

  2.5 is_executable()

    作用:判断给定文件名是否可执行

    参数:文件名

    返回值:如果文件存在且可执行则返回TRUE

  2.6 filectime()

    作用:获取文件的创建时间

    参数:文件名

    返回值:返回UNIX时间戳格式

  2.7 filemtime()

    作用:获取文件的修改时间

    参数:文件名

    返回值:返回UNIX时间戳格式

  2.8 fileatime()

    作用:获取文件的访问时间

    参数:文件名

    返回值:返回UNIX时间戳格式

  2.9 stat()

    作用:获取文件大部分属性值

    参数:文件名

    返回值:返回关于给定文件有用信息的数组

  2.10 clearstatcache()

    以上函数都需要提供同样的字符串参数,即一个指向文件或目录的字符串型变量。PHP将缓存这些函数的返回信息已提供更快的性能。然而在某些情况下,你可能想清除被缓存的信息。例如,如果在一个脚本中多次检查同一个文件,而该文件在此脚本执行期间有被删除或修改的危险时,需要清除文件状态缓存。可以用该函数来清除PHP缓存的该文件信息。clearstatcache()函数缓存特定文件名的信息,因此只在对同一个文件名进行多次操作,并且需要该文件信息不被缓存时才需要调用它。

  2.11 lstat():功能和stat()函数相同,只是该函数只能作用于一个符号链接,而不是普通的文件

  2.12 fstat():功能和stat()函数相同,只是该函数需要一个资源句柄。

3.与文件目录操作有关的函数

  3.1 解析目录路径

    将目录路径中各个属性分离开通常很有用,如末尾的扩展名、目录部分和基本名。

    3.1.1 basename()

      作用:返回路径中的的文件部分

      语法:string basename(string path[,string suffix])

      参数:该函数给出一个包含有指向一个文件的全路径的字符串,第二个参数是可选参数,规定文件的扩展名。如果提供了则不会输出这个扩展名。

      返回值:本函数返回基本的文件名

      示例代码:

        $path = "C:\Users\lenovo\Desktop/test.txt";
        echo basename($path);     //输出:test.txt

        echo basename($path,".txt");  //输出:test

    3.1.2 dirname()

      作用:返回去掉文件名的目录名

      语法:striing dirname(string path)

      参数:该函数只有一个参数,给出一个包含有指向一个文件的全路径的字符串

      返回值:返回去掉文件名后的目录名

      示例代码:

        $path = "C:\Users\lenovo\Desktop/test.txt";
        echo dirname($path);        //输出:C:\Users\lenovo\Desktop

    3.1.3 pathinfo()

      作用:返回路径信息

      语法:pathinfo(path,options)

      返回值:返回一个关联数组,其中包括指定路径中的目录名、基本名和扩展名三个部分,分别通过数组键dirname、basename和extension来引用。

      示例代码:

        $path = "C:\Users\lenovo\Desktop/test.txt";
        var_dump(pathinfo($path));

        //输出:array

              'dirname' => string 'C:\Users\lenovo\Desktop' (length=23)

              'basename' => string 'test.txt' (length=8) '

              extension' => string 'txt' (length=3) 'filename' => string 'test' (length=4)

  3.2 遍历目录

    取得一个目录下的文件和子目录,就需要用到opendir()函数、readdir()函数、closedir()函数和rewinddir()函数

    3.2.1 opendir():用于打开指定目录,接受一个目录的路径及目录名作为参数,函数返回值为可供其他目录函数使用的目录句柄(资源类型)。如果该目录不存在或者没有访问权限,则返回FALSE

    3.2.2 readdir():用于读取指定目录,接受已经用opendir()函数打开的可操作目录句柄作为参数,函数返回当前目录指针位置的一个文件名,并将目录指针向后移动一位。当指针位于目录的结尾时,因为没有文件存在则返回FALSE。

    3.2.3 closedir():关闭指定目录,接受已经用opendir()函数打开的可操作目录句柄作为参数。函数无返回值,运行后将关闭打开的目录。

    3.2.4 rewinddir():倒回目录句柄,接受已经用opendir()函数打开的可操作目录句柄作为参数。将目录指针重置目录到开始处,即倒回目录的开头。

    示例代码:

      $dirname = 'C:\Users\lenovo\Desktop';
      $dir_handle = opendir($dirname);
      while($file = readdir($dir_handle))
      {
          $dirFile = $dirname."/".$file;
          echo $file." ".filesize($dirFile)." ".filetype($dirFile);
          echo "<br>";
      }
      closedir($dir_handle);

  3.3 统计目录大小

    PHP目前没有提供目录总大小的标准函数,因此我们要自定义一个函数来完成这个任务。首先要考虑计算的目录中有没有包含其他子目录的情况,如果没有子目录,目录下的所有文件的大小相加后的总和就是这个目录的大小。如果包含子目录,就按照这个方法再计算一下子目录的大小。使用递归函数最适合此项任务。代码详见P351

  3.4 建立和删除目录

    3.4.1 mkdir()

      该函数用于建立一个新目录,详情访问:http://www.w3school.com.cn/php/func_filesystem_mkdir.asp

    3.4.2 rmdir()

      该函数只能删除一个空目录并且目录必须存在。如果是非空的目录就需要先进入到目录中,使用unlink()函数将目录中的每个文件都删除掉,再回来将这个空目录删除。如果目录中还存在子目录,而且子目录也非空,就要使用递归的方法了。详细代码见P352

  3.5 复制目录

    虽然复制一个目录是文件操作的基本功能。但PHP中也没有给出特定的函数,同样需要自定义一个递归函数实现。要复制一个包含多级子目录的目录,将涉及文件的复制、目录创建等操作,复制一个文件可以通过PHP提供的copy()函数完成,创建目录可以使用mkdir()函数。定义函数时,首先对源目录进行遍历,如果遇到的是普通文件,直接使用copy()函数进行复制。如果遍历是遇到一个目录,则必须建立该目录,然后再对该目录下的文件进行复制操作,如果还有子目录,则使用递归重复操作,最终将整个目录复制完成、自定义的递归函数复制目录代码见P352