📄 database.inc.php
字号:
<?php
##
# Project: PHPDisk
# This is NOT a freeware, use is subject to license terms.
#
# Site: http://www.phpdisk.com
#
# $Id: database.inc.php 201 2009-03-02 06:57:21Z along $
#
# Copyright (C) 2008-2009 PHPDisk Team. All Rights Reserved.
#
##
if(!defined('IN_PHPDISK') || !defined('IN_ADMINCP')) {
exit('[PHPDisk] Access Denied');
}
phpdisk_admin();
define('SCRIPT_NAME',$item);
require_once PHPDISK_ROOT.'includes/database.func.php';
require_once lang('adm_'.SCRIPT_NAME);
$lang = array_merge($pub_lang,$lang);
switch($action){
case 'optimize':
$q = $db->list_tables($configs['dbname']);
if($q){
while ($rs = $db->fetch_row($q)) {
$tables[][] = $rs[0];
}
}
$db->free($q);
unset($rs);
if($task =='optimize'){
for($i=0;$i<count($tables);$i++){
$db->query("OPTIMIZE TABLE `".$tables[$i][0]."`;");
}
$sysmsg[] = $lang['optimize_success'];
redirect(urr("admincp","item=database&action=optimize"),$sysmsg);
}else{
require_once template(SCRIPT_NAME,ADMIN_TPL_NAME);
}
break;
case 'backup':
if($task =='backup'){
$tables = gpc('tables','P',array());
$tableid = gpc('tableid','G',0);
$fileid = (int)gpc('fileid','G',0);
$startfrom = (int)gpc('startfrom','G',0);
$random = gpc('random','G','');
$sizelimit = (int)gpc('sizelimit','GP',0);
$fileid = $fileid ? $fileid : 1;
$bak_dir = PHPDISK_ROOT.'./system/data/';
$default_index = $bak_dir.'index.htm';
if(!is_dir($bak_dir)){
mkdir($bak_dir,0777);
}
if(!file_exists($default_index)){
write_file($default_index,'PHPDisk');
}
if($tables && $fileid==1){
if(!isset($tables) || !is_array($tables)){
$sysmsg[] = $lang['please_select_backup_db'];
redirect($_SERVER['HTTP_REFERER'],$sysmsg);
}
$random = random(8);
cache_write('backup_temp_tables.php', $tables);
}else{
if(!$tables = cache_read('backup_temp_tables.php')){
$sysmsg[] = $lang['cannot_write_backup_database_list'];
redirect($_SERVER['HTTP_REFERER'],$sysmsg);
}
}
$sqldump = '';
$tableid = $tableid ? ($tableid - 1) : 0;
$startfrom = $startfrom ? $startfrom : 0;
$tablenumber = count($tables);
for($i = $tableid; $i < $tablenumber && strlen($sqldump) < $sizelimit * 1000; $i++){
$sqldump .= sql_dumptable($tables[$i], $startfrom, strlen($sqldump));
$startfrom = 0;
}
if(trim($sqldump)){
$sqldump = "# Database backup data,auto-generated by PHPDisk. ".LF."# -------------------------------------------".LF.LF.$sqldump;
$tableid = $i;
$filename = $configs['dbname'].'_'.date('Ymd').'_'.$random.'_'.$fileid.'.sql';
$fileid++;
$bakfile = $bak_dir.$filename;
if(!is_writable($bak_dir)){
$sysmsg[] = $lang['sql_cannot_write'];
redirect($_SERVER['HTTP_REFERER'],$sysmsg);
}
file_put_contents($bakfile, $sqldump);
$gourl = 'item=database&action=backup&task=backup&sizelimit='.$sizelimit.'&tableid='.$tableid.'&fileid='.$fileid.'&startfrom='.$startrow.'&random='.$random;
$sysmsg[] = $lang['backup_file'].': '.$filename.' ... '.$lang['backup_write_success'];
$sysmsg[] = '<span class="txtred">'.$lang['backup_database_warning'].'</span>';
redirect(urr('admincp',$gourl),$sysmsg);
}else{
cache_delete('backup_temp_tables.php');
$sysmsg[] = $lang['backup_database_success'];
redirect(urr('admincp','item=database&action=restore'),$sysmsg);
}
}else{
$size = $bktables = $bkresults = $results = array();
$k = 0;
$totalsize = 0;
$sql = "SHOW TABLES FROM ".$configs['dbname'];
$q = $db->query($sql);
while($rs = $db->fetch_row($q)){
$tables[$k] = $rs[0];
$count = $db->fetch_one_array("SELECT count(*) as number FROM $rs[0] WHERE 1");
$results[$k] = $count['number'];
$bktables[$k] = $rs[0];
$bkresults[$k] = $count['number'];
$q2 = $db->query("SHOW TABLE STATUS FROM `".$configs['dbname']."` LIKE '".$rs[0]."'");
$s = $db->fetch_array($q2);
$size[$k] = round($s['Data_length']/1024/1024, 2);
$totalsize += $size[$k];
$k++;
}
$db->free($q);
unset($rs);
require_once template(SCRIPT_NAME,ADMIN_TPL_NAME);
}
break;
case 'restore':
if($task =='restore'){
$pre = gpc('pre','G','');
$fileid = (int)gpc('fileid','G',0);
if($filename && get_extension($filename)=='sql'){
$sql_file = PHPDISK_ROOT.'./system/data/'.$filename;
if(!file_exists($sql_file)){
$sysmsg[] = $sql_file.' ...... '.$lang['file_not_exists'];
redirect(urr("admincp","item=database&action=restore"),$sysmsg);
}
$sql = file_get_contents($sql_file);
sql_execute($sql);
$sysmsg[] = $lang['restore_database_success'];
redirect(urr("admincp","item=database&action=backup"),$sysmsg);
}else{
$fileid = $fileid ? $fileid : 1;
$filename = $pre.$fileid.'.sql';
$sql_file = './system/data/'.$filename;
if(file_exists($sql_file)){
$sql = file_get_contents($sql_file);
sql_execute($sql);
$fileid++;
$sysmsg[] = $lang['backup_file'].': '.$filename.' ...... '.$lang['restore_sucess'];
$sysmsg[] = '<span class="txtred">'.$lang['restore_database_warning'].'</span>';
$gourl = "item=database&action=restore&task=restore&pre=$pre&fileid=$fileid";
redirect(urr("admincp",$gourl),$sysmsg);
}else{
$sysmsg[] = $lang['restore_database_success'];
redirect(urr("admincp","item=database&action=restore"),$sysmsg);
}
}
}else{
$sqlfiles = glob('./system/data/*.sql');
if(is_array($sqlfiles)){
$prepre = '';
$info = $infos = array();
foreach($sqlfiles as $k => $sqlfile)
{
preg_match("/([a-z0-9_]+_[0-9]{8}_[0-9a-z]{8}_)([0-9]+)\.sql/i",basename($sqlfile),$num);
$info['filename'] = basename($sqlfile);
$info['filesize'] = round(filesize($sqlfile)/(1024*1024), 2);
$info['maketime'] = date('Y-m-d H:i:s', filemtime($sqlfile));
$info['pre'] = $num[1];
$info['number'] = $num[2];
if(!$k) $prebgcolor = '#CCCCCC';
if($info['pre'] == $prepre){
$info['bgcolor'] = $prebgcolor;
}else{
$info['bgcolor'] = $prebgcolor == '#CCCCCC' ? '#E4EDF9' : '#CCCCCC';
}
$prebgcolor = $info['bgcolor'];
$prepre = $info['pre'];
$infos[] = $info;
}
}
require_once template(SCRIPT_NAME,ADMIN_TPL_NAME);
}
break;
case 'delete':
$pre = gpc('pre','G','');
$sqlfiles = glob('./system/data/*.sql');
if(is_array($sqlfiles)){
foreach($sqlfiles as $k => $sqlfile){
if(preg_match("/($pre)([0-9]+)\.sql/i",basename($sqlfile))){
$sysmsg[] = $lang['delete'].' '.$sqlfile.' ...... '.$lang['success'];
@unlink($sqlfile);
}
}
}
redirect(urr("admincp","item=database&action=restore"),$sysmsg);
break;
}
?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -