Heim  >  Artikel  >  Backend-Entwicklung  >  Verständnis der PHP-Traversierung von Ordnern, Dateiklassen und Verarbeitungsklassen

Verständnis der PHP-Traversierung von Ordnern, Dateiklassen und Verarbeitungsklassen

jacklove
jackloveOriginal
2018-06-11 11:09:092350Durchsuche

FindFile.class.php
wird zum Durchsuchen von Verzeichnisdateien verwendet

<?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. Klasse .php wird verwendet, um die Stückliste von utf8+bom-Dateien zu löschen, d. h. die ersten drei Bytes 0xEF 0xBB 0xBF, und erbt die FindFile-Klasse

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

In diesem Artikel geht es um das Verständnis der PHP-Durchquerung von Ordnern, Dateiklassen und Verarbeitungsklassen. Weitere verwandte Inhalte finden Sie unter Chinesische PHP-Website.

Verwandte Empfehlungen:

Verstehen Sie den Unterschied zwischen Forward-Proxy und Reverse-Proxy

So verwenden Sie Apache zum Erstellen eines virtuellen Hosts

So starten und überwachen Sie den SH-Memcached-Prozess

Das obige ist der detaillierte Inhalt vonVerständnis der PHP-Traversierung von Ordnern, Dateiklassen und Verarbeitungsklassen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn