/** * 初始化fileSummaryContext * @param string $project_path */ private function initFileSummaryContext($project_path, $allFiles) { global $project_path; $fileName = str_replace('/', '_', $project_path); $fileName = str_replace(':', '_', $fileName); $serialPath = CURR_PATH . "/data/fileSummaryConetxtSerialData/" . $fileName; if (!is_file($serialPath)) { //创建文件 $fileHandler = fopen($serialPath, 'w'); fclose($fileHandler); } //判断本地序列化文件中是否存在UserSanitizeFuncConetxt if (($serial_str = file_get_contents($serialPath)) != '') { $fileSummaryMap = unserialize($serial_str); $fileSummaryContext = FileSummaryContext::getInstance(); $fileSummaryContext->setFileSummaryMap($fileSummaryMap); return; } //没有序列化,则获取fileSummary $fileSummaryContext = FileSummaryContext::getInstance(); foreach ($allFiles as $fileAbsPath) { $ret = FileSummaryGenerator::getFileSummary($fileAbsPath); if ($ret) { $fileSummaryContext->addSummaryToMap($ret); } } //对FileSummaryContext进行序列化,加快下次读取速度 $this->serializeContext($serialPath, $fileSummaryContext->getFileSummaryMap()); }
/** * 获取当前文件include的所有文件的summary * @param FileSummary $fileSummary * @return array(fileSummarys) */ public static function getIncludeFilesDataFlows($fileSummary) { if (!is_object($fileSummary)) { return; } //1.得到include files $includeFiles = $fileSummary->getIncludeMap(); $currentFilePath = $fileSummary->getPath(); //2.foreach() files $retFileSummary = array(); foreach ($includeFiles as $rpath) { $absPath = FileUtils::getAbsPath($currentFilePath, $rpath); if (!$absPath) { continue; } // 查看是否在fileSummaryContext中 // 得到DataFlows $fileSummaryContext = FileSummaryContext::getInstance(); $ret = $fileSummaryContext->findSummaryByPath($absPath); if (is_object($ret)) { //查看此文件是否有include文件 $pRetFiles = self::getIncludeFilesDataFlows($ret); $retFileSummary = array_merge($pRetFiles, $retFileSummary); $retFileSummary = array_merge(array($ret), $retFileSummary); } else { $includeFileSummary = self::getFileSummary($absPath); if (is_object($includeFileSummary)) { $pRetFiles = self::getIncludeFilesDataFlows($includeFileSummary); $retFileSummary = array_merge($pRetFiles, $retFileSummary); $retFileSummary = array_merge(array($includeFileSummary), $retFileSummary); } } } //return all files summary //include在前的,在数组前面 return $retFileSummary; }