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


Posted in PHP onSeptember 27, 2014

一、基本文件的操作

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

<?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');
?>

结果:

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

二、目录的操作

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

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');

结果

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

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';

结果:

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

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');

删除成功的提示信息

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

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');
PHP 相关文章推荐
PHP+DBM的同学录程序(1)
Oct 09 PHP
php实现从ftp服务器上下载文件树到本地电脑的程序
Feb 10 PHP
PHP 自定义错误处理函数trigger_error()
Mar 26 PHP
php.ini 配置文件的深入解析
Jun 17 PHP
php实现cookie加密的方法
Mar 10 PHP
php版银联支付接口开发简明教程
Oct 14 PHP
PHP实现简易blog的制作
Oct 24 PHP
Thinkphp5行为使用方法汇总
Dec 21 PHP
php实现等比例压缩图片
Jul 26 PHP
PHP实现微信提现(企业付款到零钱)
Aug 01 PHP
Laravel框架Auth用户认证操作实例分析
Sep 29 PHP
使用PHP开发留言板功能
Nov 19 PHP
Drupal简体中文语言包安装教程
Sep 27 #PHP
PHP常用编译参数中文说明
Sep 27 #PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
Sep 27 #PHP
PHP中的output_buffering详细介绍
Sep 27 #PHP
PHP获取mysql数据表的字段名称和详细信息的方法
Sep 27 #PHP
PHP实现手机号码中间四位用星号(*)隐藏的自定义函数分享
Sep 27 #PHP
PHP会话控制:Session与Cookie详解
Sep 27 #PHP
You might like
如何分别全角和半角以避免乱码
2006/10/09 PHP
php 文件上传实例代码
2012/04/19 PHP
JavaScript获取FCK编辑器信息的具体方法
2013/07/12 Javascript
移动设备web开发首选框架:zeptojs介绍
2015/01/29 Javascript
使用纯javascript实现放大镜效果
2015/03/18 Javascript
javascript作用域链(Scope Chain)用法实例解析
2015/11/30 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
2016/05/21 Javascript
jQuery限制图片大小的方法
2016/05/25 Javascript
ng-options和ng-checked在表单中的高级运用(推荐)
2017/01/21 Javascript
简单谈谈Javascript函数中的arguments
2017/02/09 Javascript
关于Stream和Buffer的相互转换详解
2017/07/26 Javascript
vue服务端渲染的实例代码
2017/08/28 Javascript
Thinkjs3新手入门之如何使用静态资源目录
2017/12/06 Javascript
vue input输入框模糊查询的示例代码
2018/05/22 Javascript
jQuery中常用动画效果函数知识点整理
2018/08/19 jQuery
使用Vuex解决Vue中的身份验证问题
2018/09/28 Javascript
浅析vue中的provide / inject 有什么用处
2019/11/10 Javascript
vue输入框使用模糊搜索功能的实现代码
2020/05/26 Javascript
[04:21]狐狸妈带你到现场 DOTA2 TI中国区预选赛线下赛路线指引
2014/05/22 DOTA
[00:52]玛尔斯技能全介绍
2019/03/06 DOTA
如何在Python中编写并发程序
2016/02/27 Python
python中os模块详解
2016/10/14 Python
一篇文章快速了解Python的GIL
2018/01/12 Python
python使用Pandas库提升项目的运行速度过程详解
2019/07/12 Python
tensor和numpy的互相转换的实现示例
2019/08/02 Python
python求绝对值的三种方法小结
2019/12/04 Python
20行Python代码实现视频字符化功能
2020/04/13 Python
QML实现钟表效果
2020/06/02 Python
python中如何使用虚拟环境
2020/10/14 Python
Python用摘要算法生成token及检验token的示例代码
2020/12/01 Python
利用CSS3实现动态的二级三级菜单效果实例源码
2017/01/04 HTML / CSS
大型主题婚礼活动策划方案
2014/09/15 职场文书
副总经理岗位职责
2015/02/02 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书
python中出现invalid syntax报错的几种原因分析
2022/02/12 Python