public static function getTree($sid, $URL, $method) { ///if (!self::$enabled) return; if (self::$activeTree) { return; } if (self::$tree != null) { return; } if (strtoupper($method) != 'GET' && !self::$makeTree) { return; } $uTag = md5($URL); self::$activeTree = true; self::$changedTree = true; self::setRoot(); $uriTag = self::generateETag($URL); $list = self::loadData('tree_' . $uTag); if ($list === null) { self::$changedTree = false; ///Logger::Log('no tree', LogLevel::DEBUG, false, dirname(__FILE__) . '/../calls.log'); return; } else { ///Logger::Log('tree found', LogLevel::DEBUG, false, dirname(__FILE__) . '/../calls.log'); } $list = json_decode($list, true); $result = self::loadData('data_' . $list[0]['eTag']); if ($result === null) { self::$changedTree = false; ///Logger::Log('no result', LogLevel::DEBUG, false, dirname(__FILE__) . '/../calls.log'); return; } self::$tree = json_decode(json_encode($list)); $sources = array(); $allOK = true; foreach ($list as $key => $elem) { if ($elem['toSid'] === null) { $sources[$key] = $elem; } } // call sources if ($allOK) { foreach ($sources as $key => $source) { $answ = Request::get($source['toURL'], array(), '', true); if (!isset($answ['headers']['Etag']) || $answ['headers']['Etag'] != $source['eTag']) { $allOK = false; ///Logger::Log('call '.$source['toURL'].(isset($answ['headers']['Etag']) ? ' is not equal, recvHash: '.$answ['headers']['Etag'] : '').' oldHash: '.$source['eTag'] , LogLevel::DEBUG, false, dirname(__FILE__) . '/../calls.log'); } else { ///Logger::Log('call '.$source['toURL'].' is equal' , LogLevel::DEBUG, false, dirname(__FILE__) . '/../calls.log'); } } } if ($allOK) { self::$changedTree = true; if (isset($list[0])) { self::cacheDataSimple($sid, $list[0]['toName'], $list[0]['toURL'], $result, 200, $list[0]['toMethod']); ///Logger::Log('cache hit', LogLevel::DEBUG, false, dirname(__FILE__) . '/../calls.log'); } else { ///Logger::Log('nonono', LogLevel::DEBUG, false, dirname(__FILE__) . '/../calls.log'); } } else { // remove tree self::removeData('tree_' . $uTag); } }