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下判断数组中是否存在相同的值array_unique
Mar 25 PHP
php URL跳转代码 减少外链
Jun 25 PHP
PHP autoload与spl_autoload自动加载机制的深入理解
Jun 05 PHP
PHP代码审核的详细介绍
Jun 13 PHP
php分页代码学习示例分享
Feb 20 PHP
PHP间隔一段时间执行代码的方法
Dec 02 PHP
PHP工程师VIM配置分享
Dec 15 PHP
Laravel路由设定和子路由设定实例分析
Mar 30 PHP
PHP简单获取上月、本月、近15天、近30天的方法示例
Jul 03 PHP
PHP Cli 模式设置进程名称的方法
Jun 12 PHP
关于laravel-admin ueditor 集成并解决刷新的问题
Oct 21 PHP
一文看懂PHP进程管理器php-fpm
Jun 01 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防止sql注入示例分析和几种常见攻击正则表达式
2014/01/12 PHP
对PHP语言认识上需要避免的10大误区
2014/06/12 PHP
PHP文件锁定写入实例解析
2014/07/14 PHP
php mongodb操作类 带几个简单的例子
2016/08/25 PHP
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
2011/03/05 Javascript
通过JS获取用户本地图片路径并显示的代码
2012/02/16 Javascript
两个多选select(multiple左右)添加、删除选项和取值实例
2014/05/12 Javascript
new Date()问题在ie8下面的处理方法
2014/07/31 Javascript
简单掌握JavaScript中const声明常量与变量的用法
2016/05/21 Javascript
Angular和百度地图的结合实例代码
2016/10/19 Javascript
基于javascript实现按圆形排列DIV元素(二)
2016/12/02 Javascript
JavaScript表单验证的两种实现方法
2017/02/11 Javascript
JS鼠标滚动分页效果示例
2017/07/05 Javascript
Angularjs实现下拉框联动的示例代码
2017/08/22 Javascript
Node.js+jade抓取博客所有文章生成静态html文件的实例
2017/09/19 Javascript
vue中实现移动端的scroll滚动方法
2018/03/03 Javascript
深入解析vue 源码目录及构建过程分析
2019/04/24 Javascript
[48:00]EG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/29 DOTA
Python多线程学习资料
2012/12/19 Python
Python正则抓取网易新闻的方法示例
2017/04/21 Python
python使用插值法画出平滑曲线
2018/12/15 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
tensorflow中tf.reduce_mean函数的使用
2020/04/19 Python
Python LMDB库的使用示例
2021/02/14 Python
Html5 audio标签样式的修改
2016/01/28 HTML / CSS
介绍一下gcc特性
2015/10/31 面试题
回门宴新郎答谢词
2014/01/12 职场文书
食品厂厂长岗位职责
2014/01/30 职场文书
会计求职信范文
2014/05/24 职场文书
团拜会策划方案
2014/06/07 职场文书
计生工作先进事迹
2014/08/15 职场文书
3.15消费者权益日活动总结
2015/02/09 职场文书
党员学习中国梦心得体会
2016/01/05 职场文书
2017年寒假少先队活动总结
2016/04/06 职场文书
Redis Lua脚本实现ip限流示例
2022/07/15 Redis
使用CSS实现百叶窗效果示例代码
2023/05/07 HTML / CSS