适用于:下载到本地、小型数据库、限制了外连的远程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> " );
?>