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批量生成随机用户名
Jul 10 PHP
php学习之简单计算器实现代码
Jun 09 PHP
如何用phpmyadmin设置mysql数据库用户的权限
Jan 09 PHP
PHP正则表达式之定界符和原子介绍
Oct 05 PHP
ThinkPHP3.2.2的插件控制器功能简述
Jul 09 PHP
php批量添加数据与批量更新数据的实现方法
Dec 16 PHP
php和editplus正则表达式去除空白行
Apr 17 PHP
PHP中创建和验证哈希的简单方法实探
Jul 06 PHP
PHP+Ajax+JS实现多图上传
May 07 PHP
PHP大神的十大优良习惯
Sep 14 PHP
PHP实现统计代码行数小工具
Sep 19 PHP
PHP实现随机发扑克牌
Apr 22 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
《星际争霸重制版》兵种对比图鉴
2020/03/02 星际争霸
星际玩家的三大定律
2020/03/04 星际争霸
40年前的这部特摄片恐龙特级克塞号80后的共同回忆
2020/03/08 日漫
PHPMailer安装方法及简单实例
2008/11/25 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
2013/06/24 PHP
PHP图片处理之图片旋转和图片翻转实例
2014/11/19 PHP
PHP上传文件参考配置大文件上传
2015/12/16 PHP
jQuery+PHP实现图片上传并提交功能
2020/07/27 PHP
js技巧--转义符&quot;\&quot;的妙用
2007/01/09 Javascript
使用Microsoft Ajax Minifier减小JavaScript文件大小的方法
2010/04/01 Javascript
JS中动态添加事件(绑定事件)的代码
2011/01/09 Javascript
jQuery异步加载数据并添加事件示例
2014/08/24 Javascript
基于JavaScript如何制作遮罩层对话框
2016/01/26 Javascript
JavaScript的Backbone.js框架入门学习指引
2016/05/07 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
2016/12/15 Javascript
Vue filters过滤器的使用方法
2017/07/14 Javascript
详解nodejs中express搭建权限管理系统
2017/09/15 NodeJs
vue中路由参数传递可能会遇到的坑
2017/12/07 Javascript
详解webpack 热更新优化
2018/09/13 Javascript
[02:16]DOTA2超级联赛专访Burning 逆袭需要抓住机会
2013/06/24 DOTA
Python对List中的元素排序的方法
2018/04/01 Python
python+unittest+requests实现接口自动化的方法
2018/11/29 Python
Python读写文件基础知识点
2019/06/10 Python
python网络编程 使用UDP、TCP协议收发信息详解
2019/08/29 Python
史上最详细的Python打包成exe文件教程
2021/01/17 Python
全球知名鞋履品牌授权零售商:Journeys
2016/09/17 全球购物
研发工程师的岗位职责
2013/11/18 职场文书
药剂专业个人求职信范文
2014/04/29 职场文书
入党综合考察材料
2014/06/02 职场文书
新教师培训心得体会
2014/09/02 职场文书
常务副县长“四风”个人对照检查材料思想汇报
2014/10/02 职场文书
2014年护士工作总结范文
2014/11/11 职场文书
小学教师2014年度工作总结
2014/12/03 职场文书
正能量励志演讲稿三分钟(范文)
2019/07/11 职场文书
sql server偶发出现死锁的解决方法
2022/04/10 SQL Server
利用Python实现模拟登录知乎
2022/05/25 Python