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 相关文章推荐
第六节--访问属性和方法
Nov 16 PHP
根据中文裁减字符串函数的php代码
Dec 03 PHP
php控制文件下载速度的方法
Mar 24 PHP
PHP提高编程效率的20个要点
Sep 23 PHP
实例详解PHP中html word 互转的方法
Jan 28 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
Dec 29 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
Mar 28 PHP
php使用str_replace替换多维数组的实现方法分析
Jun 15 PHP
ThinkPHP5框架缓存查询操作分析
May 30 PHP
PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析
Jun 12 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
Aug 03 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
Oct 17 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 和 MySQL 基础教程(四)
2006/10/09 PHP
php 无限级 SelectTree 类
2009/05/19 PHP
php中截取中文字符串的代码小结
2011/07/17 PHP
分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
2015/12/01 PHP
详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
2017/10/13 PHP
PHP基于array_unique实现二维数组去重
2020/07/14 PHP
一个JavaScript继承的实现
2006/10/24 Javascript
爱恋千雪-US-AscII加密解密工具(网页加密)下载
2007/06/06 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
2014/01/07 Javascript
CSS3,HTML5和jQuery搜索框集锦
2014/12/02 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
JavaScript实现多个重叠层点击切换效果的方法
2015/04/24 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
2016/02/18 Javascript
jQuery EasyUI API 中文帮助文档和扩展实例
2016/08/01 Javascript
JavaScript使用forEach()与jQuery使用each遍历数组时return false 的区别
2016/08/26 Javascript
KnockoutJS 3.X API 第四章之数据控制流with绑定
2016/10/10 Javascript
JS实现图片高斯模糊切换效果的焦点图实例
2017/01/21 Javascript
Bootstrap组合上、下拉框简单实现代码
2017/03/06 Javascript
jQuery实现table表格checkbox全选的方法分析
2018/07/04 jQuery
js中怎么判断两个字符串相等的实例
2019/01/17 Javascript
通过Python爬虫代理IP快速增加博客阅读量
2016/12/14 Python
详解将Django部署到Centos7全攻略
2018/09/26 Python
numpy数组广播的机制
2019/07/12 Python
django自带调试服务器的使用详解
2019/08/29 Python
通过Python编写一个简单登录功能过程解析
2019/09/04 Python
使用K.function()调试keras操作
2020/06/17 Python
植物选择:Botanic Choice
2017/02/15 全球购物
澳大利亚儿童和婴儿产品在线商店:Lime Tree Kids
2017/10/05 全球购物
Booking.com西班牙:全球酒店预订
2018/03/30 全球购物
宝拉珍选英国官网:Paula’s Choice英国
2019/05/29 全球购物
市场营销大学生职业规划书
2014/02/25 职场文书
学雷锋感言
2015/08/03 职场文书
UNION CREATIVE《Re:从零开始的异世界生活》雷姆手办
2022/03/20 日漫
解决xampp安装后Apache无法启动
2022/03/21 Servers
Python数据结构之队列详解
2022/03/21 Python
python神经网络 使用Keras构建RNN训练
2022/05/04 Python