PHP-目录的基本操作

1.基本文件类型

  File    普通文件,如文本文件、可执行文件。

  Dir   目录文件,比如某个文件夹

  Unknow  未知文件

  在windows中只有上面三种文件类型,如果是linux系统还有下面文件类型

  Block  块设备,比如某个磁盘分区

  Char  字符设备,比如键盘、打印机

  Fifo  管道,用来将数据从一个进程传递到另一个进程

  Link  链接,相当于windows中的快捷方式

  

 使用filetype获得文件的类型

1 <?php
2     /*使用filetype()获取文件类型*/
3 
4     echo filetype(__FILE__);//file
5     echo filetype(__DIR__);//dir
6 ?>

  判断文件类型

1 <?php
2     /*使用filetype()获取文件类型*/
3 
4     echo is_file(__FILE__);//true
5     echo is_dir(__DIR__);//true
6 ?>

 

2.文件的属性

  

 1 <?php
 2     /*file_exist()判断文件是否存在*/
 3     if(file_exists(__FILE__)) echo "文件".__FILE__."存在<br>";
 4     if(file_exists(__DIR__)) echo "目录".__DIR__."存在<br>";
 5 
 6     /*filesize()取得文件的大小,以字节为单位*/
 7     /*注:是取得文件的大小不是目录*/
 8     echo "文件".__FILE__."的大小是".filesize(__FILE__)."字节<br>";
 9 
10     /*is_readable()判断文件是否可读*/
11     if(is_readable(__FILE__)) echo "文件".__FILE__."可读<br>";
12 
13     /*is_writable()判断文件是否可写*/
14     if(is_readable(__FILE__)) echo "文件".__FILE__."可写<br>";
15 
16     /*is_executable()判断文件是否可执行*/
17     if(is_readable(__FILE__)) echo "文件".__FILE__."可执行<br>";
18 
19     date_default_timezone_set('PRC');
20 
21     /*filectime()文件的创建时间*/
22     echo "文件的创建时间为".date('Y/m/d H:i:s',filectime(__FILE__))."<br>";
23 
24     /*filemtime()文件的修改时间*/
25     echo "文件的修改时间为".date('Y/m/d H:i:s',filemtime(__FILE__))."<br>";
26 
27     /*fileatime()文件的最后访问时间*/
28     echo "文件的最后访问时间".date('Y/m/d H:i:s',filectime(__FILE__))."<br>";
29 
30     /*stat()获取文件大部分属性*/
31     print_r(stat(__FILE__));
32 ?>

  注:windows系统下默认是不会更新访问时间的,具体可以参考这里

 

3.目录的基本操作

  路径分隔符

    Linux系统中以'/'做为路径分隔符,像这样E:/xampp/htdocs/test.php

    Windows系统中以'\'作为路径分隔符E:\xampp\htdocs\test.php,但是Windows系统也是支持'/'作为分隔符的。

    所以为了保证程序的可移植性,最好用Linux的写法。

  解析路径 

 1 <?php
 2     /*basename()返回路径中的文件名*/
 3     echo "路径".__FILE__."的文件名是".basename(__FILE__)."<br>";
 4 
 5     /*dirname()返回一个路径中的目录部分*/
 6     echo "路径".__FILE__."的目录名是".dirname(__FILE__)."<br>";
 7 
 8     /*pathinfo()将一个路径中的信息以数组形式返回*/
 9     print_r(pathinfo(__FILE__));
10 ?>

   遍历目录

 1 <?php
 2     /*opendir()打开一个目录,接受一个路径,返回该目录的资源句柄*/
 3     var_dump($dir=opendir(__DIR__));//resource(3) of type (stream)
 4     echo "<br>";
 5 
 6     /*readdir()接受一个资源句柄返回该目录当前指针位置的文件名,并将指针向下移动*/
 7     /*前两个文件名是 . 和 ..表示当前目录和上一级目录*/
 8     
 9     echo readdir($dir)."<br>";//.
10     echo readdir($dir)."<br>";//..
11 
12     /*rewinddir()将目录指针重置到开头出*/
13     rewinddir($dir);
14     echo readdir($dir)."<br>";//.
15 
16     /*closedir()释放资源*/
17     closedir($dir);
18 ?>

   

 1 <?php
 2     /*遍历出目录的结构*/
 3 
 4     function dirlist($dir){
 5         $sdir=opendir($dir);
 6         while ($fname=readdir($sdir)) 
 7         {
 8             echo $fname."<br>";
 9         }
10         closedir($sdir);
11     }
12 
13     dirlist(__DIR__);
14 ?>

  计算目录大小

 1 <?php
 2     /*我们可以用filesize()查看文件的大小*/
 3     /*PHP没有提供统计目录大小的函数,但我们可以通过前面学习的写一个*/
 4 
 5     function dirsize($dir){
 6         $size=0;
 7         if (!$dir_s=opendir($dir)) 
 8         {
 9             return false;
10         }
11         while($file=readdir($dir_s))
12         {
13             if ($file=='.'||$file=='..') 
14             {
15                 continue;
16             }
17             if(is_dir($dir.'/'.$file))
18             {
19                 $size+=dirsize($dir.'/'.$file);
20             }
21             else
22             {
23                 $size+=filesize($dir.'/'.$file);
24             }
25 
26             
27         }
28         return $size;
29     }
30 
31     echo dirsize(__DIR__);
32 ?>

   注:php5表示的最大整数为PHP_INT_MAX,这个数如果等于字节数,那么表示的文件大小基本上等于2GB,所以如果想计算2GB以上的文件,请换PHP7

  复制和删除目录

  

 1 <?php
 2     /*copy()函数用来赋值问价*/
 3     /*将当前目录下的test.php复制到testcookie目录下*/
 4     copy('test.php','./testcookie/test.php');//新的路径名必须存在否则会报错
 5 
 6     /*unlink()删除一个文件*/
 7     unlink('./testcookie/test.php');
 8 
 9     /*创建目录mkdir()*/
10     mkdir('testdir');
11 
12     /*PHP没有复制目录的函数不过我们可以用mkdir()和copy()写一个*/
13     function copydir($sdir,$ddir)
14     {
15         if(is_dir($sdir))
16         {
17             if(file_exists($ddir))
18             {
19                 echo "目的路径已经存在";
20                 return false;
21             }
22             else
23             {
24                 mkdir($ddir);
25                 $dir_handle=opendir($sdir);
26                 while($filename=readdir($dir_handle))
27                 {    
28                     if($filename=="."||$filename=="..") continue;
29                     if(is_dir($sdir."/".$filename))
30                     {
31                         copydir($sdir."/".$filename,$ddir."/".$filename);
32                     }
33                     else
34                     {
35                         copy($sdir."/".$filename,$ddir."/".$filename);
36                     }
37                 }
38 
39                 closedir($dir_handle);
40             }
41         }
42         else
43         {
44             echo "不是目录无法创建";
45             return false;
46         }
47     }
48 
49     
50     /*rmdir()删除目录,该目录必须为空否则删除失败*/
51     //rmdir('testdir');
52 
53     /*用rmdir()和unlink()可以写一个级连删除目录的函数*/
54     function deldir($dir)
55     {
56         if(is_dir($dir))
57         {
58             $dir_handle=opendir($dir);
59             while($filename=readdir($dir_handle))
60             {
61                 if($filename=="."||$filename=="..") continue;
62                 if(is_dir($dir."/".$filename))
63                 {
64                     deldir($dir."/".$filename);
65                 }
66                 else
67                 {
68                     unlink($dir."/".$filename);
69                 }
70 
71             }
72             closedir($dir_handle);
73             rmdir($dir);
74         }
75         else
76         {
77             echo "不是目录";
78             return false;
79         }
80     }
81     deldir('./testcooki');
82 ?>

 

posted @ 2018-01-23 21:14  帕特菛琦  阅读(243)  评论(0编辑  收藏  举报