Ejemplo n.º 1
0
 /**
  * 清理全部的缓存,包括多余的file_meta
  * @param $limit
  */
 public function cleanCache($limit)
 {
     //data源处理对象
     $dataObj = Yii::app()->data;
     // 回收站插件: -1保留值 0正常 1删除
     $this->handleCleanFileMeta($limit);
     // 清理ref_count等于0的文件
     $versions = MiniVersion::getInstance()->getCleanFiles(100);
     foreach ($versions as $version) {
         $files = UserFile::model()->findAll('version_id=?', array($version['id']));
         // 如果$file存在此version_id,不删除
         if (!empty($files)) {
             for ($i = 0; $i < count($files); $i++) {
                 MiniVersion::getInstance()->updateRefCount($version["id"]);
             }
             continue;
         }
         // 如果不存在的话,删除流文件,删除该条version记录
         $signature = $version['file_signature'];
         $signaturePath = MiniUtil::getPathBySplitStr($signature);
         // 判断文件是否存在
         if ($dataObj->exists($signaturePath) === false) {
             MiniVersion::getInstance()->deleteById($version["id"]);
             continue;
         }
         // 删除文件
         $dataObj->delete($signaturePath);
         //删除空的文件夹
         $parts = CUtils::getFoldersBySplitStr($signature);
         foreach ($parts as $part) {
             $dataObj->delete($part);
         }
         // 删除version记录
         MiniVersion::getInstance()->deleteById($version["id"]);
     }
     MiniUtil::deleteDir(BASE . 'temp');
 }