setName('admin') ->setDescription('精简文件和数据库'); } protected function execute(Input $input, Output $output) { try { $rootPath = app()->getRootPath(); $this->dirDelete($rootPath . 'public' . DIRECTORY_SEPARATOR . 'template' . DIRECTORY_SEPARATOR); $this->dirDelete($rootPath . 'public' . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR, false); $this->dirDelete($rootPath . 'app' . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR); $this->dirDelete($rootPath . 'app' . DIRECTORY_SEPARATOR . 'index' . DIRECTORY_SEPARATOR); $this->dirDelete($rootPath . 'app' . DIRECTORY_SEPARATOR . 'mobile' . DIRECTORY_SEPARATOR); $tableName = ['link', 'ad_type', 'ad', 'debris', 'page', 'article', 'cate', 'picture', 'product', 'download', 'team', 'message']; $module = \app\common\model\Module::where('table_name', 'in', $tableName)->select(); if ($module) { $module = $module->toArray(); $prefix = \think\facade\Config::get('database.connections.mysql.prefix'); foreach ($module as $k => $v) { \app\common\model\Field::where('module_id', $v['id'])->delete(); \app\common\model\AuthRule::where('name', $v['model_name'])->whereOr('name', 'like', $v['model_name'] . '/%')->delete(); \app\common\model\Module::where('table_name', 'in', $tableName)->delete(); $this->dirDelete($rootPath . 'app' . DIRECTORY_SEPARATOR . 'admin' . DIRECTORY_SEPARATOR . 'controller' . DIRECTORY_SEPARATOR . $v['model_name'] . '.php'); $this->dirDelete($rootPath . 'app' . DIRECTORY_SEPARATOR . 'common' . DIRECTORY_SEPARATOR . 'model' . DIRECTORY_SEPARATOR . $v['model_name'] . '.php'); $this->dirDelete($rootPath . 'app' . DIRECTORY_SEPARATOR . 'admin' . DIRECTORY_SEPARATOR . 'validate' . DIRECTORY_SEPARATOR . $v['model_name'] . '.php'); $sql = 'DROP TABLE IF EXISTS `' . $prefix . $v['table_name'] . '`'; \think\facade\Db::query($sql); } } // 指令输出 $output->writeln('END'); } catch (\Exception $e) { // 指令输出 $output->writeln('ERROR:' . $e->getMessage()); } } /** * 删除目录及文件 * @param string $path 要删除的目录 * @param bool $delSelf 是否删除当前目录 * @return bool */ private function dirDelete(string $path, bool $delSelf = true) { // 如果是目录则继续 if (is_dir($path)) { // 扫描一个文件夹内的所有文件夹和文件并返回数组 $p = scandir($path); foreach ($p as $val) { // 排除目录中的.和.. if ($val != "." && $val != "..") { // 如果是目录则递归子目录,继续操作 if (is_dir($path . $val)) { // 子目录中操作删除文件夹和文件 $this->dirDelete($path . $val . DIRECTORY_SEPARATOR); // 目录清空后删除空文件夹 @rmdir($path . $val . DIRECTORY_SEPARATOR); } else { // 如果是文件直接删除 unlink($path . $val); } } } if ($delSelf) { // 刪除空文件夾 @rmdir($path); } } else if (is_file($path)) { // 如果是文件直接删除 unlink($path); } } }