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 相关文章推荐
桌面中心(四)数据显示
Oct 09 PHP
php木马攻击防御之道
Mar 24 PHP
php mssql 日期出现中文字符的解决方法
Mar 10 PHP
2014过年倒计时示例
Jan 31 PHP
destoon常用的安全设置概述
Jun 21 PHP
php上传图片之时间戳命名(保存路径)
Aug 15 PHP
thinkphp文件处理类Dir.class.php的用法分析
Dec 08 PHP
PHP答题类应用接口实例
Feb 09 PHP
CI框架中数据库操作函数$this-&gt;db-&gt;where()相关用法总结
May 17 PHP
php使用环形链表解决约瑟夫问题完整示例
Aug 07 PHP
在Laravel中实现使用AJAX动态刷新部分页面
Oct 15 PHP
ThinkPHP5&amp;5.1实现验证码的生成、使用及点击刷新功能示例
Feb 07 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中10个不常见却非常有用的函数
2010/03/21 PHP
PHP中删除变量时unset()和null的区别分析
2011/01/27 PHP
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
2014/01/22 PHP
Laravel5.1框架注册中间件的三种场景详解
2019/07/09 PHP
JQuery中$.ajax()方法参数详解及应用
2013/12/12 Javascript
JS不间断向上滚动效果代码
2013/12/25 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
2013/12/31 Javascript
js形成页面的一种遮罩效果实例代码
2014/01/04 Javascript
Javascript学习笔记之数组的构造函数
2014/11/23 Javascript
apply和call方法定义及apply和call方法的区别
2015/11/15 Javascript
浅谈Nodejs应用主文件index.js
2016/08/28 NodeJs
JavaScript实现兼容IE6的收起折叠与展开效果实例
2017/09/20 Javascript
react学习笔记之state以及setState的使用
2017/12/07 Javascript
详解微信小程序审核不通过的解决方法
2018/01/17 Javascript
深入浅析JS中的严格模式
2018/06/04 Javascript
傻瓜式vuex语法糖kiss-vuex整理
2018/12/21 Javascript
详解VUE项目中安装和使用vant组件
2019/04/28 Javascript
Javascript Web Worker使用过程解析
2020/03/16 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
2020/10/18 Javascript
Python实现根据指定端口探测服务器/模块部署的方法
2014/08/25 Python
Python中运行并行任务技巧
2015/02/26 Python
Python实现购物车购物小程序
2018/04/18 Python
python内存动态分配过程详解
2019/07/15 Python
Python如何省略括号方法详解
2020/03/21 Python
对python中各个response的使用说明
2020/03/28 Python
Python中zip函数如何使用
2020/06/04 Python
python使用Word2Vec进行情感分析解析
2020/07/31 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
2021/03/17 Javascript
微信小程序canvas实现水平、垂直居中效果
2020/02/05 HTML / CSS
全世界最美丽的四星和五星级酒店预订:Prestigia.com
2017/11/15 全球购物
银行竞聘演讲稿范文
2014/04/23 职场文书
经营管理策划方案
2014/05/22 职场文书
今日说法观后感
2015/06/08 职场文书
MongoDB balancer的使用详解
2021/04/30 MongoDB
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL