初始化官网代码
This commit is contained in:
@@ -0,0 +1,226 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2018年01月03日
|
||||
* 应用配置控制器
|
||||
*/
|
||||
namespace app\admin\controller\system;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\system\ConfigModel;
|
||||
use core\basic\Config;
|
||||
|
||||
class ConfigController extends Controller
|
||||
{
|
||||
|
||||
private $model;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new ConfigModel();
|
||||
}
|
||||
|
||||
// 应用配置列表
|
||||
public function index()
|
||||
{
|
||||
if (! ! $action = get('action')) {
|
||||
switch ($action) {
|
||||
case 'sendemail':
|
||||
$rs = sendmail($this->config(), get('to'), '【PbootCMS】测试邮件', '欢迎您使用PbootCMS网站开发管理系统!');
|
||||
if ($rs === true) {
|
||||
alert_back('测试邮件发送成功!');
|
||||
} else {
|
||||
error('发送失败:' . $rs);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 修改参数配置
|
||||
if ($_POST) {
|
||||
unset($_POST['upload']); // 去除上传组件
|
||||
foreach ($_POST as $key => $value) {
|
||||
if (! preg_match('/^[\w\-]+$/', $key)) {
|
||||
continue;
|
||||
}
|
||||
$config = array(
|
||||
'debug',
|
||||
'sn',
|
||||
'sn_user',
|
||||
'pagenum',
|
||||
'tpl_html_cache',
|
||||
'tpl_html_cache_time',
|
||||
'session_in_sitepath'
|
||||
);
|
||||
if (in_array($key, $config)) {
|
||||
if ($key == 'tpl_html_cache_time' && ! $value) {
|
||||
$value = 900;
|
||||
} else {
|
||||
$value = post($key);
|
||||
}
|
||||
$this->modConfig($key, $value);
|
||||
} else {
|
||||
$this->modDbConfig($key);
|
||||
}
|
||||
}
|
||||
|
||||
$this->log('修改参数配置成功!');
|
||||
path_delete(RUN_PATH . '/config'); // 清理缓存的配置文件
|
||||
|
||||
switch (post('submit')) {
|
||||
case 'email':
|
||||
success('修改成功!', url('/admin/Config/index' . get_tab('t2'), false));
|
||||
break;
|
||||
case 'baidu':
|
||||
success('修改成功!', url('/admin/Config/index' . get_tab('t3'), false));
|
||||
break;
|
||||
case 'api':
|
||||
success('修改成功!', url('/admin/Config/index' . get_tab('t4'), false));
|
||||
break;
|
||||
case 'watermark':
|
||||
success('修改成功!', url('/admin/Config/index' . get_tab('t5'), false));
|
||||
break;
|
||||
case 'security':
|
||||
success('修改成功!', url('/admin/Config/index' . get_tab('t6'), false));
|
||||
break;
|
||||
case 'urlrule':
|
||||
success('修改成功!', url('/admin/Config/index' . get_tab('t7'), false));
|
||||
break;
|
||||
case 'pagetitle':
|
||||
success('修改成功!', url('/admin/Config/index' . get_tab('t8'), false));
|
||||
break;
|
||||
case 'member':
|
||||
success('修改成功!', url('/admin/Config/index' . get_tab('t9'), false));
|
||||
break;
|
||||
case 'upgrade':
|
||||
success('修改成功!', url('/admin/Upgrade/index' . get_tab('t2'), false));
|
||||
break;
|
||||
default:
|
||||
success('修改成功!', url('/admin/Config/index', false));
|
||||
}
|
||||
}
|
||||
$configs = $this->model->getList();
|
||||
$configs['debug']['value'] = $this->config('debug');
|
||||
$configs['sn']['value'] = $this->config('sn');
|
||||
$configs['sn_user']['value'] = $this->config('sn_user');
|
||||
$configs['session_in_sitepath']['value'] = $this->config('session_in_sitepath');
|
||||
$configs['pagenum']['value'] = $this->config('pagenum');
|
||||
$configs['url_type']['value'] = $this->config('url_type');
|
||||
$configs['tpl_html_cache']['value'] = $this->config('tpl_html_cache');
|
||||
$configs['tpl_html_cache_time']['value'] = $this->config('tpl_html_cache_time');
|
||||
$this->assign('configs', $configs);
|
||||
|
||||
$this->assign('groups', model('admin.member.MemberGroup')->getSelect());
|
||||
|
||||
$this->display('system/config.html');
|
||||
}
|
||||
|
||||
// 修改配置文件
|
||||
private function modConfig($key, $value)
|
||||
{
|
||||
$value = str_replace(' ', '', $value); // 去除空格
|
||||
$value = str_replace(',', ',', $value); // 转换可能输入的中文逗号
|
||||
if (! preg_match('/^[\w\s\,\-]+$/', $value)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$config = file_get_contents(CONF_PATH . '/config.php');
|
||||
if (preg_match("'$key'", $config)) {
|
||||
if (preg_match('/^[0-9]+$/', $value)) {
|
||||
$config = preg_replace('/(\'' . $key . '\'([\s]+)?=>([\s]+)?)[\w\'\"\s,]+,/', '${1}' . $value . ',', $config);
|
||||
} else {
|
||||
$config = preg_replace('/(\'' . $key . '\'([\s]+)?=>([\s]+)?)[\w\'\"\s,]+,/', '${1}\'' . $value . '\',', $config);
|
||||
}
|
||||
} else {
|
||||
$config = preg_replace('/(return array\()/', "$1\r\n\r\n\t'$key' => '$value',", $config); // 自动新增配置
|
||||
}
|
||||
return file_put_contents(CONF_PATH . '/config.php', $config);
|
||||
}
|
||||
|
||||
// 修改数据库配置
|
||||
private function modDbConfig($key)
|
||||
{
|
||||
$value = post($key);
|
||||
|
||||
// 如果开启伪静态时自动拷贝文件
|
||||
if ($key == 'url_rule_type' && $value == 2) {
|
||||
$soft = get_server_soft();
|
||||
if ($soft == 'iis') {
|
||||
if (! file_exists(ROOT_PATH . '/web.config')) {
|
||||
copy(ROOT_PATH . '/rewrite/web.config', ROOT_PATH . '/web.config');
|
||||
}
|
||||
} elseif ($soft == 'apache') {
|
||||
if (! file_exists(ROOT_PATH . '/web.config')) {
|
||||
copy(ROOT_PATH . '/rewrite/.htaccess', ROOT_PATH . '/.htaccess');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 模板目录修改
|
||||
if (($key == 'tpl_html_dir') && $value) {
|
||||
|
||||
// 不允许特殊字符
|
||||
if (! preg_match('/^\w+$/', $value)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$value = basename($value);
|
||||
$htmldir = $this->config('tpl_html_dir');
|
||||
$tpl_path = ROOT_PATH . current($this->config('tpl_dir')) . '/' . model('admin.content.ContentSort')->getTheme();
|
||||
|
||||
if (! $htmldir || ! file_exists($tpl_path . '/' . $htmldir)) {
|
||||
if (! check_dir($tpl_path . '/' . $value, true)) {
|
||||
return;
|
||||
} // 原来没有目录时只创建目录,创建失败时直接不修改
|
||||
} else {
|
||||
if ($value != $htmldir) {
|
||||
if (file_exists($tpl_path . '/' . $value)) {
|
||||
if (dir_copy($tpl_path . '/' . $htmldir, $tpl_path . '/' . $value)) {
|
||||
path_delete($tpl_path . '/' . $htmldir, true); // 删除原来的
|
||||
} else {
|
||||
return; // 修改失败
|
||||
}
|
||||
} else {
|
||||
if (! rename($tpl_path . '/' . $htmldir, $tpl_path . '/' . $value)) {
|
||||
return; // 修改失败
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($key == 'home_upload_ext') {
|
||||
// 不允许特殊扩展
|
||||
if (preg_match('/(php|jsp|asp|exe|sh|cmd|vb|vbs)/i', $value)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// 数据分割处理
|
||||
$hander = array(
|
||||
'content_keyword_replace',
|
||||
'ip_deny',
|
||||
'ip_allow'
|
||||
);
|
||||
if (in_array($key, $hander) && $value) {
|
||||
$value = str_replace("\r\n", ",", $value); // 替换回车
|
||||
$value = str_replace(",", ",", $value); // 替换中文逗号分割符
|
||||
}
|
||||
|
||||
if ($this->model->checkConfig("name='$key'")) {
|
||||
$this->model->modValue($key, $value);
|
||||
} elseif ($key != 'submit' && $key != 'formcheck') {
|
||||
// 自动新增配置项
|
||||
$data = array(
|
||||
'name' => $key,
|
||||
'value' => $value,
|
||||
'type' => 2,
|
||||
'sorting' => 255,
|
||||
'description' => ''
|
||||
);
|
||||
return $this->model->addConfig($data);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,248 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||||
* @author XingMeng
|
||||
* @email hnxsh@foxmail.com
|
||||
* @date 2017年5月9日
|
||||
* 数据库管理,只支持MySQL
|
||||
*/
|
||||
namespace app\admin\controller\system;
|
||||
|
||||
use core\basic\Controller;
|
||||
use app\admin\model\system\DatabaseModel;
|
||||
|
||||
class DatabaseController extends Controller
|
||||
{
|
||||
|
||||
private $model;
|
||||
|
||||
private $dbauth;
|
||||
|
||||
function __construct()
|
||||
{
|
||||
$this->model = new DatabaseModel();
|
||||
$this->dbauth = $this->config('database');
|
||||
}
|
||||
|
||||
// 数据库管理
|
||||
public function index()
|
||||
{
|
||||
switch ($this->dbauth['type']) {
|
||||
case 'mysqli':
|
||||
case 'pdo_mysql':
|
||||
$this->assign('db', 'mysql');
|
||||
$this->assign('tables', $this->model->getList());
|
||||
break;
|
||||
case 'sqlite':
|
||||
case 'pdo_sqlite':
|
||||
$this->assign('db', 'sqlite');
|
||||
break;
|
||||
default:
|
||||
error('当前配置的数据库类型不支持在线管理!');
|
||||
}
|
||||
$this->display('system/database.html');
|
||||
}
|
||||
|
||||
// 数据库修改
|
||||
public function mod()
|
||||
{
|
||||
if (! $_POST) {
|
||||
alert_back('非法访问!', - 1);
|
||||
}
|
||||
|
||||
$submit = post('submit', 'letter', true);
|
||||
|
||||
switch ($submit) {
|
||||
case 'yh':
|
||||
$tables = self::getTableList();
|
||||
if (! $tables)
|
||||
alert_back('请选择数据表!');
|
||||
if ($this->model->optimize(implode(',', $tables))) {
|
||||
// $this->log('优化数据库表成功!');
|
||||
success('优化成功!', - 1);
|
||||
} else {
|
||||
// $this->log('优化数据库表失败!');
|
||||
error('优化失败!', - 1);
|
||||
}
|
||||
break;
|
||||
case 'xf':
|
||||
$tables = self::getTableList();
|
||||
if (! $tables)
|
||||
alert_back('请选择数据表!');
|
||||
if ($this->model->repair(implode(',', $tables))) {
|
||||
// $this->log('修复数据库表成功!');
|
||||
success('修复成功!', - 1);
|
||||
} else {
|
||||
// $this->log('修复数据库表失败!');
|
||||
error('修复失败!', - 1);
|
||||
}
|
||||
break;
|
||||
case 'bf':
|
||||
$tables = self::getTableList();
|
||||
if (! $tables)
|
||||
alert_back('请选择数据表!');
|
||||
if ($this->backupTable($tables)) {
|
||||
$this->log('备份数据库表成功!');
|
||||
success('备份表成功!', - 1);
|
||||
} else {
|
||||
$this->log('备份数据库表失败!');
|
||||
error('备份失败!', - 1);
|
||||
}
|
||||
break;
|
||||
case 'bfdb':
|
||||
if ($this->backupDB()) {
|
||||
$this->log('备份数据库成功!');
|
||||
success('备份数据库成功!', - 1);
|
||||
} else {
|
||||
$this->log('备份数据库失败!');
|
||||
error('备份失败!', - 1);
|
||||
}
|
||||
break;
|
||||
case 'bfsqlite':
|
||||
if (copy(DOC_PATH . $this->dbauth['dbname'], DOC_PATH . STATIC_DIR . '/backup/sql/' . get_uniqid() . '_' . date('YmdHis') . '.db')) {
|
||||
$this->log('备份数据库成功!');
|
||||
success('备份数据库成功!', - 1);
|
||||
} else {
|
||||
$this->log('备份数据库失败!');
|
||||
error('备份失败!', - 1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 备份数据表
|
||||
public function backupTable($tables)
|
||||
{
|
||||
$backdir = date('YmdHis');
|
||||
foreach ($tables as $table) {
|
||||
$sql = '';
|
||||
$sql .= $this->header(); // 备份文件头部说明
|
||||
$sql .= $this->tableSql($table); // 表结构信息
|
||||
$fields = $this->model->getFields($table); // 表字段
|
||||
$field_num = $this->model->getFieldNum($table); // 字段数量
|
||||
$all_data = $this->model->getAll($table); // 读取全部数据
|
||||
$sql .= $this->dataSql($table, $fields, $field_num, $all_data); // 生成语句
|
||||
$filename = $backdir . "/" . get_uniqid() . "_" . $backdir . "_" . $table . '.sql'; // 写入文件
|
||||
$result = $this->writeFile($filename, $sql);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
// 备份整个数据库
|
||||
public function backupDB()
|
||||
{
|
||||
$sql = '';
|
||||
$sql .= $this->header(); // 备份文件头部说明
|
||||
$sql .= $this->dbSql(); // 数据库创建语句
|
||||
|
||||
$tables = $this->model->getTables(); // 获取所有表
|
||||
foreach ($tables as $table) { // 表结构及数据
|
||||
$sql .= $this->tableSql($table); // 表结构信息
|
||||
$fields = $this->model->getFields($table); // 表字段
|
||||
$field_num = $this->model->getFieldNum($table); // 字段数量
|
||||
$all_data = $this->model->getAll($table); // 读取全部数据
|
||||
if ($all_data) {
|
||||
$sql .= $this->dataSql($table, $fields, $field_num, $all_data); // 生成数据语句
|
||||
}
|
||||
$sql .= '-- --------------------------------------------------------' . PHP_EOL . PHP_EOL;
|
||||
}
|
||||
// 写入文件
|
||||
$filename = get_uniqid() . '_' . date('YmdHis') . '_' . $this->dbauth['dbname'] . '.sql';
|
||||
return $this->writeFile($filename, $sql);
|
||||
}
|
||||
|
||||
// 插入数据库备份基础信息
|
||||
private function header()
|
||||
{
|
||||
$sql = '-- Online Database Management SQL Dump' . PHP_EOL;
|
||||
$sql .= '-- 数据库名: ' . $this->dbauth['dbname'] . PHP_EOL;
|
||||
$sql .= '-- 生成日期: ' . date('Y-m-d H:i:s') . PHP_EOL;
|
||||
$sql .= '-- PHP 版本: ' . phpversion() . PHP_EOL . PHP_EOL;
|
||||
|
||||
$sql .= 'SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";' . PHP_EOL;
|
||||
$sql .= 'SET time_zone = "+08:00";' . PHP_EOL;
|
||||
$sql .= 'SET NAMES utf8;' . PHP_EOL . PHP_EOL;
|
||||
|
||||
$sql .= '-- --------------------------------------------------------' . PHP_EOL . PHP_EOL;
|
||||
return $sql;
|
||||
}
|
||||
|
||||
// 数据库创建语句
|
||||
private function dbSql()
|
||||
{
|
||||
$sql = '';
|
||||
$sql .= "--" . PHP_EOL;
|
||||
$sql .= "-- 数据库名 `" . $this->dbauth['dbname'] . '`' . PHP_EOL;
|
||||
$sql .= "--" . PHP_EOL . PHP_EOL;
|
||||
|
||||
// 如果数据库不存在则创建
|
||||
$sql .= "CREATE DATABASE IF NOT EXISTS `" . $this->dbauth['dbname'] . '` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;' . PHP_EOL;
|
||||
// 选择数据库
|
||||
$sql .= "USE `" . $this->dbauth['dbname'] . "`;" . PHP_EOL . PHP_EOL;
|
||||
$sql .= '-- --------------------------------------------------------' . PHP_EOL . PHP_EOL;
|
||||
return $sql;
|
||||
}
|
||||
|
||||
// 表结构语句
|
||||
private function tableSql($table)
|
||||
{
|
||||
$sql = '';
|
||||
$sql .= "--" . PHP_EOL;
|
||||
$sql .= "-- 表的结构 `" . $table . '`' . PHP_EOL;
|
||||
$sql .= "--" . PHP_EOL . PHP_EOL;
|
||||
|
||||
$sql .= $this->model->tableStru($table); // 表创建语句
|
||||
return $sql;
|
||||
}
|
||||
|
||||
// 数据语句
|
||||
private function dataSql($table, $fields, $fieldNnum, $data)
|
||||
{
|
||||
if (! $data)
|
||||
return;
|
||||
$sql = '';
|
||||
$sql .= "--" . PHP_EOL;
|
||||
$sql .= "-- 转存表中的数据 `" . $table . "`" . PHP_EOL;
|
||||
$sql .= "--" . PHP_EOL;
|
||||
$sql .= PHP_EOL;
|
||||
|
||||
// 循环每个字段下面的内容
|
||||
|
||||
$sql .= "INSERT INTO `" . $table . "` (" . implode(',', $fields) . ") VALUES" . PHP_EOL;
|
||||
$brackets = "(";
|
||||
foreach ($data as $value) {
|
||||
$sql .= $brackets;
|
||||
$comma = "";
|
||||
for ($i = 0; $i < $fieldNnum; $i ++) {
|
||||
$sql .= ($comma . "'" . decode_string($value[$i]) . "'");
|
||||
$comma = ",";
|
||||
}
|
||||
$sql .= ")";
|
||||
$brackets = "," . PHP_EOL . "(";
|
||||
}
|
||||
$sql .= ';' . PHP_EOL . PHP_EOL;
|
||||
return $sql;
|
||||
}
|
||||
|
||||
// 写入文件
|
||||
private function writeFile($filename, $content)
|
||||
{
|
||||
$sqlfile = DOC_PATH . STATIC_DIR . '/backup/sql/' . $filename;
|
||||
check_file($sqlfile, true);
|
||||
if (file_put_contents($sqlfile, $content)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// 获取并检查表名称
|
||||
private function getTableList()
|
||||
{
|
||||
$list = post('list');
|
||||
foreach ($list as $key => $value) {
|
||||
if (! preg_match('/^[\w]+$/', $value)) {
|
||||
unset($list[$key]);
|
||||
}
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user