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之第五天
Oct 09 PHP
火车头采集器3.0采集图文教程
Mar 17 PHP
php中的MVC模式运用技巧
May 03 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-3 代码组织和重用2
Jul 03 PHP
PHP通过正则表达式下载图片到本地的实现代码
Sep 19 PHP
将FCKeditor导入PHP+SMARTY的实现方法
Jan 15 PHP
php通过淘宝API查询IP地址归属等信息
Dec 25 PHP
PHP图片水印类的封装
Jul 06 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
Aug 07 PHP
PHP面向对象之里氏替换原则简单示例
Apr 08 PHP
Laravel实现ORM带条件搜索分页
Oct 24 PHP
php传值和传引用的区别点总结
Nov 19 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
PHP5中MVC结构学习
2006/10/09 PHP
MySQL 日期时间函数常用总结
2012/06/12 PHP
配置php网页显示各种语法错误
2013/09/23 PHP
以文件形式缓存php变量的方法
2015/06/26 PHP
PHP实现提高SESSION响应速度的几种方法详解
2019/08/09 PHP
JavaScript高级程序设计(第3版)学习笔记5 js语句
2012/10/11 Javascript
jquery无缝向上滚动实现代码
2013/03/29 Javascript
escape编码与unescape解码汉字出现乱码的解决方法
2014/07/02 Javascript
jQuery使用Selectator插件实现多选下拉列表过滤框(附源码下载)
2016/04/08 Javascript
jQuery解决$符号命名冲突
2016/06/18 Javascript
JavaScript仿支付宝6位数字密码输入框
2016/12/29 Javascript
jQuery实现链接的title快速出现的方法
2017/02/20 Javascript
jquery实现简单实用的轮播器
2017/05/23 jQuery
Nodejs调用Dll模块的方法
2018/09/17 NodeJs
js中实例与对象的区别讲解
2019/01/21 Javascript
巧妙运用v-model实现父子组件传值的方法示例
2019/04/07 Javascript
[00:43]魔廷新尊——痛苦女王至宝捆绑包
2020/06/12 DOTA
使用Python下载Bing图片(代码)
2013/11/07 Python
Python彩色化Linux的命令行终端界面的代码实例分享
2016/07/02 Python
Python读取Word(.docx)正文信息的方法
2018/03/15 Python
解决Python pandas plot输出图形中显示中文乱码问题
2018/12/12 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
2019/12/31 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
2020/02/27 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
2020/04/24 Python
keras中的backend.clip用法
2020/05/22 Python
Python os库常用操作代码汇总
2020/11/03 Python
HTML5中canvas中的beginPath()和closePath()的重要性
2018/08/24 HTML / CSS
详解HTML5 canvas绘图基本使用方法
2018/01/29 HTML / CSS
微软澳洲官方网站:Microsoft Australia
2017/01/10 全球购物
YesBabyOnline美国:全球性的在线婚纱礼服工厂
2018/05/05 全球购物
美国儿童玩具、装扮和玩偶商店:Magic Cabin
2018/09/02 全球购物
运动会广播稿300字
2014/01/10 职场文书
社会公德演讲稿
2014/05/20 职场文书
反邪教标语
2014/06/23 职场文书
委托公证书格式
2015/01/26 职场文书
2019广播稿怎么写
2019/04/17 职场文书