PHP常用技术文之文件操作和目录操作总结


  本文标签:PHP,文件操作,目录操作

一、基本文件的操作

文件的基本操作有:文件判断、目录判断、文件大小、读写性判断、存在性判断及文件时间等

<?php
   header("content-type","text/html;charset=utf-8");
 /*
 *声明一个函数,传入文件名获取文件属性
 *@param string $fileName 文件名称
 */
 function getFilePro($fileName)
 {
   if(!file_exists($fileName))
   {
     echo 文件不存在<br/>;
     return;
   }
   /*是否是普通文件*/
   if(is_file($fileName))
   {
     echo $fileName.是一个文件<br/>;
   }
   /*是否是目录*/
   if(is_dir($fileName))
   {
     echo $fileName.是一个目录;
   }
   /*输出文件的型态*/
   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/>;
 }

 /*
 *声明一个函数,返回文件类型
 *@param string $fileName 文件名称
 */
 function getFileType($fileName)
 {
   $type = ;
   switch(filetype($fileName))
   {
     case file:$type .= 普通文件;break;
     case dir:$type .= 目录文件;break;
     case block:$type .= 块设备文件;break;
     case char:$type .= 字符设备文件;break;
     case filo:$type .= 管道文件;break;
     case link:$type .= 符号链接;break;
     case unknown:$type .= 未知文件;break;
     default:
   }
   return $type;
 }

 /*
 *声明一个函数,返回文件大小
 *@param int $bytes 文件字节数
 */
 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 = B;
   }
  return $return." ".$suffix;
}

 /*调用函数,传入test目录下的test.txt文件*/
 getFilePro(./test/div.html);
?>

结果:

二、目录的操作

目录的操作有:遍历目录、删除、复制、大小统计等

1、遍历目录

 /*
 *遍历目录
 *@param string $dirName 目录名
 */
 function findDir($dirName)
 {
   $num = 0; /*统计子文件个数*/
   $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>个子文件;
 }
 /*传递当前目录下的test目录*/
 findDir(./test);

结果

2、统计目录大小

 /*
 *统计目录大小
 *@param string $dirName 目录名
 *@return double
 */

function dirSize($dirName)
{
   $dir_size = 0;
   if($dir_handle = @opendir($dirName))
   {
     while ($fileName = readdir($dir_handle))
     {
       /*排除两个特殊目录*/
       if($fileName != . && $fileName != ..)
       {
         $subFile = $dirName./.$fileName;
         if(is_file($subFile))
         {
           $dir_size += filesize($subFile);
         }
         if(is_dir($subFile))
         {
           $dir_size += dirSize($subFile);
         }
       }
     }
     closedir($dir_handle);
     return $dir_size;
   }
 }
 /*传递当前目录下的test目录*/
 $dir_size = dirSize(./test);
 echo ./test目录文件大小是:.round($dir_size / pow(1024,1),2).KB;

结果:

3、删除目录

/*
*删除目录
*@param string $dirName 目录名
 */
 function delDir($dirName)
 {
   /*php中的mkdir函数就可以创建目录*/
   if(file_exists($dirName))
   {
     if($dir_handle = @opendir($dirName))
     {
       while ($fileName = readdir($dir_handle))
       {
         /*排除两个特殊目录*/
         if($fileName != . && $fileName != ..)
         {
           $subFile = $dirName./.$fileName;
           if(is_file($subFile))
           {
             unlink($subFile);
           }
           if(is_dir($subFile))
           {
             delDir($subFile);
           }
         }
       }
       closedir($dir_handle);
       rmdir($dirName);
       return $dirName.目录已经删除;
     }
   }
 }
 /*传递test目录的副本test1*/
 echo delDir(./test1);
 

删除成功的提示信息

4、复制目录

 /*
 *复制目录
 *@param string $dirSrc 原目录名
 *@param string $dirTo 目标目录名
 */
 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_file($subSrcFile))
         {
           copy($subSrcFile,$subToFile);
         }
         if(is_dir($subSrcFile))
         {
           copyDir($subSrcFile,$subToFile);
         }
       }
     }
     closedir($dir_handle);
     return $dirSrc.目录已经复制到.$dirTo.目录;
   }
 }
 echo copyDir(./test,../testcopy);