0

Hi,

I have a backup script for a reseller hosting account. The idea is that all the accounts in a reseller account can be backed up every day to an external server. The only problem is the scripts seems to start backing up all the accounts at once. Is it possible to add some kind of timer to the script to slow down this process i.e. one account backs up - wait say 5 minutes - another account backs up - wait 5 minutes etc.

Any help you can offer would be appreciated.

script:-

<?php 
/*** BEGIN CONFIG ***/ 

$reseller = 'www.reseller_url';//your reseller url 
$whmUser = 'user';//your web host manager user name 
$whmPass = 'pass';//your web host manager password 
$bkUpReseller = false;//backup the reseller account also? (it's not in the listaccts page) 
$resellerCpTheme = 'bluelagoon';//if you want to back up reseller, we need the reseller cpanel theme 

/* 
Destination for the backup... 

$destType = '/';// Home Directory 
$destType = 'ftp';// Remote FTP Server 
$destType = 'passiveftp'; //Remove FTP Server (Passive mode transfer) 
*/ 
$destType = 'ftp';//^^^ 
$destPort = '21'; 
$destServer = 'ftpserver.adr';//only if $destServer = 'ftp' or 'passiveftp' 
$destUser = 'user';//only if $destServer = 'ftp' or 'passiveftp' 
$destPass = 'pass';//only if $destServer = 'ftp' or 'passiveftp' 
$destEmail = 'YOUR_EMAIL_ADDRESS';//optional; cpanel will send an email when generation is complete 

$logType = 'file';//output a log to 'file' or 'echo' or 'none'(no log) 
$logFileName = 'bkup_full_log.txt';//can include a path too; only makes sense if $logType = 'file' 
$useSsl = false;//if true, requires SSL on your site, or modify this script to use the shared SSL; this hasn't really been tested 
$day = strtolower(date('l')); 

$dst_dir = 'backups/'.$day; 
$dir = $dst_dir; 

$conn_id = ftp_connect($destServer) or die("Couldn't connect to $destServer"); 

// try to login 
if (@ftp_login($conn_id, $destUser, $destPass)) 
    { 
    echo "Connected as $destUser@$destServer\n"; 

    $ar_files = ftp_nlist($conn_id, $dst_dir); 
    //var_dump($ar_files); 
    if (is_array($ar_files)) 
        { // makes sure there are files 
        for ($i=0;$i<sizeof($ar_files);$i++) 
            { // for each file 
            $st_file = basename($ar_files[$i]); 
            if($st_file == '.' || $st_file == '..') continue; 
            if (ftp_size($conn_id, $dst_dir.'/'.$st_file) == -1) 
                { // check if it is a directory 
                ftp_rmAll($conn_id,  $dst_dir.'/'.$st_file); // if so, use recursion 
                } 
            else 
                { 
                ftp_delete($conn_id,  $dst_dir.'/'.$st_file); // if not, delete the file 
                } 
            } 
        } 
    $flag = ftp_rmdir($conn_id, $dst_dir); // delete empty directories 

    } 
else 
    { 
    header ("location : http://simplywebhost.com/backup/backup_full.php"); 
    } 

if ( @ftp_chdir( $conn_id, $dir ) ) 
    { 
    $original_directory = ftp_pwd( $conn_id ); 
    // If it is a directory, then change the directory back to the original directory 
    ftp_chdir( $conn_id, $original_directory ); 
    } 
else 
    { 
    // try to create the directory $dir 
    if (ftp_mkdir($conn_id, $dir)) 
        { 
        echo '<p>successfully created '.$dir.'</p>'; 
        } 
    else 
        { 
        echo '<p>There was a problem while creating '.$dir.'</p>'; 
        } 
    } 
// close the connection 
ftp_close($conn_id); 

/* 
A comma-separated list of domain names to backup; 
Leave blank to backup all domains found in reseller WHM 
If not blank, ONLY the domains listed will be backed up. 
If listed, the domains must be listed EXACTLY like they appear on the 
list accounts page in WHM, i.e. usually without 'www.' 
$domains = 'example1.com,example2.net'; 
*/ 
$domains = ''; 

/*** END CONFIG ***/ 

/*** BEGIN MAIN ***/ 
set_time_limit(0); 
$time_start = getMicroTime(); 

if (!extension_loaded('curl')) { 
  dl('php_curl.' .PHP_SHLIB_SUFFIX) or die("Could not load curl extension"); 
} 

if($useSsl) { 
  $protocol = 'https://'; 
  $cpPort = '2083'; 
  $whmPort = '2087'; 
  writeLog("Using SSL.\n"); 
} 
else { 
  $protocol = 'http://'; 
  $cpPort = '2082'; 
  $whmPort = '2086'; 
  writeLog("Not using SSL.\n"); 
}  

$domains = trim($domains); 
if(!empty($domains)){ 
  $chkDoms = true; 
  $domains = explode(',',$domains); 
  foreach($domains as $d){ 
    $domains[] = trim($d); 
  } 
} 
else { 
  $chkDoms = false; 
  $domains = array(); 
} 
//$postFields = urlencode("dest=$destType&server=$destServer&user=$destPass&pass=$destPass&port=$destPort&rdir=$dir&email=$destEmail"); 
$postFields = ''; 
$postArray = array(); 
$postArray['dest'] = $destType; 
$postArray['server'] = $destServer; 
$postArray['user'] = $destUser; 
$postArray['pass'] = $destPass; 
$postArray['email'] = $destEmail; 
$postArray['port'] = $destPort; 
$postArray['rdir'] = $dir; 



$thingy = ''; 
foreach ($postArray as $k=>$v) 
{ 
 $thingy.= "$k=".utf8_encode($v).'&'; 
} 
$postFields = substr($thingy,0,-1); 


//get the WHM 'list accounts' page 
writeLog("Retrieving WHM accounts page...\n"); 
$acctsPage = getByCurl("$protocol$reseller:$whmPort/scripts/fetchcsv",$whmUser,$whmPass); 
//var_dump($acctsPage); 

$accounts = array(); 

$accounts = explode("\n", trim($acctsPage)); 

//var_dump($accounts); 

$account_records = array(); 

foreach ($accounts as $row) { 
    $account_records[] = explode(',', $row); 
} 

writeLog("Parsing accounts...\n"); 

//var_dump($account_records); 

//die('here'); 

foreach($account_records as $match) { 

    $accDom = ''; 
    $accUser = ''; 
    $accTheme = ''; 
    $r = ''; 
    $fullUrl = ''; 

    $accDom = strip_tags(trim($match[0]));//domain 
    if($chkDoms) 
      if(!in_array($accDom,$domains)) continue; 
    $accUser = strip_tags(trim($match[2]));//username 
    $accTheme = strip_tags(trim($match[9]));//cpanel theme 

    $fullUrl = "$protocol$accDom:$cpPort/frontend/$accTheme/backup/dofullbackup.html"; 
    writeLog("Requesting backup of $accDom...\n"); 
    $r =& getByCurl($fullUrl,$accUser,$whmPass,array('CURLOPT_POST'=>$postFields)); 
    if($r === false){ 
      writeLog("Backup request of $accDom caused an unknown error.\n"); 
    } 
    else { 
      writeLog("Backup request of $accDom complete.\n"); 
    } 
    //writeLog("\n\n--$accDom--\n\n$r\n\n------\n\n"); 

} 

if($bkUpReseller){ 
  $fullUrl = "$protocol$reseller:$cpPort/frontend/$resellerCpTheme/backup/dofullbackup.html"; 
  writeLog("Requesting backup of $reseller...\n"); 
  $r =& getByCurl($fullUrl,$accUser,$whmPass,array('CURLOPT_POST'=>$postFields)); 
} 

$time_end = getMicroTime(); 
$time = $time_end - $time_start; 
writeLog("Elapsed time: ".round($time,2)." seconds.\n"); 

/*** BEGIN FUNCTIONS ***/ 

function getByCurl($url, $user = '', $pass = '',$extra = '') { 
  global $useSsl; 

  $ch = curl_init(); 
  //tells curl to save result in a variable instead of outputing to page 
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  curl_setopt($ch, CURLOPT_URL, $url);   
  curl_setopt($ch, CURLOPT_USERPWD, "$user:$pass"); 
  curl_setopt ($ch, CURLOPT_COOKIEJAR, './cookie.txt'); 
  curl_setopt ($ch, CURLOPT_FOLLOWLOCATION,1); 
  if(!empty($extra) && is_array($extra)){ 
    foreach($extra as $opt=>$val){ 
      switch($opt){ 
        case 'CURLOPT_REFERER': 
          curl_setopt($ch,CURLOPT_REFERER,$val); 
        break; 
        case 'CURLOPT_POST': 
        case 'CURLOPT_POSTFIELDS': 
          curl_setopt($ch,CURLOPT_POST,1); 
          curl_setopt($ch,CURLOPT_POSTFIELDS,$val); 
        break; 
      } 
    } 
  } 
  if($useSsl){ 
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); 
  } 
  $result = curl_exec($ch); 
  curl_close($ch); 

  return $result; 
} 

function writeLog($entry) { 
  global $logType,$logFileName; 

  $method = strtolower($logType); 

  $entry = date('r').' - '.$entry; 

  if($method == 'file') { 
    $fp = fopen($logFileName,'ab'); 
    fwrite($fp, $entry); 
    fclose($fp); 
  } elseif($method == 'echo'){ 
      echo nl2br($entry);//browser 

      flush(); 
  } 

  return; 
} 

function getMicroTime(){ 
  list($usec, $sec) = explode(" ",microtime()); 
  return ((float)$usec + (float)$sec); 
} 

$text = file_get_contents('bkup_full_log.txt'); 

echo $text; 

$where_form_is="http".($HTTP_SERVER_VARS["HTTPS"]=="on"?"s":"")."://".$SERVER_NAME.strrev(strstr(strrev($PHP_SELF),"/")); 

$message = stripslashes($text); 

mail("YOUR_EMAIL_ADDRESS","text",$message,"Account Backups"); 

unlink('bkup_full_log.txt'); 

?> 
2
Contributors
1
Reply
2
Views
5 Years
Discussion Span
Last Post by diafol
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.