Files
xinhu/webmain/model/beifenModel.php
2025-03-31 20:54:32 +08:00

149 lines
4.4 KiB
PHP

<?php
class beifenClassModel extends Model
{
/**
* 备份到upload/data下
*/
public function start()
{
$alltabls = $this->db->getalltable();
$nobeifne = array(''.PREFIX.'log',''.PREFIX.'logintoken',''.PREFIX.'kqanay',''.PREFIX.'email_cont',''.PREFIX.'dailyfx',''.PREFIX.'todo',''.PREFIX.'city',''.PREFIX.'kqjcmd'); //不备份的表;
$beidir = ''.UPDIR.'/data/'.date('Y.m.d.H.i.s').'.';
$beidir .= substr(str_shuffle(md5($this->rock->jm->getRandkey())),0,15);
foreach($alltabls as $tabs){
if(in_array($tabs, $nobeifne))continue;
$rows = $this->db->getall('select * from `'.$tabs.'`');
$data = array();
$sqla = $this->db->getall('show create table `'.$tabs.'`');
$createsql = $sqla[0]['Create Table'];
$data[$tabs] = array(
//'fields' => $fields,
'createsql' => $createsql,
'data' => $rows,
);
$fzshu = 0;
if(isset($rows[0]))foreach($rows[0] as $k1=>$v1)$fzshu++;
//if($fzshu==0){
// $fields = $this->db->gettablefields($tabs);
// $fzshu = count($fields);
//}
$file = ''.$tabs.'_'.$fzshu.'_'.count($rows).'.json';
//$str = $this->rock->jm->encrypt(json_encode($data));
$str = json_encode($data);
$bo = $this->rock->createtxt(''.$beidir.'/'.$file.'', $str);
if(!$bo){echo '无权限写入:'.$beidir.'';break;return false;}
}
return true;
}
/**
* 获取备份的数据
*/
public function getbfdata($file, $path='')
{
$str = array();
if($path=='')$path = ''.ROOT_PATH.'/'.UPDIR.'/data/'.$file.'';
if(file_exists($path)){
$cont = file_get_contents($path);
if(substr($cont, 0, 2) != '{"'){
$cont = $this->rock->jm->mcrypt_decrypt($cont);
}
$str = json_decode($cont, true);
}
return $str;
}
public function updatefabric($cont, $ylx=0)
{
$bos = $this->updatefabricfile($cont, $ylx);
if(!$bos)return 'dberr:'.$this->db->lasterror();
return 'ok';
}
public function updatefabricfile($cont='', $ylx=0)
{
if($cont=='')return false;
$data = json_decode($cont, true);
foreach($data as $tabe=>$da){
$table = str_replace('xinhu_', PREFIX, $tabe);
if($ylx==1)$table = PREFIX.$tabe;
$fields = $da['fields'];
$nowfiel= $this->getfieldsa($table);
$str = '';
$sql = '';
if(!$nowfiel){
$str = '`id` int(11) NOT NULL AUTO_INCREMENT';
foreach($fields as $k=>$frs){
$fname = $frs['name'];
$nstr = $this->getfielstr($frs);
if($fname!='id')$str.=','.$nstr.'';
}
$str .=',PRIMARY KEY (`id`)';
$sql = "CREATE TABLE `$table`($str)ENGINE=".getconfig('db_engine','MyISAM')." DEFAULT CHARSET=utf8";
if(isset($da['createsql'])){
$sql = $da['createsql'];
$sql = str_replace('`xinhu_','`'.PREFIX.'', $sql);
}
}else{
foreach($fields as $k=>$frs){
$fname = $frs['name'];
if($fname=='id')continue;
$nstr = $this->getfielstr($frs);
$frs['explain'] = '';
$nstr1 = $this->getfielstr($frs);
if(!isset($nowfiel[$fname])){
$str.=',add '.$nstr.'';
}else{
$ofrs = $nowfiel[$fname]; //系统上字段类型
//$ostr = $this->getfielstr($ofrs);
$ofrs['explain'] = '';
$ostr1 = $this->getfielstr($ofrs);
$lxarr= array('text','mediumtext','bigint');
//如果自己字段长度大于官网就不更新
if($frs['type']==$ofrs['type'] && !isempt($ofrs['lens']) && $ofrs['lens']>$frs['lens']){
}else if($nstr1 != $ostr1 && !in_array($ofrs['type'], $lxarr) ){
$str.=',MODIFY '.$nstr.'';
}
}
}
if($str!=''){
$str = substr($str, 1);
$sql = "alter table `$table` $str";
}
}
if($sql!=''){
$bo = $this->db->query($sql);
if($bo)$this->rock->debugs($sql, 'upgmysql');
if(!$bo)return false;
}
}
return true;
}
private function getfieldsa($table)
{
$nowfiel= $this->db->gettablefields($table);
$a = array();
foreach($nowfiel as $k=>$rs){
$a[$rs['name']] = $rs;
}
return $a;
}
private function getfielstr($rs)
{
$str = '`'.$rs['name'].'` '.$rs['types'].'';
$dev = $rs['dev'];
$isnull = $rs['isnull'];
if($isnull=='NO')$str.=' NOT NULL';
if(is_null($dev)){
if($isnull != 'NO')$str.=' DEFAULT NULL';
}else{
$str.=" DEFAULT '$dev'";
}
if(!isempt($rs['explain']))$str.=" COMMENT '".$rs['explain']."'";
return $str;
}
}