개발 꿀팁/PHP

PHP 트래버스 폴더 및 파일류 및 처리류

Jammie 2022. 8. 17. 14:48
반응형

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, 즉 처음 3바이트 0에 0xBB 0? FindFile 클래스를 상속받음

<?php
/** 모든 서류를 넘나들며 utf8+bom 0xBB 0 제거
*   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);
?>
반응형