Files
xinhu/webmain/task/runt/beifenAction.php
2025-03-31 20:54:32 +08:00

114 lines
3.5 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* 运行方式E:\php\php-5.4.14\php.exe E:\IIS\app\xinhu\task.php beifen
* url:http://demo.rockoa.com/task.php?m=beifen|runt
* url:http://127.0.0.1/app/xinhu/task.php?m=beifen|runt
*/
class beifenClassAction extends runtAction
{
//每天cli备份数据为sql文件的
public function defaultAction()
{
if(PHP_SAPI != 'cli') return 'plase cli run';
$alltabls = $this->db->getalltable();
$nobeifne = array(''.PREFIX.'log',''.PREFIX.'logintoken',''.PREFIX.'kqanay',''.PREFIX.'email_cont',''.PREFIX.'reads',''.PREFIX.'dailyfx',''.PREFIX.'todo',''.PREFIX.'city'); //不备份的表;
$data = array();
$strstr = "/*
备份时间:".$this->now."
*/
";
foreach($alltabls as $tabs){
if(in_array($tabs, $nobeifne))continue;
$strstr .= "DROP TABLE IF EXISTS `$tabs`;\n";
$sqla = $this->db->getall('show create table `'.$tabs.'`');
$strstr .= "".$sqla[0]['Create Table'].";\n";
$rows = $this->db->getall('select * from `'.$tabs.'`');
foreach($rows as $k=>$rs){
$vstr = '';
foreach($rs as $k1=>$v1){
if(!isempt($v1))$v1 = str_replace("\n",'\n', $v1);
$v1 = ($v1==null) ? 'null' : "'$v1'";
$vstr.=",$v1";
}
$strstr .= "INSERT INTO `$tabs` VALUES(".substr($vstr,1).");\n";
}
$strstr .= "\n";
}
$rnd = str_shuffle('abcedfghijk').rand(1000,9999);
$file = ''.DB_BASE.'_'.date('Y.m.d.H.i.s').'_'.$rnd.'.sql';
$filepath = ''.UPDIR.'/data/'.$file.'';
$this->rock->createtxt($filepath, $strstr);
//给管理员邮箱发邮件
m('email')->sendmail(''.TITLE.'数据库备份',''.TITLE.'数据库备份'.$this->rock->now.'', 1 , array(), 1, array(
'attachname'=> $file,
'attachpath'=> $filepath,
));
@unlink($filepath);
return 'success';
}
/**
* 备份数据库
* php task.php beifen,create -table=menu
*/
public function createAction()
{
if(PHP_SAPI != 'cli') return 'plase cli run:php task.php beifen,create';
$table = $this->getparams('table');
ob_end_clean();
$path = ''.ROOT_PATH.'/'.DB_BASE.''.$table.'_'.date('YmdHis').'.sql';
$file = fopen($path, 'ab+');
$nobeifne = array(''.PREFIX.'log',''.PREFIX.'logintoken',''.PREFIX.'kqanay',''.PREFIX.'email_cont',''.PREFIX.'dailyfx',''.PREFIX.'reads',''.PREFIX.'todo',''.PREFIX.'city'); //不备份的表;
if($table){
$alltabls[] = ''.PREFIX.''.$table.'';
}else{
$alltabls = $this->db->getalltable();
}
foreach($alltabls as $tabs){
$sqla = $this->db->getall('show create table `'.$tabs.'`');
$createsql = $sqla[0]['Create Table'];
$createsql = str_replace('`'.$tabs.'`', 'IF NOT EXISTS `'.$tabs.'`', $createsql).";\n";
if(!in_array($tabs, $nobeifne)){
$strstr = "\nDROP TABLE IF EXISTS `$tabs`;\n";
$strstr .= $createsql;
fwrite($file,$strstr);
$rows = $this->db->getall('select * from `'.$tabs.'`', function($rs, $cans){
$vstr = '';
foreach($rs as $k1=>$v1){
if(!isempt($v1))$v1 = str_replace("\n",'\n', $v1);
$v1 = ($v1===null) ? 'NULL' : "'$v1'";
$vstr.=",$v1";
}
$vstr = substr($vstr,1);
$tabs = $cans['tabs'];
$strstr = "INSERT INTO `$tabs` VALUES($vstr);\n";
fwrite($cans['file'], $strstr);
return $vstr;
}, array(
'file' => $file,
'tabs' => $tabs
));
echo ''.$tabs.' success count('.count($rows).')'.PHP_EOL;
}else{
fwrite($file,$createsql);
echo ''.$tabs.' break'.PHP_EOL;
}
}
fclose($file);
echo 'success'.PHP_EOL;
}
}