current_version = $current_version; $this->update_sources = require BASE_DIR."/config/update.php"; $this->current_source = $this->update_sources[Option::get('update_source')]; } public function getUpdateInfo() { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $this->current_source['update_url']); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // quick fix for accessing https resources curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $result = curl_exec($ch); curl_close($ch); $this->update_info = json_decode($result, true); return $this->update_info; } public function checkUpdate() { $info = $this->getUpdateInfo(); $this->latest_version = $info['latest_version']; $this->update_time = date('Y-m-d H:i:s', $info['update_time']); } public function downloadUpdate($silent = true) { $release_url = $this->update_info['releases'][$this->latest_version]['release_url']; if (!$silent) echo "
正在下载更新包:$release_url
"; // I don't know why curl cant get full file here.. $file = fopen($release_url, 'r'); if (!$silent) echo "下载完成。
"; $update_cache = BASE_DIR."/setup/update_cache/"; if (!is_dir($update_cache)) mkdir($update_cache); $zip_path = $update_cache."update_".time().".zip"; if (file_put_contents($zip_path, $file) === false) { \Storage::removeDir(BASE_DIR.'/setup/update_cache/'); return false; } return $zip_path; } /** * Check if a new version is available * * @return bool */ public function newVersionAvailable() { $this->checkUpdate(); return $this->compareVersion($this->latest_version, $this->current_version); } public function getUpdateSources() { return $this->update_sources; } /** * Compare version string * * @param string $v1 * @param string $v2 * @return boolean */ private function compareVersion($v1, $v2) { if (strnatcasecmp($v1, $v2) > 0) { // v1 > v2 return true; } else { // v1 < v2 || v1 = v2 return false; } } }