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代码
Aug 08 PHP
php debug 安装技巧
Apr 30 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
Dec 25 PHP
php sybase_fetch_array使用方法
Apr 15 PHP
yii实现创建验证码实例解析
Jul 31 PHP
PHP中__autoload和Smarty冲突的简单解决方法
Apr 08 PHP
再谈PHP中单双引号的区别详解
Jun 12 PHP
PHP标准类(stdclass)用法示例
Sep 28 PHP
iis6手工创建网站后无法运行php脚本的解决方法
Jun 08 PHP
php中通用的excel导出方法实例
Dec 30 PHP
PHP大文件切割上传并带进度条功能示例
Jul 01 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
Feb 28 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
超神学院:天使彦公认最美的三个视角,网友:我的天使快下凡吧!
2020/03/02 国漫
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
2007/04/18 PHP
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
2014/01/17 PHP
CI框架简单邮件发送类实例
2016/05/18 PHP
PHP微信开发用Cache 解决数据缓存
2016/07/11 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
你的编程语言可以这样做吗?
2006/09/07 Javascript
JavaScript中数组对象的那些自带方法介绍
2013/03/12 Javascript
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
Jquery的hover方法让鼠标经过li时背景变色
2013/09/06 Javascript
JS获取各种浏览器窗口大小的方法
2014/01/14 Javascript
jQuery获得IE版本不准确webbrowser的解决方法
2014/02/23 Javascript
JavaScript程序员应该知道的45个实用技巧
2014/03/04 Javascript
通过js为元素添加多项样式,浏览器全兼容写法
2014/08/30 Javascript
JS插件overlib用法实例详解
2015/12/26 Javascript
JS JSOP跨域请求实例详解
2016/07/04 Javascript
jQuery中用on绑定事件时需注意的事项
2017/03/19 Javascript
JS表格组件神器bootstrap table使用指南详解
2017/04/12 Javascript
jquery实现倒计时小应用
2017/09/19 jQuery
Vue-cli 使用json server在本地模拟请求数据的示例代码
2017/11/02 Javascript
Servlet3.0与纯javascript通过Ajax交互的实例详解
2018/03/18 Javascript
select2 ajax 设置默认值,初始值的方法
2018/08/09 Javascript
Node.js 使用axios读写influxDB的方法示例
2018/10/26 Javascript
vue项目打包之后背景样式丢失的解决方案
2019/01/17 Javascript
JavaScript数组排序功能简单实现
2020/05/14 Javascript
详解python之多进程和进程池(Processing库)
2017/06/09 Python
Python视频爬虫实现下载头条视频功能示例
2018/05/07 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
2019/04/26 Python
史上最详细的Python打包成exe文件教程
2021/01/17 Python
天猫精选:上天猫,就够了
2016/09/21 全球购物
Rosetta Stone官方网站:语言学习
2019/01/05 全球购物
大学生毕业自我鉴定范文
2013/11/03 职场文书
运动会演讲稿100字
2014/08/25 职场文书
高中生自我评价范文2015
2015/03/03 职场文书
2016年区委书记抓基层党建工作公开承诺书
2016/03/25 职场文书