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生成自定义长度随机字符串的函数分享
May 04 PHP
php异步多线程swoole用法实例
Nov 14 PHP
PHP编译安装时常见错误解决办法
May 28 PHP
PHP微信开发之二维码生成类
Jun 26 PHP
10个超级有用的PHP代码片段果断收藏
Sep 23 PHP
详解PHP的Yii框架中扩展的安装与使用
Apr 01 PHP
PHP不使用递归的无限级分类简单实例
Nov 05 PHP
PHP实现二维数组根据key进行排序的方法
Dec 30 PHP
PHP中的浅复制与深复制的实例详解
Oct 26 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
Apr 26 PHP
php+mysql开发的最简单在线题库(在线做题系统)完整案例
Mar 30 PHP
tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析
Feb 11 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
超外差式晶体管收音机的组装与统调
2021/03/01 无线电
php之XML转数组函数的详解
2013/06/07 PHP
php操作MongoDB基础教程(连接、新增、修改、删除、查询)
2014/03/25 PHP
PHP上传文件时自动分配路径的方法
2015/01/09 PHP
PHP并发多进程处理利器Gearman使用介绍
2016/05/16 PHP
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
2013/01/23 Javascript
JS+css 图片自动缩放自适应大小
2013/08/08 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
JS中操作JSON总结
2020/12/06 Javascript
JavaScript避免代码的重复执行经验技巧分享
2014/04/17 Javascript
简介JavaScript中toUpperCase()方法的使用
2015/06/06 Javascript
程序员必知35个jQuery 代码片段
2015/11/05 Javascript
JS把内容动态插入到DIV的实现方法
2016/07/19 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
vue2.0嵌套路由实现豆瓣电影分页功能(附demo)
2017/03/13 Javascript
简单谈谈关于 npm 5.0 的新坑
2017/06/08 Javascript
jQuery Validate插件ajax方式验证输入值的实例
2017/12/21 jQuery
Js面试算法详解
2018/04/08 Javascript
js取0-9随机取4个数不重复的数字代码实例
2019/03/27 Javascript
详解Vue中组件传值的多重实现方式
2019/08/16 Javascript
[44:37]完美世界DOTA2联赛PWL S3 Forest vs access 第一场 12.11
2020/12/13 DOTA
Python中的并发编程实例
2014/07/07 Python
python实战之实现excel读取、统计、写入的示例讲解
2018/05/02 Python
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
django url到views参数传递的实例
2019/07/19 Python
Python 实现文件读写、坐标寻址、查找替换功能
2019/09/11 Python
python中的Elasticsearch操作汇总
2019/10/30 Python
荷兰和比利时时尚鞋店:Van Dalen
2018/04/23 全球购物
英文版银行求职信
2013/10/09 职场文书
药学专业个人的自我评价
2013/12/31 职场文书
不假外出检讨书
2014/01/27 职场文书
给全校老师的建议书
2014/03/13 职场文书
幼儿园大班见习报告
2014/10/31 职场文书
中标通知书范本
2015/04/17 职场文书
八年级作文之友谊
2019/12/02 职场文书