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产生随机字符串函数
Dec 06 PHP
php 抽象类的简单应用
Sep 06 PHP
PHP中extract()函数的妙用分析
Jul 11 PHP
PHP中判断变量为空的几种方法小结
Nov 12 PHP
php动态生成函数示例
Mar 21 PHP
Laravel 5框架学习之Blade 简介
Apr 08 PHP
CI框架AR操作(数组形式)实现插入多条sql数据的方法
May 18 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
Oct 31 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
PHP设计模式之单例模式原理与实现方法分析
Apr 25 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
Jul 03 PHP
php写app用的框架整理
Sep 29 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
浅谈PHP Cookie处理函数
2016/06/10 PHP
PHP中isset、empty的用法与区别示例详解
2020/11/05 PHP
javascript 获取图片颜色
2009/04/05 Javascript
Date对象格式化函数代码
2010/07/17 Javascript
在IE和VB中支持png图片透明效果的实现方法(vb源码打包)
2011/04/01 Javascript
ExtJs Excel导出并下载IIS服务器端遇到的问题
2011/09/16 Javascript
ExtJS下书写动态生成的xml(兼容火狐)
2013/04/02 Javascript
js获取当前日期代码适用于网页头部
2013/06/27 Javascript
node.js中的buffer.slice方法使用说明
2014/12/10 Javascript
JavaScript 表单处理实现代码
2015/04/13 Javascript
JQuery显示隐藏页面元素的方法总结
2015/04/16 Javascript
Jquery EasyUI实现treegrid上显示checkbox并取选定值的方法
2016/04/29 Javascript
jQuery滚动插件scrollable.js用法分析
2017/05/25 jQuery
Vue-Router进阶之滚动行为详解
2017/09/13 Javascript
vue2里面ref的具体使用方法
2017/10/27 Javascript
Vue打包后出现一些map文件的解决方法
2018/02/13 Javascript
详解Angular6.0使用路由步骤(共7步)
2018/06/29 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
vue使用pdfjs显示PDF可复制的实现方法
2018/12/14 Javascript
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
[57:31]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第一场 2月1日
2021/03/11 DOTA
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
python实现nao机器人身体躯干和腿部动作操作
2019/04/29 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
2019/12/11 Python
PyCharm中配置PySide2的图文教程
2020/06/18 Python
通过代码简单了解django model序列化作用
2020/11/12 Python
修复iPhone的safari浏览器上submit按钮圆角bug
2012/12/24 HTML / CSS
css3简单练习实现遨游浏览器logo的绘制
2013/01/30 HTML / CSS
美国背景检查、公共记录和人物搜索网站:BeenVerified
2018/02/25 全球购物
澳大利亚窗帘商店:Curtain Wonderland
2019/12/01 全球购物
SQL Server里面什么样的视图才能创建索引
2015/04/17 面试题
客服实习的个人自我鉴定
2013/10/20 职场文书
生物学学生自我评价
2014/01/17 职场文书
大学共青团员个人自我评价
2014/04/16 职场文书
药剂专业毕业生求职信
2014/06/24 职场文书
如何利用python创作字符画
2022/06/25 Python