首頁  >  文章  >  後端開發  >  php yield初體驗,遞歸遍歷資料夾並壓縮

php yield初體驗,遞歸遍歷資料夾並壓縮

巴扎黑
巴扎黑原創
2016-11-10 09:23:341779瀏覽

php遍歷一個資料夾並壓縮到zip 

Php程式碼  

  private function zip($path,$zipFile){
        $zip=new ZipArchive();
        $zip->open($zipFile,ZipArchive::CREATE);//创建一个空的zip文件
        $this->addFileToZip($path,$zip);
    }
    private function addFileToZip($path,ZipArchive $zip,$root=''){
        if(!is_dir($path)){
            return false;
        }
        if(!$root){
            $root= $path;
        }
        if(strpos($path,$root)!==0){
            $root= $path;
        }
        $handler=opendir($path); //打开当前文件夹由$path指定。
        while(($filename=readdir($handler))!==false){
            if($filename != "." && $filename != ".."){//文件夹文件名字为'.'和‘..’,不要对他们进行操作
                if(is_dir($path."/".$filename)){// 如果读取的某个对象是文件夹,则递归
                    $this->addFileToZip($path."/".$filename, $zip,$root);
                }else{ //将文件加入zip对象
                    $filenameWithPath = $path."/".$filename;
                    $localFileName = substr($filenameWithPath,strlen($root));
                    $zip->addFile($filenameWithPath,$localFileName);
                }
            }
        }
        @closedir($handler);
    }

使用yield重構程式 
程式碼執行碼zipFolder-delay:1.6427090167999|zip- delay:1.6077039241791 

|zipFolder-delay:1.6132049560547|zip-delay:1.6287071704865 

|zipFolder-delay:1.32648620147620147142021.1463201472032121320321230302132230203213203203203203:20202012.12.1. 2 

|zipFolder-delay:1.6917150020599|zip-delay:1.6022040843964 

|zipFolder-delay:1.6297070980072| zip-delay:1.7262189388275 
|zipFolder-delay:1.5997030735016|zip-delay:1.5892019271851 

使用後用

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn