适用于:下载到本地、小型数据库、限制了外连的远程mysql、需要下载的任务多、asp的mdb备份。
如果数据较大,修改php.ini的设置最大执行时间。
dc.php 在本地运行的程序,databak.asp 和databak.php 上面到服务器上的文件。
dc.php
<?php
$id=$_GET['id'];
$id=empty($id)?"1":$id;
$dbrow=array();
$dbrow[1]=array('sql','abc','http://www.abc.com/data/databak.php');
$dbrow[2]=array('sql','abcdef','http://www.abcdef.com/data/databak.php');
$dbrow[3]=array('mdb','195458','http://www.195458.com/m/databak.asp');
$dbrow[4]=array('mdb','sdw1','http://www.sdw1.com/databak.asp');
$maxid=count($dbrow);
header("Content-Type:text/html;charset=utf-8");
$filename="databak/".date("Ymd");
if($id==1){//第一次运行 建立目录和删除5天前的备份
function makedir($dirpath){
if(!$dirpath) return 0;
$dirpath=str_replace("\\","/",$dirpath); $mdir="";
foreach(explode("/",$dirpath) as $val){
$mdir.=$val."/";
if($val==".."||$val==".")continue;
if(!is_dir($mdir)&&!file_exists($mdir)){
if(!@mkdir($mdir,0755)){
exit("创建目录 [".$mdir."]失败.");
}
}
}
return true;
}
function delDirAndFile($dirName){//删除目录及文件
if($handle=opendir($dirName)){
while(false!==($item = readdir($handle))){
if($item !="."&&$item!=".."){
if(is_dir( "$dirName/$item")){
delDirAndFile( "$dirName/$item");
}else{ unlink("$dirName/$item"); }
}
}
closedir( $handle );
rmdir( $dirName );
}
}
$url=getcwd()."/databak/";
$handle = opendir($url);
while(false!==($file = readdir($handle))){//遍历删除5天前的目录
if($file!="."&&$file!=".."&&is_dir($url."/".$file)){
if(date("Ymd")-$file>5){delDirAndFile($url."/".$file);};
}
}
if(is_dir($filename)){
delDirAndFile(getcwd()."/".$filename);//是否已存在则删除
}
makedir($filename);//建立目录
}
$href="";
if($maxid>=$id){
$c=file_get_contents($dbrow[$id][2]);
/*
打开远程备份文件。http://a.com/data/databak.php
sql 直接返回压缩过的sql语句,mdb返回备份文件的链接地址 http://a.com/data/databak/20100821.rar
*/
if($dbrow[$id][0]=='sql'){ $c=gzinflate($c); }//解压sql语句
if(!empty($c)){
if($dbrow[$id][0]=='sql'){
/*直接保存sql语句到文件,进入下一个任务*/
file_put_contents($filename.'/'.$dbrow[$id][1].'.'.$dbrow[$id][0].'',$c);
$href="window.location.href='?id=".($id+1)."';";
}elseif($dbrow[$id][0]=='mdb'){
$mdb=file_get_contents($c);//下载mdb
if(!empty($mdb)){
sleep(3);//延迟3秒操作...
file_put_contents($filename.'/'.$dbrow[$id][1].'.'.$dbrow[$id][0].'',$mdb);//保存mdb,进入下一步
$href="window.location.href='?id=".($id+1)."';";
}else{
$href="setTimeout(function(){window.location.reload();},3000);";//下载mdb失败3秒后刷新页面,重新下载
}
}
}else{
$href="setTimeout(function(){window.location.reload();},3000);";//任务执行失败,重新刷新页面执行任务
}
}else{
$href="alert('备份完成!确定后关闭窗口');window.opener=null;window.open('','_self','');window.close();";
}
exit("<script type='text/javascript'>{$href}</script>");
?>
$id=$_GET['id'];
$id=empty($id)?"1":$id;
$dbrow=array();
$dbrow[1]=array('sql','abc','http://www.abc.com/data/databak.php');
$dbrow[2]=array('sql','abcdef','http://www.abcdef.com/data/databak.php');
$dbrow[3]=array('mdb','195458','http://www.195458.com/m/databak.asp');
$dbrow[4]=array('mdb','sdw1','http://www.sdw1.com/databak.asp');
$maxid=count($dbrow);
header("Content-Type:text/html;charset=utf-8");
$filename="databak/".date("Ymd");
if($id==1){//第一次运行 建立目录和删除5天前的备份
function makedir($dirpath){
if(!$dirpath) return 0;
$dirpath=str_replace("\\","/",$dirpath); $mdir="";
foreach(explode("/",$dirpath) as $val){
$mdir.=$val."/";
if($val==".."||$val==".")continue;
if(!is_dir($mdir)&&!file_exists($mdir)){
if(!@mkdir($mdir,0755)){
exit("创建目录 [".$mdir."]失败.");
}
}
}
return true;
}
function delDirAndFile($dirName){//删除目录及文件
if($handle=opendir($dirName)){
while(false!==($item = readdir($handle))){
if($item !="."&&$item!=".."){
if(is_dir( "$dirName/$item")){
delDirAndFile( "$dirName/$item");
}else{ unlink("$dirName/$item"); }
}
}
closedir( $handle );
rmdir( $dirName );
}
}
$url=getcwd()."/databak/";
$handle = opendir($url);
while(false!==($file = readdir($handle))){//遍历删除5天前的目录
if($file!="."&&$file!=".."&&is_dir($url."/".$file)){
if(date("Ymd")-$file>5){delDirAndFile($url."/".$file);};
}
}
if(is_dir($filename)){
delDirAndFile(getcwd()."/".$filename);//是否已存在则删除
}
makedir($filename);//建立目录
}
$href="";
if($maxid>=$id){
$c=file_get_contents($dbrow[$id][2]);
/*
打开远程备份文件。http://a.com/data/databak.php
sql 直接返回压缩过的sql语句,mdb返回备份文件的链接地址 http://a.com/data/databak/20100821.rar
*/
if($dbrow[$id][0]=='sql'){ $c=gzinflate($c); }//解压sql语句
if(!empty($c)){
if($dbrow[$id][0]=='sql'){
/*直接保存sql语句到文件,进入下一个任务*/
file_put_contents($filename.'/'.$dbrow[$id][1].'.'.$dbrow[$id][0].'',$c);
$href="window.location.href='?id=".($id+1)."';";
}elseif($dbrow[$id][0]=='mdb'){
$mdb=file_get_contents($c);//下载mdb
if(!empty($mdb)){
sleep(3);//延迟3秒操作...
file_put_contents($filename.'/'.$dbrow[$id][1].'.'.$dbrow[$id][0].'',$mdb);//保存mdb,进入下一步
$href="window.location.href='?id=".($id+1)."';";
}else{
$href="setTimeout(function(){window.location.reload();},3000);";//下载mdb失败3秒后刷新页面,重新下载
}
}
}else{
$href="setTimeout(function(){window.location.reload();},3000);";//任务执行失败,重新刷新页面执行任务
}
}else{
$href="alert('备份完成!确定后关闭窗口');window.opener=null;window.open('','_self','');window.close();";
}
exit("<script type='text/javascript'>{$href}</script>");
?>