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 mssql 分页SQL语句优化 持续影响
Apr 26 PHP
PHP 内存缓存加速功能memcached安装与用法
Sep 03 PHP
php array_unique之后json_encode需要注意
Jan 02 PHP
关于php内存不够用的快速解决方法
Oct 26 PHP
php二维数组转成字符串示例
Feb 17 PHP
搭建Vim为自定义的PHP开发工具的一些技巧
Dec 11 PHP
PHP对象链式操作实现原理分析
Oct 09 PHP
php实现留言板功能(代码详解)
Mar 28 PHP
php对xml文件的增删改查操作实现方法分析
May 19 PHP
Docker搭建自己的PHP开发环境
Feb 24 PHP
Laravel框架验证码类用法实例分析
Sep 11 PHP
php中关于换行的实例写法
Sep 26 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
php防攻击代码升级版
2010/12/29 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
JQuery 初体验(建议学习jquery)
2009/04/25 Javascript
jQuery $.data()方法使用注意细节
2012/12/31 Javascript
jQuery实现列表内容的动态载入特效
2015/08/08 Javascript
js获取表格的行数和列数的方法
2015/10/23 Javascript
Javascript闭包与函数柯里化浅析
2016/06/22 Javascript
老生常谈 js中this的指向
2016/06/30 Javascript
AngularJs  Creating Services详解及示例代码
2016/09/02 Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
2016/12/27 Javascript
js通过指定下标或指定元素进行删除数组的实例
2017/01/12 Javascript
jquery操作select取值赋值与设置选中实例
2017/02/28 Javascript
基于JavaScript实现滑动门效果
2017/03/16 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
2018/12/05 Javascript
解决Vue+Electron下Vuex的Dispatch没有效果问题
2019/05/20 Javascript
使用Easyui实现查询条件的后端传递并自动刷新表格的两种方法
2019/09/09 Javascript
JS实现普通轮播图特效
2020/01/01 Javascript
[02:41]DOTA2英雄基础教程 谜团
2013/12/10 DOTA
使用url_helper简化Python中Django框架的url配置教程
2015/05/30 Python
Python编程中使用Pillow来处理图像的基础教程
2015/11/20 Python
python如何去除字符串中不想要的字符
2020/07/05 Python
python计算两个矩形框重合百分比的实例
2018/11/07 Python
Django集成CAS单点登录的方法示例
2019/06/10 Python
python opencv 简单阈值算法的实现
2019/08/04 Python
Python绘制动态水球图过程详解
2020/06/03 Python
使用CSS媒体查询(Media Queries)和JavaScript判断浏览器设备类型的方法
2014/04/03 HTML / CSS
中国综合网上购物商城:苏宁易购
2016/08/09 全球购物
不同浏览器创建XMLHttpRequest方法有什么不同
2014/11/17 面试题
银行学习十八大感想
2014/01/11 职场文书
网络宣传方案
2014/03/15 职场文书
担保书怎么写
2014/04/01 职场文书
作风建设演讲稿
2014/05/23 职场文书
岳麓书院导游词
2015/02/03 职场文书
单位提档介绍信
2015/10/22 职场文书
医学生自荐信范文(2016精选篇)
2016/01/28 职场文书
MySQL中连接查询和子查询的问题
2021/09/04 MySQL