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学习 字符串课件
Jun 15 PHP
php 删除记录同时删除图片文件的实现代码
May 12 PHP
PHP读取文件并可支持远程文件的代码分享
Oct 03 PHP
PHP header()函数使用详细(301、404等错误设置)
Apr 17 PHP
一个PHP针对数字的加密解密类
Mar 20 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
May 12 PHP
PHP遍历数组的方法汇总
Apr 30 PHP
PHP发送短信代码分享
Aug 11 PHP
Apache无法自动跳转却显示目录的解决方法
Nov 30 PHP
PHP实现QQ快速登录的方法
Sep 28 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
Jul 03 PHP
php中try catch捕获异常实例详解
Aug 06 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
国内咖啡文化
2021/03/03 咖啡文化
php网页后退不再出现过期
2007/03/08 PHP
php读取30天之内的根据算法排序的代码
2008/04/06 PHP
基于PHP Socket配置以及实例的详细介绍
2013/06/13 PHP
PHP调用wsdl文件类型的接口代码分享
2014/11/19 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
2016/01/08 PHP
PHP实现动态添加XML中数据的方法
2018/03/30 PHP
Thinkphp 框架配置操作之动态配置、扩展配置及批量配置实例分析
2020/05/15 PHP
jQuery EasyUI API 中文文档 - TreeGrid 树表格使用介绍
2011/11/21 Javascript
js通过地址栏给action传值(中文乱码全是问号)
2013/05/02 Javascript
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
JQuery中绑定事件(bind())和移除事件(unbind())
2015/02/27 Javascript
JavaScript数据库TaffyDB用法实例分析
2015/07/27 Javascript
JS去除空格和换行的正则表达式(推荐)
2016/06/14 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
2016/07/22 Javascript
JS制作适用于手机和电脑的通知信息效果
2016/10/28 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
2017/06/01 jQuery
微信小程序缓存过期时间的使用详情
2019/05/12 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
vue图片上传组件使用详解
2019/12/23 Javascript
用js实现放大镜效果
2020/10/28 Javascript
[02:15]2014DOTA2国际邀请赛 专访LGD.lin小兔子是大腿
2014/07/14 DOTA
python判断一个集合是否包含了另外一个集合中所有项的方法
2015/06/30 Python
Django中传递参数到URLconf的视图函数中的方法
2015/07/18 Python
详解appium+python 启动一个app步骤
2017/12/20 Python
python实现按行分割文件
2019/07/22 Python
Python将string转换到float的实例方法
2019/07/29 Python
简单了解django orm中介模型
2019/07/30 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
使用Keras画神经网络准确性图教程
2020/06/15 Python
Python logging日志模块 配置文件方式
2020/07/12 Python
致标枪运动员广播稿
2014/02/06 职场文书
《鹬蚌相争》教学反思
2014/04/22 职场文书
喋血孤城观后感
2015/06/08 职场文书
2019年警察入党转正申请书最新范文
2019/09/03 职场文书