ホームページ  >  記事  >  バックエンド開発  >  PHP はフォルダー、ファイル クラス、および処理クラスを走査します

PHP はフォルダー、ファイル クラス、および処理クラスを走査します

黄舟
黄舟オリジナル
2017-02-18 09:28:571147ブラウズ

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!=&#39;.&#39; && $file!=&#39;..&#39;){
                    $curfile = $spath.&#39;/&#39;.$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をクリアするために使用されます。最初の 3 バイト 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(&#39;.&#39;,basename($file))));
        if(in_array($file_ext, $this->filetype)){
            return true;
        }else{
            return false;
        }
    }

}
?>


Demo unset utf8 bom

<?php
require(&#39;FindFile.class.php&#39;);
require(&#39;UnsetBom.class.php&#39;);

$folder = dirname(__FILE__);

$obj = new UnsetBom(array(&#39;php&#39;,&#39;css&#39;,&#39;js&#39;)); // 文件类型
$obj->process($folder);

print_r($obj->files);
?>

上記は、PHP のフォルダーとファイル クラスと処理クラスのトラバースの内容です。 、PHP 中国語 Web サイト (www.php.cn) に注意してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。