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 ?>