当前位置:首页 > 网站建设 > php教程 > 正文内容

PHP 遍历文件夹及文件类及处理类

热淘网7年前 (2014-10-20)php教程928

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;
        }
    }

}
?>

Demo unset utf8 bom

<?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);
?>

<p>扫描二维码推送至手机访问。</p><p>版权声明:本文由<strong>网站标题</strong>发布,如需转载请注明出处。</p>

本文链接:https://www.retao5.com/jiaocheng/508.html

标签: 文件夹遍历
分享给朋友:

相关文章

mysql中的unsigned

mysql中的unsigned

unsigned   既为非负数,用此类型可以增加数据长度! 例如如果    tinyint最大是127,那...

PHP5中PDO的简单使用

PHP5中PDO的简单使用

DO(PHP Data Object) 是PHP 5新出来的东西,在PHP 6都要出来的时候,PHP 6只默认使用PDO来处理数据库,将把所有的数据库扩展移到了PECL,那么默认就是没有了我们...

查找所有重复标题的记录sql语句写法

查找所有重复标题的记录sql语句写法

查找所有重复标题的记录: SELECT * FROM t_info a WHERE ((SELECT COUNT(*) FROM ...

phpnow设置不同网站的日志分开

phpnow设置不同网站的日志分开

phpnow设置不同网站的日志分开 例如下面 ErrorLog logs/www.reyu123.com-error_log     CustomLog logs/www.r...

php各种命名规范写法

php各种命名规范写法

类文件名用大驼峰、php普通变量、函数用小驼峰、方法加list,url不加list 小驼峰式命名法(lower camel case): 第一个单字以小写字母开始;第二个单字的首字母大写,...

imagecreatetruecolor 改背景色

imagecreatetruecolor 改背景色

magecreatetruecolor 更改黑色背景的方法: 看到网上有人因为不会更改 imagecreatetruecolor 创建的真色彩图片的黑色背景,转而使用 imagecreate 函数创...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。