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 相关文章推荐
模拟OICQ的实现思路和核心程序(二)
Oct 09 PHP
PHP语法速查表
Dec 06 PHP
中篇:安装及配置PHP
Dec 13 PHP
PHP mb_convert_encoding文字编码的转换函数介绍
Nov 10 PHP
全新的PDO数据库操作类php版(仅适用Mysql)
Jul 22 PHP
ECshop 迁移到 PHP7版本时遇到的兼容性问题
Feb 15 PHP
php rmdir使用递归函数删除非空目录实例详解
Oct 20 PHP
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
Aug 11 PHP
彻底搞懂PHP 变量结构体
Oct 11 PHP
php微信扫码支付 php公众号支付
Mar 24 PHP
yii2.0框架场景的简单使用示例
Jan 25 PHP
PHP之header函数详解
Mar 02 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/01/05 PHP
使用php伪造referer的方法 利用referer防止图片盗链
2014/01/20 PHP
PHP实现克鲁斯卡尔算法实例解析
2014/08/22 PHP
php实现获取文件mime类型的方法
2015/02/11 PHP
CI框架数据库查询之join用法分析
2016/05/18 PHP
PHP+MySQL实现模糊查询员工信息功能示例
2018/06/01 PHP
Django 标签筛选的实现代码(一对多、多对多)
2018/09/05 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
解析jquery中的ajax缓存问题
2013/12/19 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
JS实现CheckBox复选框全选全不选功能
2015/05/06 Javascript
在JavaScript中处理数组之reverse()方法的使用
2015/06/09 Javascript
javascript实现点击提交按钮后显示loading的方法
2015/07/03 Javascript
分享javascript实现的冒泡排序代码并优化
2016/06/05 Javascript
AngularJS ng-blur 指令详解及简单实例
2016/07/30 Javascript
JavaScript队列的应用实例详解【经典数据结构】
2017/04/12 Javascript
Bootstrap Table快速完美搭建后台管理系统
2017/09/20 Javascript
利用d3.js力导布局绘制资源拓扑图实例教程
2019/01/08 Javascript
Windows上node.js的多版本管理工具用法实例分析
2019/11/06 Javascript
在vue中动态添加class类进行显示隐藏实例
2019/11/09 Javascript
vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)
2020/06/11 Javascript
[01:11:21]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第一场 3月6日
2021/03/11 DOTA
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
2018/04/22 Python
Python对接六大主流数据库(只需三步)
2019/07/31 Python
python正则过滤字母、中文、数字及特殊字符方法详解
2020/02/11 Python
将pytorch转成longtensor的简单方法
2020/02/18 Python
python pymysql链接数据库查询结果转为Dataframe实例
2020/06/05 Python
志愿者事迹材料
2014/12/26 职场文书
圣诞节开幕词
2015/01/29 职场文书
创先争优活动个人总结
2015/03/04 职场文书
冬季作息时间调整通知
2015/04/24 职场文书
2019银行竞聘书
2019/06/21 职场文书
MySQL数据迁移相关总结
2021/04/29 MySQL
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang