open($package_file); if($resource != true) { return DataReturn('压缩包打开失败['.$resource.']', -11); } // 需要处理的文件 $handle_file_arr = [ 'update.sql', 'power.sql', ]; for($i=0; $i<$zip->numFiles; $i++) { // 资源文件 $file = $zip->getNameIndex($i); // 排除临时文件和临时目录 if(strpos($file, '/.') === false && !is_dir($file) && in_array($file, $handle_file_arr)) { // 读取这个文件 $stream = $zip->getStream($file); if($stream !== false) { $file_content = stream_get_contents($stream); if(!empty($file_content)) { SqlConsoleService::Implement(['sql'=>$file_content]); } fclose($stream); } } } // 关闭zip $zip->close(); return DataReturn('success', 0); } /** * 系统包处理 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2021-04-24 * @desc description * @param [string] $package_file [包地址] */ public static function SystemPackageHandle($package_file) { // 开始解压文件 $zip = new \ZipArchive(); $resource = $zip->open($package_file); if($resource != true) { return DataReturn('压缩包打开失败['.$resource.']', -11); } for($i=0; $i<$zip->numFiles; $i++) { // 资源文件 $file = $zip->getNameIndex($i); // 排除临时文件和临时目录 if(!empty($file) && strpos($file, '/.') === false) { // 文件实际位置 $new_file = ROOT.$file; // 截取文件路径 $file_path = substr($new_file, 0, strrpos($new_file, '/')); // 路径不存在则创建、根目录文件不创建目录 if(strpos($file, '/') !== false) { \base\FileUtil::CreateDir($file_path); } // 如果不是目录则写入文件 if(!is_dir($new_file)) { // 读取这个文件 $stream = $zip->getStream($file); if($stream !== false) { $file_content = stream_get_contents($stream); if($file_content !== false) { file_put_contents($new_file, $file_content); } fclose($stream); } } } } // 关闭zip $zip->close(); return DataReturn('success', 0); } /** * 下载软件包 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2021-04-22 * @desc description * @param [array] $params [输入参数] */ public static function DownloadHandle($params = []) { // 获取下载地址 $data = MySession(self::$package_url_key); if(empty($data) || !is_array($data) || empty($data[$params['opt']])) { return DataReturn('下载地址为空', -1); } $url = $data[$params['opt']]; // 获取目录文件 $key = md5($url); $res = self::DirFileData($key); // 目录不存在则创建 \base\FileUtil::CreateDir($res['dir'].$res['path']); // 下载保存 if(@file_put_contents($res['url'], RequestGet($url, 300000)) !== false) { // 存储已下载文件地址session MySession(self::SaveDirPathUrl($params['opt']), $res['url']); return DataReturn('success', 0); } return DataReturn('包下载失败', -1); } /** * 获取存储路径session key * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2021-04-23 * @desc description * @param [string] $opt [操作类型] */ public static function SaveDirPathUrl($opt) { $dir_arr = [ 'download_system' => self::$package_system_dir_key, 'download_upgrade' => self::$package_upgrade_dir_key, ]; return isset($dir_arr[$opt]) ? $dir_arr[$opt] : ''; } /** * 获取下载地址 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2021-04-22 * @desc description * @param [array] $params [输入参数] */ public static function UrlHandle($params = []) { // 帐号信息 $accounts = MyC('common_store_accounts'); $password = MyC('common_store_password'); if(empty($accounts) || empty($password)) { return DataReturn('请先绑定应用商店帐号', -300); } // 获取信息 $ret = StoreService::RemoteStoreData($accounts, $password, MyConfig('shopxo.store_system_upgrade_url'), $params); if(!empty($ret) && isset($ret['code']) && $ret['code'] == 0) { MySession(self::$package_url_key, $ret['data']); return DataReturn('获取成功', 0); } return $ret; } /** * 获取软件存储信息 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2021-04-22 * @desc description * @param [string] $key [缓存key] */ public static function DirFileData($key) { // 将软件包下载到磁盘 $dir = ROOT; $path = 'runtime'.DS.'data'.DS.'system_upgrade'.DS; $filename = $key.'.zip'; // 目录不存在则创建 \base\FileUtil::CreateDir($dir.$path); return [ 'dir' => $dir, 'path' => $path, 'file' => $filename, 'url' => $dir.$path.$filename, ]; } /** * 输入参数校验 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2021-04-22 * @desc description * @param [array] $params [输入参数] */ public static function ParamsCheck($params = []) { // 请求参数 $p = [ [ 'checked_type' => 'in', 'key_name' => 'opt', 'checked_data' => ['url', 'download_system', 'download_upgrade', 'upgrade'], 'error_msg' => '操作类型有误', ], ]; $ret = ParamsChecked($params, $p); if($ret !== true) { return DataReturn($ret, -1); } self::$params = $params; return DataReturn('success', 0); } } ?>