PHP遍历文件夹与文件类及处理类用法实例


Posted in PHP onSeptember 23, 2014

本文实例讲述了PHP遍历文件夹与文件类及处理类用法,非常具有实用价值。分享给大家供大家参考。具体方法如下:

FindFile.class.php类文件用于遍历目录文件,具体代码如下:

<?php 
/** 遍历文件夹及文件类 
*  Date:  2013-03-21 
*  Author: fdipzone 
*  Ver:  1.0 
*/ 
class FindFile{ 
 
  public $files = array();  // 存储遍历的文件 
  protected $maxdepth;    // 搜寻深度,0表示没有限制 
 
  /* 遍历文件及文件夹 
  *  @param String $spath   文件夹路径 
  *  @param int  $maxdepth 搜寻深度,默认搜寻全部 
  */ 
  public function process($spath, $maxdepth=0){ 
    if(isset($maxdepth) && is_numeric($maxdepth) && $maxdepth>0){ 
      $this->maxdepth = $maxdepth; 
    }else{ 
      $this->maxdepth = 0; 
    } 
    $this->files = array(); 
    $this->traversing($spath); // 遍历 
  } 
 
  /* 遍历文件及文件夹 
  *  @param String $spath 文件夹路径 
  *  @param int  $depth 当前文件夹深度 
  */ 
  private function traversing($spath, $depth=1){ 
    if($handle = opendir($spath)){ 
      while(($file=readdir($handle))!==false){ 
        if($file!='.' && $file!='..'){ 
          $curfile = $spath.'/'.$file; 
 
          if(is_dir($curfile)){ // dir 
            if($this->maxdepth==0 || $depth<$this->maxdepth){ // 判断深度 
              $this->traversing($curfile, $depth+1); 
            } 
          }else{ // file 
            $this->handle($curfile); 
          } 
        } 
      } 
      closedir($handle); 
    } 
  } 
 
  /** 处理文件方法 
  * @param String $file 文件路径 
  */ 
  protected function handle($file){ 
    array_push($this->files, $file); 
  } 
} 
?>

UnsetBom.class.php用于清除utf8+bom文件的bom,即头三个字节 0xEF 0xBB 0xBF,继承FindFile类,具体代码如下:

<?php 
/** 遍历所有文件,清除utf8+bom 0xEF 0xBB 0xBF 
*  Date:  2013-03-21 
*  Author: fdipzone 
*  Ver:  1.0 
*/ 
class UnsetBom extends FindFile{ 
 
  private $filetype = array(); // 需要处理的文件类型 
 
  // 初始化 
  public function __construct($filetype=array()){ 
    if($filetype){ 
      $this->filetype = $filetype; 
    } 
  } 
 
  /** 重写FindFile handle方法 
  *  @param String $file 文件路径 
  */ 
  protected function handle($file){ 
    if($this->check_ext($file) && $this->check_utf8bom($file)){ // utf8+bom 
      $this->clear_utf8bom($file);    // clear 
      array_push($this->files, $file);  // save log 
    } 
  } 
 
  /** 检查文件是否utf8+bom 
  *  @param String $file 文件路径 
  *  @return boolean 
  */ 
  private function check_utf8bom($file){ 
    $content = file_get_contents($file); 
    return ord(substr($content,0,1))===0xEF && ord(substr($content,1,1))===0xBB && ord(substr($content,2,1))===0xBF; 
  } 
 
  /** 清除utf8+bom 
  *  @param String $file 文件路径 
  */ 
  private function clear_utf8bom($file){ 
    $content = file_get_contents($file); 
    file_put_contents($file, substr($content,3), true); // 去掉头三个字节 
  } 
 
  /** 检查文件类型 
  *  @param String $file 文件路径 
  *  @return boolean 
  */ 
  private function check_ext($file){ 
    $file_ext = strtolower(array_pop(explode('.',basename($file)))); 
    if(in_array($file_ext, $this->filetype)){ 
      return true; 
    }else{ 
      return false; 
    } 
  } 
} 
?>

去除utf8 bom头Demo遍历文件示例:

<?php 
require('FindFile.class.php'); 
require('UnsetBom.class.php'); 
 
$folder = dirname(__FILE__); 
 
$obj = new UnsetBom(array('php','css','js')); // 文件类型 
$obj->process($folder); 
 
print_r($obj->files); 
?>

希望本文所述对大家PHP程序设计的学习有所帮助。

PHP 相关文章推荐
php discuz 主题表和回帖表的设计
Mar 13 PHP
一步一步学习PHP(1) php开发环境配置
Feb 15 PHP
PHP 开发环境配置(Zend Studio)
Apr 28 PHP
PHP获取mysql数据表的字段名称和详细信息的方法
Sep 27 PHP
在WordPress中实现发送http请求的相关函数解析
Dec 29 PHP
PHP统计目录中文件以及目录中目录大小的方法
Jan 09 PHP
PHP的Yii框架中Model模型的学习教程
Mar 29 PHP
thinkPHP5实现的查询数据库并返回json数据实例
Oct 23 PHP
php把字符串指定字符分割成数组的方法
Mar 12 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
Jun 08 PHP
PHP实现随机发放扑克牌
Apr 21 PHP
php的单例模式及应用场景详解
Feb 27 PHP
PHP邮件发送类PHPMailer用法实例详解
Sep 22 #PHP
php实现的CSS更新类实例
Sep 22 #PHP
php的XML文件解释类应用实例
Sep 22 #PHP
php实现的返回数据格式化类实例
Sep 22 #PHP
php实现的替换敏感字符串类实例
Sep 22 #PHP
php实现的发送带附件邮件类实例
Sep 22 #PHP
PHP实现AES256加密算法实例
Sep 22 #PHP
You might like
FleaPHP的安全设置方法
2008/09/15 PHP
利用PHP制作简单的内容采集器的原理分析
2008/10/01 PHP
PHP资源管理框架Assetic简介
2014/06/12 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
2016/11/05 PHP
完美解决thinkphp唯一索引重复时出错的问题
2017/03/31 PHP
phpMyAdmin无法登陆的解决方法
2017/04/27 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
2019/10/09 PHP
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
iframe 异步加载技术及性能分析
2011/07/19 Javascript
jQuery函数的第二个参数获取指定上下文中的DOM元素
2014/05/19 Javascript
使用documentElement正确取得当前可见区域的大小
2014/07/25 Javascript
EasyUi combotree 实现动态加载树节点
2016/04/01 Javascript
EasyUI中在表单提交之前进行验证
2016/07/19 Javascript
js浏览器html5表单验证
2016/10/17 Javascript
JS作用域闭包、预解释和this关键字综合实例解析
2016/12/16 Javascript
JavaScript插件Tab选项卡效果
2017/11/14 Javascript
全面介绍vue 全家桶和项目实例
2017/12/27 Javascript
详解vue.js数据传递以及数据分发slot
2018/01/20 Javascript
VUE使用axios调用后台API接口的方法
2020/08/03 Javascript
Vue使用axios引起的后台session不同操作
2020/08/14 Javascript
Python实现字符串匹配算法代码示例
2017/12/05 Python
python调用百度语音REST API
2018/08/30 Python
Python将列表数据写入文件(txt, csv,excel)
2019/04/03 Python
Django1.11自带分页器paginator的使用方法
2019/10/31 Python
Python持续监听文件变化代码实例
2020/07/22 Python
解决python 执行shell命令无法获取返回值的问题
2020/12/05 Python
JINS眼镜官方网站:日本最大的眼镜邮购
2016/10/14 全球购物
印度低票价航空公司:GoAir
2017/10/11 全球购物
是否可以从一个static方法内部发出对非static方法的调用?
2014/08/18 面试题
老教师工作总结的自我评价
2013/09/27 职场文书
教师的实习自我鉴定
2013/12/17 职场文书
学雷锋志愿者活动总结
2014/06/27 职场文书
党员干部形式主义个人整改措施
2014/09/17 职场文书
高校自主招生自荐信2015
2015/03/04 职场文书
追悼会家属答谢词
2015/09/29 职场文书
使用MybatisPlus打印sql语句
2022/04/22 SQL Server