$temp_file, 'url' => substr($url, -4) == '.zip' ? $url : '', 'size' => FileSizeByteToUnit(filesize($file_path)), 'time' => date('Y-m-d H:i:s', filectime($file_path)), ]; } } closedir($dh); } } return $result; } /** * 源码包生成 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2018-12-21 * @desc description * @param [array] $params [输入参数] */ public static function Created($params = []) { // 是否https if(config('shopxo.is_develop') !== true) { if(__MY_HTTP__ != 'https') { return DataReturn('请使用https协议', -1); } } // 初始化 self::Init($params); // 配置内容 if(empty($params['app_mini_title']) || empty($params['app_mini_describe'])) { return DataReturn('配置信息不能为空', -1); } // 源码包目录是否存在 if(!is_dir(self::$new_root)) { return DataReturn('源码包目录不存在['.self::$new_root.']', -1); } // 源码包目录是否有权限 if(!is_writable(self::$new_root)) { return DataReturn('源码包目录没有权限['.self::$new_root.']', -1); } // 目录不存在则创建 \base\FileUtil::CreateDir(self::$new_path); // 复制包目录 $new_dir = self::$new_path.DS.date('YmdHis'); if(\base\FileUtil::CopyDir(self::$old_path, $new_dir) != true) { return DataReturn('项目包复制失败', -2); } // 校验基础文件是否存在 if(!file_exists($new_dir.DS.'app.js') || !file_exists($new_dir.DS.'app.json')) { return DataReturn('包基础文件不存在,请重新生成', -3); } // 替换内容 // app.js $status = file_put_contents($new_dir.DS.'app.js', str_replace(['{{request_url}}', '{{application_title}}', '{{application_describe}}'], [__MY_URL__, $params['app_mini_title'], $params['app_mini_describe']], file_get_contents($new_dir.DS.'app.js'))); if($status === false) { return DataReturn('基础配置替换失败', -4); } // app.json $status = file_put_contents($new_dir.DS.'app.json', str_replace(['{{application_title}}'], [$params['app_mini_title']], file_get_contents($new_dir.DS.'app.json'))); if($status === false) { return DataReturn('基础配置替换失败', -4); } // 小程序额外处理 switch(self::$application_name) { // 微信 case 'weixin' : $ret = self::ExtendHandleWeixin($new_dir); break; // 默认 default : $ret = DataReturn('无需处理', 0); } if(isset($ret['code']) && $ret['code'] != 0) { return $ret; } // 生成压缩包 $zip = new \base\ZipFolder(); if(!$zip->zip($new_dir.'.zip', $new_dir)) { return DataReturn('压缩包生成失败', -100); } // 生成成功删除目录 \base\FileUtil::UnlinkDir($new_dir); return DataReturn('生成成功', 0); } /** * 扩展处理 - 微信 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2018-12-21 * @desc description * @param [string] $new_dir [新得源码包目录] */ private static function ExtendHandleWeixin($new_dir) { // 是否开启好物推荐功能 $common_app_is_good_thing = MyC('common_app_is_good_thing', 0); if($common_app_is_good_thing == 1) { // app.json $file = $new_dir.DS.'app.json'; $data = json_decode(file_get_contents($file), true); if(is_array($data) && isset($data['plugins'])) { $data['plugins']['goodsSharePlugin'] = [ 'version' => '3.2.0', 'provider' => 'wx56c8f077de74b07c', ]; if(file_put_contents($file, JsonFormat($data)) === false) { return DataReturn('好物推荐主配置失败', -50); } } // goods-detail.json $file = $new_dir.DS.'pages'.DS.'goods-detail'.DS.'goods-detail.json'; $data = json_decode(file_get_contents($file), true); if(is_array($data) && isset($data['usingComponents'])) { $data['usingComponents']['share-button'] = 'plugin://goodsSharePlugin/share-button'; if(file_put_contents($file, JsonFormat($data)) === false) { return DataReturn('好物推荐商品配置失败', -51); } } } return DataReturn('配置成功', 0); } /** * 源码包删除 * @author Devil * @blog http://gong.gg/ * @version 1.0.0 * @date 2018-12-21 * @desc description * @param [array] $params [输入参数] */ public static function Delete($params = []) { // 参数 if(empty($params['id'])) { return DataReturn('操作id不能为空', -10); } // 初始化 self::Init($params); // 目录处理 $suffix = ''; if(substr($params['id'], -4) === '.zip') { $name = substr($params['id'], 0, strlen($params['id'])-4); $suffix = '.zip'; } else { $name = $params['id']; } // 防止路径回溯 $path = self::$new_path.DS.htmlentities(str_replace(array('.', '/', '\\', ':'), '', strip_tags($name))).$suffix; // 删除压缩包 if($suffix == '.zip') { $status = \base\FileUtil::UnlinkFile($path); } else { $status = \base\FileUtil::UnlinkDir($path); } if($status) { return DataReturn('删除成功'); } return DataReturn('删除失败或资源不存在', -100); } } ?>