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 ( ! $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> " );
?>

 

 

 

/Files/Task/databak.rar

转载于:https://www.cnblogs.com/Task/archive/2010/08/23/1806296.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值