php 本地 备份远程mysql和mdb 多任务只执行一次

适用于:下载到本地、小型数据库、限制了外连的远程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(!$dirpathreturn 0;
        
$dirpath=str_replace("\\","/",$dirpath);    $mdir="";
        
foreach(explode("/",$dirpathas $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>");
?>

 

 

 

/Files/Task/databak.rar

posted @ 2010-08-23 11:42  Task  阅读(695)  评论(0编辑  收藏  举报