遍历指定目录,并存储目录内所有文件属性信息的php代码


Posted in PHP onOctober 28, 2016

遍历指定目录,并存储目录内所有文件属性信息的php代码遍历指定目录,并存储目录内所有文件属性信息的php代码

项目需要,需要写一个函数,能够遍历指定目录中的所有文件,而且这个目录中的子目录也要遍历。输出文件的属性信息,并存储。

想想需求,不就是一个ls -al命令吗,实现获取相关属性就好了,再加上一个遍历OK了事。

项目过程中,便于操作,使用了json格式存储,但是也发现了一些问题。谨此记录问题及代码,便于参考。

<?php
  define('INDEXFORMAT',"dir,name,size,perms,ower,group,ctime,mtime,atime,suffix") ;
  define('INDEXTXT', 'data/index.txt');
  define('INDEXJSON', 'data/index.json');
  date_default_timezone_set('Asia/Hong_Kong');






  if (file_exists(INDEXTXT)) {
    unlink(INDEXTXT);
  }
  $dir = './';
  getIndexFile($dir);
  



  /*
  *  get index file
  *  @filename   INDEXTXT
  *  @dir     string
  *
  */
  function getIndexFile($dir,$whitelist=''){
    $string = '';
    $dir = trim($dir);
    $dir = realpath($dir);
    $dir = $dir."//";
    if(is_file($dir)){
      putIndexFile($dir);
    }else{
      putIndexFile($dir);
      $oDir = @opendir($dir);
      while($fileName = readdir($oDir)){
        if($fileName!='.' && $fileName!='..'){
          if(is_file($dir.$fileName)){
            putIndexFile($dir.$fileName);
          }elseif(is_dir($dir.$fileName)){
            getIndexFile($dir.$fileName);
          }
        }
      }
    }
    if (!file_exists(INDEXTXT)) {
      return false;
    }
    //$data = json_encode(getIndexFromFile());
    //file_put_contents(INDEXJSON,$data);
    return true;
  }

  /*
  *  Get Index file
  *  @filename   file.index
  *
  */
  function putIndexFile($file){
    if (!file_exists($file)) {
      return false;
    }
    $format = explode(',', INDEXFORMAT);
    $string = "";
    foreach ($format as $key => $value) {
      if($key !== 0 ){
        $string .= "\t";
      }
      $string .= getFileAttr($file,$value); 
    }
    $string .= "\n";
    file_put_contents(INDEXTXT, $string, FILE_APPEND);
  }

  /*
  *
  *  Get index string from index file
  *  @return   Array()
  *  
  */
  function getIndexFromFile($flag=''){
    if (!file_exists(INDEXTXT)) {
      return false;
    }
    $arr = file(INDEXTXT);
    $format = explode(',', INDEXFORMAT);
    $result = array();
    if(!empty($flag)){
      $key = array_search($flag, $format);
      if ($key === false) {
        return false;
      }
      foreach ($arr as $str) {
        $tmp = explode("  ", trim($str));
        $result[$flag][] = $tmp[$key];
      }
    }else{
      foreach ($arr as $str) {
        $tmp = explode("  ", trim($str));
        foreach ($format as $key => $value) {
          $result[$value][] = $tmp[$key];//经测试这个操作比较耗时,大概0.7s的样子,慎用!
        }
      }
    }
    return $result;
  }



  /*
  *  get file attributes
  *  @var   $file
  *  @var   $flag
  *  @return String
  */

  function getFileAttr($file,$flag){
    if (!file_exists($file)) {
      return false;
    }
    switch ($flag) {
      case 'dir':
        if(is_file($file))
          return dirname($file);
        return realpath($file);
        break;
      case 'name':
        if(is_file($file))
          return basename($file);
        return '-';
        break;
      case 'size':
        if(is_file($file))
          return filesize($file);
        return '-';
        break;
      case 'perms':
        return substr(sprintf('%o', fileperms($file)), -4);;
        break;
      case 'ower':
        return fileowner($file);
        break;
      case 'group':
        return filegroup($file);
        break;
      case 'ctime':
        return filectime($file);
        break;
      case 'mtime':
        return filemtime($file);
        break;
      case 'atime':
        return fileatime($file);
        break;
      case 'suffix':
        if(is_file($file))
          return substr($file, strrpos($file, '.')+1);
        return '-';
        break;
      default:
        return false;
        break;
    }
  }
  



  /*
  *  get file size human readable
  */
  function getFileSizeFormat($file){
    if(!is_file($file)){
      return '-';
    }
    $flags = array('', 'K', 'M', 'G', 'T');
    for ($i = 0; $size >= 1024 && $i < 4; $i++) $size /= 1024;
    return round($size, 2).$flags[$i];
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
无数据库的详细域名查询程序PHP版(4)
Oct 09 PHP
一个程序下载的管理程序(三)
Oct 09 PHP
第六节--访问属性和方法
Nov 16 PHP
通过5个php实例细致说明传值与传引用的区别
Aug 08 PHP
php中array_column函数简单实现方法
Jul 11 PHP
PHP简单日历实现方法
Jul 20 PHP
PHP入门教程之操作符与控制结构流程详解
Sep 09 PHP
php获取文件名称和扩展名的方法
Feb 07 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
Jun 06 PHP
PHP DB 数据库连接类定义与用法示例
Mar 11 PHP
Swoole实现异步投递task任务案例详解
Apr 02 PHP
PHP中的异常处理机制深入讲解
Nov 10 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
Oct 28 #PHP
PHP图像识别技术原理与实现
Oct 27 #PHP
PHP对称加密函数实现数据的加密解密
Oct 27 #PHP
PHP下的浮点运算不准的解决方法
Oct 27 #PHP
php函数mkdir实现递归创建层级目录
Oct 27 #PHP
PHP实现递归目录的5种方法
Oct 27 #PHP
PHP读取大文件的几种方法介绍
Oct 27 #PHP
You might like
php空间不支持socket但支持curl时recaptcha的用法
2011/11/07 PHP
WordPress中给媒体文件添加分类和标签的PHP功能实现
2015/12/31 PHP
php-fpm服务启动脚本的方法
2018/04/27 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
PHP使用pdo实现事务处理操作示例
2018/09/05 PHP
JavaScript网页制作特殊效果用随机数
2007/05/22 Javascript
jQuery ui 1.7更新小结
2009/08/15 Javascript
js+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
2011/03/10 Javascript
在服务端(Page.Write)调用自定义的JS方法详解
2013/08/09 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
2015/10/21 Javascript
跨域请求的完美解决方法(JSONP, CORS)
2016/06/12 Javascript
原生Javascript插件开发实践
2017/01/18 Javascript
js分页之前端代码实现和请求处理
2017/08/04 Javascript
layui.js实现的表单验证功能示例
2017/11/15 Javascript
vue2.0 datepicker使用方法
2018/02/04 Javascript
详解node字体压缩插件font-spider的用法
2018/09/28 Javascript
jQuery实现动态添加和删除input框代码实例
2019/03/29 jQuery
Nuxt项目支持eslint+pritter+typescript的实现
2019/05/20 Javascript
Vuex新手的理解与使用详解
2019/05/31 Javascript
JS阻止事件冒泡的方法详解
2019/08/26 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
Python通过poll实现异步IO的方法
2015/06/04 Python
详解python函数的闭包问题(内部函数与外部函数详述)
2019/05/17 Python
h5移动端调用支付宝、微信支付的实现
2020/06/08 HTML / CSS
英国乐购杂货:Tesco Groceries
2018/11/29 全球购物
英国自行车商店:AW Cycles
2021/02/24 全球购物
外贸销售员求职的自我评价
2013/11/23 职场文书
大学旷课检讨书
2014/01/28 职场文书
2014年幼儿园元旦活动方案
2014/02/13 职场文书
《匆匆》教学反思
2014/02/22 职场文书
党的群众路线教育实践活动动员会主持词
2014/03/20 职场文书
产假请假条
2014/04/10 职场文书
给老婆的保证书
2015/01/16 职场文书
行政撤诉申请书
2015/05/18 职场文书
铁拳制作人赞《铁拳7》老头环Mod:制作精良 但别弄了
2022/04/03 其他游戏