• 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

  • 相关阅读:
    Python中xlrd和xlwt模块使用方法
    python正则表达式中含有变量的写法
    python中取整的几种方法
    python request 获取cookies value值的方法
    MySQL数据库初识
    三次登录验证以及购物车
    常用设计模式学习
    test0805
    生成器和各种推导式
    第一类对象 闭包 迭代器
  • 原文地址:https://www.cnblogs.com/Task/p/1806296.html
Copyright © 2020-2023  润新知