# 1. 不使用AJAX
```
use phpspirit\databackup\BackupFactory;
//自行判断文件夹
$backupdir = '';
if (isset($_POST['backdir']) && $_POST['backdir'] != '') {
$backupdir = $_POST['backdir'];
} else {
$backupdir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR . date('Ymdhis');
}
if (!is_dir($backupdir)) {
mkdir($backupdir, 0777, true);
}
$backup = BackupFactory::instance('mysql', '127.0.0.1:3306', 'test', 'root', 'root');
$backup->setbackdir($backupdir) //设置备份目录
->setonlystructure(true) //设置是否只备份数据结构
->setstructuretable(['md_api_group']) //设置哪些表只备份结构不备份数据 。设置了setonlystructure,这行不起作用
->setvolsize(0.2); //设置分卷大小
do {
$result = $backup->backup();
echo str_repeat(' ', 1000); //这里会把浏览器缓存装满
ob_flush();
flush();
if ($result['totalpercentage'] > 0) {
echo '完成' . $result['totalpercentage'] . '%<br />';
}
} while ($result['totalpercentage'] < 100);
```
# 2. 使用AJAX
> 前端代码
```
<input type="button" value="备份" onclick="backup({})" />
<script>
function backup(predate)
{
$.ajax({
url: 'backupajax.php',
type: 'POST', //POST
async: true, //或false,是否异步
dataType: 'json',
data:predate,
success: function (data, textStatus, jqXHR) {
if (data.totalpercentage < 100)
{
backup(data);
}
}
})
}
</script>
```
> 后端代码
```
use phpspirit\databackup\BackupFactory;
//自行判断文件夹
$backupdir = '';
if (isset($_POST['backdir']) && $_POST['backdir'] != '') {
$backupdir = $_POST['backdir'];
} else {
$backupdir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR . date('Ymdhis');
}
if (!is_dir($backupdir)) {
mkdir($backupdir, 0777, true);
}
$backup = BackupFactory::instance('mysql', '127.0.0.1:3306', 'test', 'root', 'root');
$result = $backup->setbackdir($backupdir)
->setvolsize(0.2)
->setonlystructure(true) //设置是否只备份数据结构
->setstructuretable(['md_api_group']) //设置哪些表只备份结构不备份数据 。设置了setonlystructure,这行不起作用
->ajaxbackup($_POST);
echo json_encode($result);
```
>后端返回数据格式
```
'nowtable' => $nowtable, //当前正在备份的表
'nowtableidx' => $this->_nowtableidx, //当前正在备份表的索引
'nowtableexeccount' => $this->_nowtableexeccount, //当前表已备份条数
'nowtabletotal' => $this->_nowtabletotal, //当前表总条数
'totalpercentage' => (int) $totalpercentage, //总百分比
'tablepercentage' => (int) $this->_nowtablepercentage, //当前表百分比
```
