首頁 > 後端開發 > php教程 > PHP 遍歷資料夾及檔案類及處理類

PHP 遍歷資料夾及檔案類及處理類

黄舟
發布: 2023-03-05 19:50:01
原創
1217 人瀏覽過

FindFile.class.php
用於遍歷目錄檔案

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

<?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
UnsetBom.class.php

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

1

2

3

4

5

6

7

8

9

10

11

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

?>

登入後複製

蠔.關注等檔案(www.php.cn)!


🎜🎜
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板