文件目录管理的一些相关操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/HackQ_sxj/article/details/82149577

  近日学习php语言,学习到了文件系统管理,在这里做一下记录。

1.显示文件的相关属性:

<?php
           function getFilePro($fileName){
               if(!file_exists($fileName)){
                   echo "目标文件不存在!!<br>";
                   return;
               }
               if(is_file($fileName)){
                   echo $fileName."是一个文件。<br>";
               }
               if(is_dir($fileName))
                   echo $fileName."是一个目录<br>";
               echo "文件型态:".getFileType($fileName)."<br>";
               echo "文件大小:".getFileSize(filesize($fileName))."<br>";
               if(is_readable($fileName))
                   echo "文件可读<br>";
               if(is_writable($fileName))
                   echo "文件可写<br>";
               if(is_executable($fileName))
                   echo "文件可执行<br>";
               echo "文件建立时间:".date("Y年m月j日", filectime($fileName))."<br>";
               echo "文件最后更动时间:".date("Y年m月j日", filemtime($fileName))."<br>";
               echo "文件最后打开时间:".date("Y年m月j日", fileatime($fileName))."<br>";
           }
           function getFileType($fileName){
               switch(fileType($fileName)){
                   case 'file': $type = "普通文件"; break;
                   case 'dir': $type = "目录"; break;
                   default; $type = "未检测到类型";
               }
               return $type;
           }
           function getFileSize($bytes){
               if($bytes >= pow(2,40)){
                   $return = round($bytes/pow(1024, 4), 2);
                   $suffix = "TB";
               }else if($bytes >= pow(2,30)){
                   $return = round($bytes/pow(1024, 3), 2);
                   $suffix = "GB";
               }else if($bytes >= pow(2,20)){
                   $return = round($bytes/pow(1024, 2), 2);
                   $suffix = "MB";
               }else if($bytes >= pow(2,10)){
                   $return = round($bytes/pow(1024, 1), 2);
                   $suffix = "KB";
               }else{
                   $return = $bytes;
                   $suffix = "Byte";
               }
               return $return." ".$suffix;
           }
           getFilePro("test.php");//输入一个当前目录的可执行文件
        ?>

2.遍历目录函数

<?php
   $num = 0;
        $dirname = 'F:/../test.php';//输入一个文件路径,如: F:/../../test.php
        $dir_handle = opendir($dirname);
        echo '<table border ="0" align="center" width="600" cellspacing="0" cellpadding="0">';
        echo '<caption><h2>目录'.$dirname.'下面内容</h2></caption>';
        echo '<tr align="left" bgcolor="#cccccc">';
        echo '<th>文件名</th><th>文件大小</th><th>文件类型</th><th>修改时间</th></tr>';
        while($file = readdir($dir_handle)){
            $dirFile = $dirname."/".$file;
            $bgcolor = $num++%2==0?'#FFFFFF':'#CCCCCC';
            echo '<tr bgcolor='.$bgcolor.'>';
            echo '<td>'.$file.'</td>';
            echo '<td>'.filesize($dirFile).'</td>';
            echo '<td>'.filetype($dirFile).'</td>';
            echo '<td>'.date("Y/n/t", filemtime($dirFile)).'</td>';
            echo '</tr>';
        }
        echo '</table>';
        closedir($dir_handle);
        echo '在<b>'.$dirname.'</b>目录下的子目录和文件共有<b>'.$num.'</b>个';
?>

3.统计目录大小

<?php
   function dirSize($dirname){
            $dir_size = 0;
            if($dir_handle = @opendir($dirname)){ //用于判断该路径是否可以打开;@是用于忽略报错信息,使程序继续执行。
                while($filename = readdir($dir_handle)){
                    if($filename != "."&&$filename!=".."){//排除两个特殊的目录
                        $subFile = $dirname."/".$filename;
                        if(is_dir($subFile)) //若为目录,递归调用自身函数,求子目录大小
                            $dir_size += dirSize($subFile);
                        if(is_file($subFile))//若为文件,求出文件的大小并进行累加
                            $dir_size += filesize($subFile);
                    }
                }
                closedir($dir_handle);
                return $dir_size;
            }
        }
        $dir_size = dirSize("");//输入,可执行的路径
        echo round($dir_size/pow(1024,1),2)."KB";
?>

4.建立和删除目录

php中使用mkdir()函数只需传入一个目录名即可很容易的建立一个新目录,但是用删除目录函数rmdir()则更为复杂,其只能删除一个空目录且空目录必须存在,否则需要先将目录清空。具体实现如下:

<?php
           function delDir($directory){
               if(file_exists($directory)){
                   if($dir_handle=@opendir($directory)){
                       while($filename = readdir($dir_handle)){
                           if($filename != "."&&$filename != ".."){
                               $subFile = $directory."/".$filename;
                               if(is_dir($subFile))
                                   delDir ($subFile);
                               if(is_file($subFile))
                                   unlink ($subFile);
                           }
                       }
                       closedir($dir_handle);
                       rmdir($directory);
                   }
               }
           }
           delDir("");//输入要删除的目录路径
        ?>

5.复制目录

<?php
           function copyDir($dirSrc, $dirTo){
               if(is_file($dirTo)){
                   echo "目标不是目录不能创建";
                   return;
               }
               if(!file_exists($dirTo)){
                   mkdir($dirTo);
               }
               if($dir_handle = @opendir($dirSrc)){
                   while($filename = readdir($dir_handle)){
                       if($filename != "."&&$filename != ".."){
                           $subSrcFile = $dirSrc."/".$filename;
                           $subToFile = $dirTo."/".$filename;
                           if(is_dir($subSrcFile))
                               copyDir ($subSrcFile, $subToFile);
                           if(is_file($subSrcFile))
                               copy($subSrcFile, $subToFile);
                       }
                   }
                   closedir($dir_handle);
               }
           }
           copyDir("", "");//第一个为原目录路径 第二个为复制目标目录路径
        ?>

猜你喜欢

转载自blog.csdn.net/HackQ_sxj/article/details/82149577