* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301, USA. */ /** ensure this file is being included by a parent file */ defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' ); /* * Process the logout request * name: doLogout() * @param * @return */ function doLogout() { if (function_exists('session_unregister')) { @session_unregister('clone'); } unset($_SESSION['clone']); mosRedirect("index.php?option=com_cloner", ""); } /*Error printing * * name: E_print * @param * @return */ function E_print($message) { print "
$message
"; } /* * Will send a log output to file * name: addLog * @param * @return */ function addXLog($message){ global $flog, $_CONFIG; if($_CONFIG['debug']){ $message = strip_tags($message); @fwrite($flog, $message."\n"); } } function openXLog(){ global $flog, $_CONFIG; if($_CONFIG['debug']){ $flog = @fopen($_CONFIG['logfile'],"a"); addXLog("Log output started"); } } function closeXLog(){ global $flog, $_CONFIG; if($_CONFIG['debug']){ addXLog("Log output finished"); @fclose($flog); } } function deleteXLog(){ global $_CONFIG; if($_CONFIG['debug']){ @unlink($_CONFIG['logfile']); } } /*Simple redirect function*/ function mosRedirect($url, $msg = "") { echo ""; exit; } function fdefault() { HTML_cloner::_FDefault(); } function config($option) { global $mosConfig_absolute_path, $_CONFIG, $config_file; if (@$_REQUEST['action'] == 'save') { //print_r($_REQUEST);exit; $databases_incl_list = ""; if (is_array($_REQUEST['databases_incl'])) foreach ($_REQUEST['databases_incl'] as $database) { $databases_incl_list .= $database . ","; } if ($fp = @fopen($config_file, 'w')) { $cfg = ''; fwrite($fp, $cfg); fclose($fp); $msg = LM_MSG_BACK_1; if ($_REQUEST['cron_save_as'] != "") { $fcron = $_CONFIG['multiple_config_dir'] . "/" . $_REQUEST['cron_save_as'] . ".php"; if ($fp = @fopen($fcron, "w")) { fwrite($fp, $cfg); fclose($fp); } else { $msg = "Unable to save ".$fcron." file, please make sure the folder is writeable!"; } } //exit; mosRedirect('index2.php?option=' . $option . "&task=config", $msg); } else { $msg = "ERROR... Unable to write to ".realpath($config_file).", please make it writeable!"; E_print($msg); } } HTML_cloner::Config($option); } //## JoomlaCloner Language Manager function translator($option) { global $mosConfig_absolute_path, $lang_array, $lang_dir; $langs = array(); $cid = $_REQUEST['cid']; $files = $_REQUEST['files']; if (is_array($cid)) foreach ($cid as $value) { $langs[] = $files[$value]; } if ($_REQUEST['task'] == 'del_lang') { foreach ($langs as $lang) { @unlink($lang_dir . "/" . $lang . ".php"); } $msg = LM_LANG_MSG_DEL; mosRedirect('index2.php?option=' . $option . "&task=lang", $msg); } HTML_cloner::Translator($option, $lang_array); } function translator_add($option, $task) { global $_CONFIG, $lang_array, $lang_dir; if ($task == 'add_lang_new') { $lfile = $lang_dir . "/" . strtolower($_REQUEST['lname']) . ".php"; if (file_exists($lfile)) { $msg = "Language " . $_REQUEST['lname'] . " already exists!"; } elseif ($fp = @fopen($lfile, 'w')) { fwrite($fp, ""); fclose($fp); $msg = "Language " . ucfirst($_REQUEST['language']) . " successfully added!"; } else { $msg = "File $lfile could not be updated, please check it's permissions'!"; } mosRedirect('index2.php?option=' . $option . "&task=lang", $msg); } HTML_cloner::Translator_Add($option); } function translator_edit($option, $task) { global $_CONFIG, $lang_array, $lang_dir; if (($task == 'save_lang') || ($task == 'save_lang_apply')) { $lfile = $lang_dir . "/" . $_REQUEST['language'] . ".php"; if ($_REQUEST['language'] == 'english') { if ($fp = @fopen($lfile, 'w')) { fwrite($fp, stripslashes($_REQUEST['def_content'])); fclose($fp); $msg = "Language " . ucfirst($_REQUEST['language']) . " successfully updated!"; } else { $msg = "File $lfile could not be created, please check it's permissions'!"; } if ($task == 'save_lang_apply') mosRedirect('index2.php?option=' . $option . "&task=edit_lang&langx=" . $_REQUEST['language'], $msg); else mosRedirect('index2.php?option=' . $option . "&task=lang", $msg); } else { $lfile = $_REQUEST['lfile']; $ldata = $_REQUEST['lang']; if ($fp = @fopen($lfile, 'w')) { fwrite($fp, "<" . "?php\n"); foreach ($ldata as $key => $value) { fwrite($fp, "define(\"" . $key . "\",\"" . stripslashes($value) . "\");\n"); } fwrite($fp, "?" . ">"); fclose($fp); $msg = "Language " . ucfirst($_REQUEST['language']) . " successfully updated!"; } else { $msg = "File $lfile could not be updated, please check it's permissions'!"; } } if ($task == 'save_lang_apply') mosRedirect('index2.php?option=' . $option . "&task=edit_lang&langx=" . $_REQUEST['language'], $msg); else mosRedirect('index2.php?option=' . $option . "&task=lang", $msg); } $content = ""; $lang = ""; $cid = $_REQUEST['cid']; $files = $_REQUEST['files']; if (is_array($cid)) foreach ($cid as $value) { $lang = $files[$value]; } if ($_REQUEST['langx']) { $lang = $_REQUEST['langx']; } if ($fp = fopen($lang_dir . "/english.php", 'r')) { while (!feof($fp)) { $content .= fread($fp, 1024); } fclose($fp); } $file = $lang_dir . "/" . $lang . ".php"; $dfile = $lang_dir . "/english.php"; if ($lang == 'english') { HTML_cloner::Translator_Edit_DEFAULT($option, $content, $file, $lang); } else { $def_data = get_lang_data($dfile); $cur_data = get_lang_data($file); $data = array_merge($def_data, $cur_data); HTML_cloner::Translator_Edit($option, $data, $def_data, $file, $lang); } } function get_lang_data($file) { global $_CONFIG; if ($fp = fopen($file, 'r')) { while (!feof($fp)) { $content .= fread($fp, 1024); } fclose($fp); } $data = array(); $tmp = explode("define(\"", $content); foreach ($tmp as $key => $value) { $temp = explode("\",", $value); $tst = explode("\");", $temp[1]); $data[$temp[0]] = substr(trim($tst[0]), 1, strlen($tst[0])); } return $data; } function get_avalaible_langs() { global $_CONFIG, $lang_dir; $lang_arr = array(); if ($handle = @opendir($lang_dir)) { /* This is the correct way to loop over the directory. */ while (false !== ($file = readdir($handle))) if (($file != 'index.html') && ($file != '..') && ($file != '.')) { $lang_arr[] = str_replace(".php", "", $file); } closedir($handle); } return $lang_arr; } function goRecurseDatabases(){ global $_CONFIG; include_once("classes/mysqlBackup.class.php"); $return = array(); $data['dbHostname'] = $_CONFIG['mysql_host']; $data['dbUsername'] = $_CONFIG['mysql_user']; $data['dbPassword'] = $_CONFIG['mysql_pass']; $data['dbDatabase'] = $_CONFIG['mysql_database']; $data['excludedTables'] = ""; $data['recordsPerSession'] = $_CONFIG['recordsPerSession']; $data['dbCompatibility'] = $_REQUEST['dbbackup_comp']; //version compatibility $data['dbDropSyntax'] = $_REQUEST['dbbackup_drop']; //Add DROP Syntax $data['TEMP_DUMP_FILE'] = $_CONFIG['temp_dir']."/database-sql.sql"; $data['TEMP_DBPROCESS_FILE'] = $_CONFIG['temp_dir']."/.database"; if($_REQUEST['mode'] == "start"){ //do the initial table readings //foreach($_REQUEST['excltables'] as $value) //check if any tables are excluded, we will only export their structure $data['excludedTables'] = $_REQUEST['excltables']; //foreach($_REQUEST['excltables'] as $value) //check if any other databases are included $extradb = $_REQUEST['databases_incl']; $db = new DB(); $db->init($data, 1); $db->writeTempFile(); $db->disconnect(); //building the .database temp file if(is_array($extradb)) foreach($extradb as $database){ $data['dbDatabase'] = $database; $data['TEMP_DUMP_FILE'] = $_CONFIG['temp_dir']."/".$data['dbDatabase']."-sql.sql"; $db = new DB(); $db->init($data); $db->writeTempFile(); $db->disconnect(); } return; } //we start the backup process for the actual database $data['dbDatabase'] = ""; $dumpfile = ""; $data['dbCompatibility'] = $_REQUEST['dbbackup_comp']; //version compatibility $data['dbDropSyntax'] = $_REQUEST['dbbackup_drop']; //Add DROP Syntax $startAtLine = intval($_REQUEST['startAtLine']); $startAtRecord = intval($_REQUEST['startAtRecord']); $dumpfile = $_REQUEST['dumpfile']; $db = new DB(); $db->init($data); $records = $db->resetcountRecords(); while(($records < $_CONFIG['recordsPerSession']) and (!$return['finished']) and(!$return['newDump']) and(!$return['endDump'])){ $return = $db->processIncremental($startAtLine, $startAtRecord, $dumpfile); $records = $db->getcountRecords(); $startAtLine = $return['startAtLine']; $startAtRecord = $return['startAtRecord']; $dumpfile = $return['dumpfile']; } /*if($return['newDump']) print_r($return);*/ /*$startAtLine = $return['startAtLine']; $startAtRecord = $return['startAtRecord']; $dumpfile = $return['dumpfile'];*/ $return['dbbackup_comp'] = $_REQUEST['dbbackup_comp']; $return['dbbackup_drop'] = $_REQUEST['dbbackup_drop']; if($return['databaseName'] == "###enddump###") $return['databaseName'] = ""; $db->disconnect(); echo json_encode($return); exit; } function goRecurseFiles(){ global $_CONFIG; include_once("classes/fileRecursion.php"); $status['finished'] = "1"; $status['task'] = $_REQUEST['task']; $handle = new fileRecursion(); $dataInit['TEMP_PERM'] = $_CONFIG['temp_dir']."/perm.txt"; $dataInit['TEMP_EXCL'] = $_CONFIG['exfile']; $dataInit['TEMP_D_ARR'] = $_CONFIG['temp_dir']."/.dir"; $dataInit['TEMP_DIR'] = $_CONFIG['clonerPath']; $dataInit['START_DIR'] = $_CONFIG['backup_path']; $dataInit['EXCLUDE_FILES_SIZE'] = $_CONFIG['excludeFilesSize']; $dataInit['TEMP_OVERSIZED_FILE'] = $_CONFIG['temp_dir']."/.oversized_files"; $handle->setData($dataInit); if($_REQUEST['mode'] == 'start') $handle->init($_CONFIG['backup_start_path']); else $handle->init(); $handle->start(); $handle->end(); $data = $handle->countPermFiles(); $status['size'] = $data['size']; $status['tfiles'] = $data['count']; $status['mode'] = ""; if(!$handle->isQueueFinished()) $status['finished'] = "0"; else{ //recurse finished, lets return the excluded files by size if(intval($_CONFIG['EXCLUDE_FILES_SIZE']) > -1){ $status['overlimit'] = $handle->getOverLimitFiles(); } } echo json_encode($status); $handle->close(); exit; } function showBackups($option) { // ---------------------------------------------------------- // Generate a selectable list of the files in Backup Folder // ---------------------------------------------------------- global $_CONFIG; if (!is_dir($_CONFIG['clonerPath'])) { E_print("Your backup directory " . $_CONFIG['clonerPath'] . " is not correct! Unable to continue..."); return; } // initialise list arrays, directories and files separately and array counters for them $d_arr = array(); $d = 0; $f_arr = array(); $f = 0; $s_arr = array(); $s = 0; // obtain the list of backup archive files getBackupFiles($d_arr, $f_arr, $s_arr, $d, $f); // load presentation layer HTML_cloner::showBackups($f_arr, $s_arr, $_CONFIG['clonerPath'], $option); } function moveBackup($option) { global $task; $files_out = array(); if (is_array($_REQUEST[files])) { foreach ($_REQUEST[files] as $key => $value) if ($_REQUEST[cid][$key] != "") $files_out[] = $value; } if ($_REQUEST['action'] == "connect") { $ret = start_connect($_REQUEST[files]); } if (!$ret) HTML_cloner::TransferForm($option, $files_out); } function start_connect($files) { global $task, $_CONFIG; if (($_REQUEST[task] == 'move') || ($_REQUEST[task2] == 'move')) { } else { $source_file[0] = "restore/XCloner.php"; $destination_file[0] = $_REQUEST[ftp_dir] . "/XCloner.php"; $source_file[1] = "restore/TAR.php"; $destination_file[1] = $_REQUEST[ftp_dir] . "/TAR.php"; } foreach ($files as $file) { $source_file[] = $_CONFIG['clonerPath'] . "/" . $file; $destination_file[] = $_REQUEST[ftp_dir] . "/" . $file; } list($fhost, $fport) = explode(":", $_REQUEST[ftp_server]); if ($fport == "") $fport = '21'; $ftp_timeout = '3600'; // set up basic connection if (!$_CONFIG[secure_ftp]) { $conn_id = ftp_connect($fhost, (int)$fport, (int)$ftp_timeout); $connect = "Normal"; } else { $conn_id = ftp_ssl_connect($fhost, (int)$fport, (int)$ftp_timeout); $connect = "Secure"; } // login with username and password $login_result = @ftp_login($conn_id, $_REQUEST[ftp_user], $_REQUEST[ftp_pass]); // check connection if ((!$conn_id) || (!$login_result)) { echo "" . LM_MSG_BACK_2 . ""; echo "Attempted to connect to " . $_REQUEST[ftp_server] . " for user " . $_REQUEST[ftp_user] . ""; return; } else { //echo "Connected to $_REQUEST[ftp_server], for user $_REQUEST[ftp_user]"; } if ($_CONFIG[system_ftptransfer] == 1) { // turn passive mode on @ftp_pasv($conn_id, true); $mode = "Passive"; } else { // turn passive mode off @ftp_pasv($conn_id, false); $mode = "Active"; } echo "Connected to $connect ftp server $_REQUEST[ftp_server] - $mode Mode
"; for ($i = 0; $i < sizeof($source_file); $i++) { echo "
Moving source file " . $source_file[$i] . ""; // upload the file if (!$_REQUEST['ftp_inct']) { $ret = ftp_put($conn_id, $destination_file[$i], $source_file[$i], FTP_BINARY); if ($ret) echo "
Upload success to $destination_file[$i] ...
"; else { echo "FTP upload has failed for file $destination_file[$i] ! Stopping ....
"; return; } } if ($_REQUEST['ftp_inct']) { $size = get_filesize($source_file[$i]); $dsize = ftp_size($conn_id, $destination_file[$i]); $perc = sprintf("%.2f", ($dsize * 100) / $size); echo " - uploaded $perc% from $size bytes
"; $ret = ftp_nb_put($conn_id, $destination_file[$i], $source_file[$i], FTP_BINARY, FTP_AUTORESUME); // check upload status if ($ret == FTP_FAILED) { echo "FTP upload has failed for file $destination_file[$i] ! Stopping ....
"; return; } else { $j = 1; while ($ret == FTP_MOREDATA) { // Do whatever you want //echo ". "; // Continue uploading... $ret = ftp_nb_continue($conn_id); if ($j++ % 500 == 0) { @ftp_close($conn_id); echo ""; return 1; break; } } if ($ret == FTP_FINISHED) { echo "Upload success to $destination_file[$i] ...
"; } } } } // close the FTP stream @ftp_close($conn_id); $redurl = $_REQUEST[ftp_url] . "/XCloner.php"; if ((substr($redurl, 0, 7) != "http://") && (substr($redurl, 0, 8) != "https://")) $redurl = "http://" . trim($redurl); if ($_REQUEST['ftp_inct']) { if ($_REQUEST['refresh_done'] != 1) { echo ""; return 1; } } else { $_REQUEST['refresh_done'] = 1; } if ($_REQUEST['refresh_done'] == 1) if (($_REQUEST[task] == 'move') || ($_REQUEST[task2] == 'move')) { echo "

" . LM_MSG_BACK_3 . "

"; return 1; } else { echo "

" . LM_MSG_BACK_4 . "
click here to continue...

"; return 1; } return 0; } function copyls($source, $dest) { $handle = fopen($dest, "a"); if ($handle) { fclose($handle); return 1; } else { return 0; } } function action($option) { global $_CONFIG; $userfile = $_CONFIG['baDownloadPath'] . "/" . $_REQUEST[file]; $localfile = $_CONFIG['clonerPath'] . "/" . $_REQUEST[file]; if ($_REQUEST[action] == 'delete') { if (@unlink($userfile)) $msg = LM_MSG_BACK_5; else $msg = LM_MSG_BACK_6; } elseif ($_REQUEST[action] == 'copy') { if (@copyls($localfile, $userfile)) $msg = LM_MSG_BACK_7; else $msg = LM_MSG_BACK_8; } mosRedirect('index2.php?option=' . $option . "&task=view", $msg); } function clone_rename($option) { global $_CONFIG; if ($_REQUEST[task] == 'rename_save') { $files = $_REQUEST['cfile']; foreach ($files as $key => $value) { @rename($_CONFIG[clonerPath] . "/" . $_REQUEST[cfile][$key], $_CONFIG[clonerPath] . "/" . $_REQUEST[dfile][$key]); @rename($_CONFIG[baDownloadPath] . "/" . $_REQUEST[cfile][$key], $_CONFIG[baDownloadPath] . "/" . $_REQUEST[dfile][$key]); } $msg = LM_MSG_BACK_9; mosRedirect('index2.php?option=' . $option . "&task=view", $msg); } $files = array(); foreach ($_REQUEST[cid] as $key => $value) { $files[] = $_REQUEST[files][$key]; } HTML_Cloner::rename($files, $option); } function downloadBackup($file) { global $_CONFIG; $file = realpath($_CONFIG['clonerPath'] . "/$file"); //First, see if the file exists if (!is_file($file)) { die("404 File $file was not found!"); } //File Info $len = get_filesize($file); $filename = basename($file); $file_extension = strtolower(substr(strrchr($filename, "."), 1)); //Setam Content-Type-urile pentru fisierul in cauza switch ($file_extension) { default: $ctype = "application/force-download"; } smartReadFile($file, $filename); exit; } function smartReadFile($location, $filename, $mimeType='application/octet-stream') { if(!file_exists($location)) { header ("HTTP/1.0 404 Not Found"); return; } $size=filesize($location); $time=date('r',filemtime($location)); $fm=@fopen($location,'r'); if(!$fm) { header ("HTTP/1.0 505 Internal server error"); return; } $begin=0; $end=$size; if(isset($_SERVER['HTTP_RANGE'])) { if(preg_match('/bytes=\h*(\d+)-(\d*)[\D.*]?/i', $_SERVER['HTTP_RANGE'], $matches)) { $begin=intval($matches[0]); if(!empty($matches[1])) $end=intval($matches[1]); } } if($begin>0||$end<$size) header('HTTP/1.0 206 Partial Content'); else header('HTTP/1.0 200 OK'); header("Content-Type: $mimeType"); header('Cache-Control: public, must-revalidate, max-age=0'); header('Pragma: no-cache'); header('Accept-Ranges: bytes'); header('Content-Length:'.($end-$begin)); header("Content-Range: bytes $begin-$end/$size"); header("Content-Disposition: inline; filename=$filename"); header("Content-Transfer-Encoding: binary\n"); header("Last-Modified: $time"); header('Connection: close'); $cur=$begin; fseek($fm,$begin,0); while(!feof($fm)&&$cur<$end&&(connection_status()==0)) { print fread($fm,min(1024*16,$end-$cur)); $cur+=1024*16; } } function confirmBackup($option) { // ---------------------------------------------------------- // Routine to display a confirmation screen prior to backup // containing the selectable folders and a confirmation for // backing up the database // ---------------------------------------------------------- global $_CONFIG; if (!is_writeable($_CONFIG['clonerPath'])) { E_print("Your backup directory $_CONFIG[clonerPath] is not writeable or does not exists(Backup Store Path:)!
Please note, the ./administrator/backups/ folder needs to be created and made writeable!"); return; } // Initialise list arrays, directories and files separately and array counters for them $excludedFolders = array(); $d_arr = array(); $d = 0; $ds_arr = array(); $f_arr = array(); $f = 0; $s_arr = array(); $s = 0; $d_arr[$d] = $_CONFIG['backup_path']; //if($_CONFIG['select_folders']==0){ // obtain the list of folders by recursing the mambo file store //recurseFiles($d_arr, $ds_arr, $f_arr, $s_arr, $d, $f, $s, $excludedFolders, ''); //} if ($_CONFIG['select_folders'] == 2) if ($fp = @fopen($_CONFIG['exfile'], 'w')) { $excl = explode("\r\n", $_CONFIG['cron_exclude']); foreach ($excl as $value) if ($value != "") { $value = str_replace($_CONFIG['backup_path'], "", $value); if ($value[0] != '/') $value = '/' . $value; if ((substr($value, strlen($value) - 1, 1) == '/') && (strlen($value) != 1)) $value = substr($value, 0, strlen($value) - 1); fwrite($fp, $value . "\r\n"); } fclose($fp); } // load presentation layer if ($option != 'nohtml') HTML_cloner::confirmBackups($d_arr, $ds_arr, $_CONFIG['clonerPath'], $option); else return $d_arr; } function deleteBackups($cid, $option) { // ---------------------------------------------------------- // Routine to delete the Backup Sets selected in the list // backup sets screen // ---------------------------------------------------------- global $_CONFIG; // Cycle through all the selected Backups and Deleted them foreach ($cid as $key => $value) { $file = $_CONFIG['clonerPath'] . '/' . $_REQUEST['f' . $value]; if (unlink($file)) { $msg .= $_REQUEST['f' . $value] . ' - ' . LM_DELETE_FILE_SUCCESS; } else { $msg .= $_REQUEST['f' . $value] . ' - ' . LM_DELETE_FILE_FAILED; } } // redirect to list screen //$msg = _DELETE_FILE_SUCCESS; mosRedirect('index2.php?option=' . $option . "&task=view", $msg); } function generateBackuprefresh($cid, $option, $backup_filename, $json = 0) { global $_CONFIG; global $databases_incl, $back_path, $sql_file, $perm_file, $htaccess; $log = ""; $backup_file = $_CONFIG['backup_store_path']."/".$backup_filename; $perm_file = $_CONFIG['temp_dir'] . "/perm.txt"; $lines = $_REQUEST['lines']; $fperm = fopen($perm_file, "r"); $startf = (int)$_REQUEST['startf']; $endf = $startf + $_CONFIG['backup_refresh_number']; $excluded_cmd = ""; if ($fp = @fopen($_REQUEST['excl_manual'], "r")) { while (!feof($fp)) $excluded_cmd .= fread($fp, 1024); fclose($fp); } $url = "index2.php?option=com_cloner&task=refresh&json=$json&startf=$endf&lines=$lines&backup=$backup_filename&excl_manual=" . $_REQUEST['excl_manual']; if ($endf >= $lines) $endf = $lines; else $log .= "Continue link: click here>>
\n"; if ((int)$lines != 0) $percent = sprintf("%d", ($endf * 100) / (int)$lines); $log .= "Total process: $percent% out of $lines files
\n"; $log .= "Processing files $startf to $endf for backup file $backup_file!
\n"; $log .= "Current backup size: " . getFileSizeText(get_filesize($backup_file)) . "

\n"; chdir($_CONFIG['backup_path']); if ($fperm) { while ((!feof($fperm)) && ($line < $endf)) { $line++; $buffer = explode("|", fgets($fperm, 4096)); if (($line < $endf) && ($line >= $startf)) { $log .= "\n
$line. "; if (($buffer[0] != "") && (is_file($buffer[0]))) { $file = $buffer[0]; //## appending files $log .= "file - $file"; if(intval($_CONFIG['splitBackupSize']) > 0){ $fileSize = intval($buffer[2]); $backupSize = get_filesize($backup_file); $limit = $_CONFIG['splitBackupSize']*1024*1024; //MB limit //check if the size is bigger than $_CONFIF['splitBackupSize'] and split backup if(($fileSize+$backupSize) > $limit){ $backup_filename = getNewBackupName($backup_filename); //exit; $backup_file = $_CONFIG['backup_store_path']."/".$backup_filename; } } if (!$_CONFIG['mem']) { //### CREATE BACKUP USING TAR LIBRARIES $file_path_full = $buffer[0]; { //$return = PclTarAddList($backup_file, array($file_path_full), '', $_CONFIG['backup_path'], "tar"); $tar_object = new Archive_Tar($backup_file); $return = $tar_object->addModify(array($file_path_full), '', $_CONFIG['backup_path']); } //### END TAR ######################### } else { //### CREATE BACKUP USING SERVER UTILITIES $file = str_replace(" ", "\ ", $file); exec($_CONFIG[tarpath] . " $excluded_cmd -" . $_CONFIG['tarcompress'] . "vf $backup_file --update $file"); //### END SERVER UTILITIES } } else { $log .= "directory - " . $buffer[0] . ""; } } } //exit; $newFileSize = get_filesize($backup_file); $log .= "\n
New backup size: " . $newFileSize . "
\n"; addXLog($log); if ($endf >= $lines) { //# ALL DONE $log .= LM_MSG_BACK_11; @fclose($fperm); } else { //# REDIRECTING @fclose($fperm); $log .= "
All done, redirecting... or click here "; $log .= " "; } } else { $log .= "Unable to continue, could not open file $perm_file for reading!"; } if ($endf >= $lines) { $back_path = $_CONFIG['backups_dir']; @unlink($back_path . "/database-sql.sql"); @unlink($back_path . "/perm.txt"); @unlink($back_path . "/htaccess.txt"); @unlink($back_path . "/.excl"); @unlink($back_path . "/.excl_tar"); $status['finished'] = 1; } if(!$json){ echo $log; } else{ $status['backupSize'] = $newFileSize; $status['percent'] = $percent; $status['option'] = 'com_cloner'; $status['task'] = 'refresh'; $status['json'] = $json; $status['startf'] = $endf; $status['lines'] = $lines; $status['backup'] = $backup_filename; $status['excl_manual'] = $_REQUEST['excl_manual']; echo json_encode($status); exit; } return; } function generateBackup($cid, $option) { // ---------------------------------------------------------- // Routine to generate recurse a folder structure and record // the files, their sizes and parent folders // ---------------------------------------------------------- global $_CONFIG; // generate database backup if required if (!$_CONFIG['enable_db_backup']) { $backupDatabase = 0; } else { $backupDatabase = $_REQUEST['dbbackup']; } if ($_REQUEST[cron_access]) { $_CONFIG['backup_refresh'] = 0; $_REQUEST['dbbackup_drop'] = $_CONFIG['cron_sql_drop']; if ($_CONFIG[cron_btype] == '1') $backupDatabase = 0; } if (!is_writeable($_CONFIG['clonerPath'])) { E_print("Your backup directory " . $_CONFIG['clonerPath'] . " is not writeable or does not exists!"); return; } if (!is_writeable($_CONFIG['backups_dir'])) { E_print("Required sql backup directory " . $_CONFIG['backups_dir'] . " is not writeable or does not exists!"); return; } // generate the backup set filename //$urlinfo = parse_url($mosConfig_live_site); //$domainname = strtolower(str_replace('.','_',$urlinfo[host])); //$domainname= $_SERVER['HTTP_HOST']; $domainname = $_CONFIG['mosConfig_live_site']; if (($_CONFIG['mem']) && ($_CONFIG['backup_refresh'])) { $f_ext = '.tar'; $_CONFIG['tarcompress'] = ''; } elseif ($_CONFIG['backup_compress']) { $f_ext = '.tgz'; $_CONFIG['tarcompress'] = 'z'; } else { $f_ext = '.tar'; $_CONFIG['tarcompress'] = ''; } /*if($_CONFIG['backup_refresh']){ $f_ext = ".tar"; } elseif($_REQUEST[cron_dbonly]){ $f_ext = ".tar"; } else{ $f_ext = ".tgz"; }*/ if ($_REQUEST['bname'] == "") { if ($backupDatabase == 1) { if ($_REQUEST['dbbackup_drop']) { $filename1 = 'backup_' . date("Y-m-d_H-i") . '_' . $domainname . '-sql-drop' . $f_ext; } else { $filename1 = 'backup_' . date("Y-m-d_H-i") . '_' . $domainname . '-sql-nodrop' . $f_ext; } } else $filename1 = 'backup_' . date("Y-m-d_H-i") . '_' . $domainname . '-nosql' . $f_ext; } else { $filename1 = $_REQUEST['bname'] . $f_ext; } //check if comments are set if($_REQUEST['backupComments'] != "") writeComments($_REQUEST['backupComments']); //we created the backup name, but skip sql at this step, we will do it incrementally if(($_CONFIG['refresh_mode']) and (!$_REQUEST[cron_access])) //we skip the backup at this process,we will do it incrementally $backupDatabase = 0; $sql_file = array(); if ($backupDatabase == 1) { $tables = array(); $tables[0] = 'all'; $excltables = $_REQUEST['excltables']; $sql_file[] = doBackup($tables, 'sql', 'local', 'both', $_SERVER['HTTP_USER_AGENT'], $_CONFIG['backups_dir'], $databaseResult, 'database', $excltables, $_CONFIG['mysql_database']); $databaseResult = "" . $_CONFIG['mysql_database'] . ": " . $databaseResult; //############# ADD multiple databases ####################### $databases_incl = $_REQUEST['databases_incl']; if (is_array($databases_incl)) { foreach ($databases_incl as $database_name) if ($database_name != '') { $excltables = ""; mysql_query("USE $database_name"); $sql_file[] = doBackup($tables, 'sql', 'local', 'both', $_SERVER['HTTP_USER_AGENT'], $_CONFIG['backups_dir'], $databaseResult_incl, $database_name, $excltables, $database_name); $databaseResult .= "
$database_name: " . $databaseResult_incl; } mysql_query("USE " . $_CONFIG['mysql_database']); } } else { #$databaseResult = LM_DATABASE_EXCLUDED; } $excluded = array(); $data = ""; $excluded[] = $_CONFIG['backups_dir'] . "/" . $filename1; if ($_REQUEST['cron_access']) { $data = $_CONFIG['cron_exclude']; } elseif ($_CONFIG[select_folders] == 1) { $data = $_REQUEST['exluded']; } //#### START THE EXCLUSION FILTER if (($fp = @fopen($_CONFIG['exfile'], "r")) && (!$_REQUEST['cron_access'])) { while (!feof($fp)) { $data .= fread($fp, 1024); } fclose($fp); } if (sizeof($_REQUEST[cid]) > 0) $data .= implode("\r\n", $_REQUEST[cid]); $_COOKIES = explode("\r\n", $data); if (is_array($_COOKIES)) foreach ($_COOKIES as $key => $value) if ($value != "") { $value = str_replace($_CONFIG['backup_path'], "", $value); if ($value[0] != '/') $value = '/' . $value; if ((substr($value, strlen($value) - 1, 1) == '/') && (strlen($value) != 1)) $value = substr($value, 0, strlen($value) - 1); if (($value != "") && ($value != '/administrator/backups')) { if (trim($value) != '/administrator') $excluded[] = str_replace("//", "/", $_CONFIG['backup_path'] . "/" . $value); else { if ($handle = opendir($_CONFIG['backup_path'] . '/administrator')) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != ".." && $file != "backups") { $excluded[] = str_replace("//", "/", $_CONFIG['backup_path'] . "/administrator/" . $file); } } closedir($handle); } } } } //### END EXCLUSION FILTER if (!$_CONFIG['add_backups_dir']) { // initialise list arrays, directories and files separately and array counters for them $d_arr = array(); $d = 0; $f_arr = array(); $f = 0; $s_arr = array(); $s = 0; getBackupFiles($d_arr, $f_arr, $s_arr, $d, $f); $i = 0; while ($i < sizeof($f_arr)) { $excluded[] = $_CONFIG['clonerPath'] . "/" . $f_arr[$i]; $i++; } } // obtain list of folders included in the backup $includeFolder = array(); //print_r($excluded);exit; //$includeFolder = confirmBackup('nohtml'); //initialise list arrays, directories and files separately and array counters for them $d_arr = array(); $d = 0; $ds_arr = array(); $f_arr = array(); $f = 0; $s_arr = array(); $s = 0; $mdir = 0; if(($_REQUEST['cron_access']) or (!$_CONFIG['refresh_mode'])){ $perm_file = $_CONFIG['backups_dir'] . "/perm.txt"; @unlink($perm_file); $fperm = fopen($perm_file, "w"); for ($i = 0; $i < sizeof($excluded); $i++) { $excluded[$i] = str_replace("//", "/", $excluded[$i]); } // obtain the list of files by recursing the mambo file store addXLog("Starting the file scanning process"); recurseFiles($d_arr, $ds_arr, $f_arr, $s_arr, $d, $f, $s, $includeFolder, '', $excluded, $fperm); @fclose($fperm); @chmod($perm_file, 0777); } // format total archive size $originalSize = getFileSizeText($s); // extend the file locations to include the full path for ($i = 0; $i < count($f_arr); $i++) { if (!file_exists($f_arr[$i])) { unset($f_arr[$i]); } } //if((file_exists($perm_file))&&(!in_array($perm_file, $f_arr))) // $f_arr[] = $perm_file; // add sql file to the backup if ($_REQUEST[cron_access]) { if (is_array($sql_file)) foreach ($sql_file as $key => $sqlfile) if (($backupDatabase == 1) && (!in_array($_CONFIG['backups_dir'] . $sqlfile, $f_arr))) $f_arr[] = $sqlfile; } $filename = $_CONFIG['clonerPath'] . '/' . $filename1; $f_arr = array_unique($f_arr); // create the Zip file from the fileset array @unlink($filename); $perm_lines = 0; $handle = @fopen($perm_file, "r"); if ($handle) { while (!feof($handle)) { fgets($handle, 4096); $perm_lines++; } fclose($handle); } addXLog("Done recursion, found ". $perm_lines." files"); if (!$_CONFIG['mem']) { //### START TAR MANUAL MODE ############################################################ if ($_CONFIG['backup_refresh']) { $f_arr = array($_CONFIG['backups_dir'] . "/index.html"); $fp=@fopen($_CONFIG['backups_dir'] . "/index.html" , "w"); if($fp) fclose($fp); } if ($_CONFIG['backup_refresh']) $tar_type = "tar"; else $tar_type = "tgz"; $tar_object = new Archive_Tar($filename, compression($tar_type)); //$tar_object->setErrorHandling(PEAR_ERROR_PRINT); // Optional error handling $return = $tar_object->addModify($f_arr, '', $_CONFIG['backup_path']); if ($return != 1) { echo "Backup failed using tar mode, error code $return!"; } if ($_CONFIG['backup_refresh']) { // echo "Starting the manual backup process!
"; if((!$_CONFIG['refresh_mode']) and ($_CONFIG['enable_db_backup'])) echo "

Database backup:

" . $databaseResult . "

"; HTML_cloner::goRefreshHtml($filename, $perm_lines, $excl_manual); return; } //### END TAR MODE ############################################################ } else { //### CREATE BACKUP USING SERVER UTILITIES $i = 0; chdir($_CONFIG['backup_path']); $excl_files = ""; while ($i < sizeof($excluded)) { $file = $excluded[$i]; $file = str_replace($_CONFIG['backup_path'], "", $file); $file = "##" . $file; $file = str_replace("##//", "", $file); $file = str_replace("##/", "", $file); $file = str_replace("##", "", $file); $excl_files .= "/" . $file . "* "; $i++; } chdir($_CONFIG['backup_path']); $excl_cmd = ""; if ($fp = fopen($_CONFIG['exfile_tar'], "w")) { $i = 0; while ($i < sizeof($excluded)) { $file = $excluded[$i]; $file = str_replace($_CONFIG['backup_path'], "", $file); $file = "##" . $file; $file = str_replace("##//", "", $file); $file = str_replace("##/", "", $file); $file = str_replace("##", "", $file); $excl_cmd .= " --exclude=./" . $file . " "; $excl_files = "./" . $file . "\r\n"; fwrite($fp, $excl_files); $i++; } fclose($fp); } if ($_CONFIG['backup_refresh']) { //######### STARTING THE MANUAL BACKUP ###################################################### $exclude = $excl_cmd . " -X " . $_CONFIG['exfile_tar']; $excl_manual = $_CONFIG['exfile_tar'] . "_manual"; if ($fp = fopen($excl_manual, "w")) { fwrite($fp, $exclude); fclose($fp); } echo "Starting the manual backup process!
"; echo "Database backup: " . $databaseResult . "

"; chdir($_CONFIG['backup_path']); //$filename = str_replace(".tgz",".tar",$filename); exec($_CONFIG[tarpath] . " $exclude -c" . $_CONFIG['tarcompress'] . "vf $filename ./administrator/backups/index.html"); exec($_CONFIG[tarpath] . " -" . $_CONFIG['tarcompress'] . "vf $filename --update ./administrator/backups/database-sql.sql"); exec($_CONFIG[tarpath] . " -" . $_CONFIG['tarcompress'] . "vf $filename --update ./administrator/backups/htaccess.txt"); exec($_CONFIG[tarpath] . " -" . $_CONFIG['tarcompress'] . "vf $filename --update ./administrator/backups/perm.txt"); /*if (file_exists($filename)) { echo "Backup $filename created, we may continue!
"; //echo "Database backup: ".$databaseResult."
" ; echo "Please click here to continue!"; return; } else { E_print("Backup failed, please check your tar server utility support!"); return; }*/ HTML_cloner::goRefreshHtml($filename, $perm_lines, $excl_manual); return; } if ($_REQUEST[cron_dbonly] != 1) { exec($_CONFIG[tarpath] . " $excl_cmd " . " -X " . $_CONFIG['exfile_tar'] . " -chv" . $_CONFIG['tarcompress'] . "f $filename ./"); } else { exec($_CONFIG[tarpath] . " -" . $_CONFIG['tarcompress'] . "cvf $filename ./administrator/backups/database-sql.sql"); if (is_array($databases_incl)) { foreach ($databases_incl as $database_name) if ($database_name != "") { exec($_CONFIG[tarpath] . " -" . $_CONFIG['tarcompress'] . "vf $filename --update ./administrator/backups/" . $database_name . "-sql.sql"); } } } //######END chdir($_CONFIG['script_path']); //### END } if (!file_exists($filename)) { if ($_CONFIG[archive_type] == 1) echo LM_MSG_BACK_12; else echo LM_MSG_BACK_13; return; } // format the compressed size of the fileset $archiveSize = getFileSizeText(get_filesize($filename)); // load presentation layer if ($option != 'nohtml') { HTML_cloner::generateBackup($filename1, $archiveSize, $originalSize, $mdir, $f, $databaseResult, $option); } else { logxx(HTML_cloner::generateBackup_text($filename1, $archiveSize, $originalSize, $mdir, $f, $databaseResult, $option)); } if (is_array($databases_incl)) { foreach ($databases_incl as $database_name) { @unlink($_CONFIG['backups_dir'] . "/" . $database_name . "-sql.sql"); } } @unlink($_CONFIG['backups_dir'] . "/database-sql.sql"); @unlink($sql_file); @unlink($perm_file); @unlink($htaccess); @unlink($_CONFIG['exfile']); @unlink($_CONFIG['exfile_tar']); return $filename1; } function showHelp($option) { // ---------------------------------------------------------- // Display the Help Screen // ---------------------------------------------------------- // load presentation layer HTML_cloner::showHelp($option); } function multidimsort(&$a) { sort($a); $c = count($a); for ($i = 0; $i < $c; $i++) if (is_array($a[$i])) multidimsort($a[$i]); } function compression($ext) { switch ($ext) { case 'tar': $compresion = 'false'; break; case 'tgz': $compresion = 'true'; break; default: $compresion = 'false'; break; } return $compression; } function recurseFiles(&$d_arr, &$ds_arr, &$f_arr, &$s_arr, &$d, &$f, &$s, &$includedFolders, $path, $excluded = array(), $fperm = '') { // ---------------------------------------------------------- // Routine to recurse a folder structure and record the files // their sizes and parent folders // ---------------------------------------------------------- global $mdir, $_CONFIG; $currentfullpath = $_CONFIG['backup_path'] . $path; // Open possibly available directory if ((is_dir($currentfullpath)) && (!is_link($currentfullpath))) { if ($handle = @opendir($currentfullpath)) { while (false !== ($file = readdir($handle))) { // Make sure we don't push parental directories or dotfiles (unix) into the arrays if (($file != "." && $file != "..")) { $exc = 0; $cfile = $currentfullpath . "/" . $file; if (sizeof($excluded) != 0) { foreach ($excluded as $key => $value) { if (($value != '') && (!$exc)) { $cfile = str_replace("//", "/", $cfile); if ((strstr($cfile, $value) != '') || (strstr($cfile . "/", $value) != '')) { $exc = 1; break; } } } } if ((@is_dir($cfile)) && (!@is_link($currentfullpath))) { // Create array for directories if (($fperm) && (!$exc)) { $perm = substr(sprintf('%o', fileperms($cfile)), -4); fwrite($fperm, str_replace($_CONFIG['backup_path'], "", $cfile) . "|" . $perm . "\n"); } //$d_arr[++$d] = $cfile; if (!$exc) recurseFiles($d_arr, $ds_arr, $f_arr, $s_arr, $d, $f, $s, $includedFolders, $path . "/" . $file, $excluded, $fperm); } else { //if ( in_array($currentfullpath, $includedFolders) ) { // Create array for files if (($fperm) && (!$exc)) { $perm = substr(sprintf('%o', @fileperms($cfile)), -4); //$sfile = sprintf("%.2f",get_filesize($cfile)/1024); fwrite($fperm, str_replace($_CONFIG['backup_path'], "", $cfile) . "|" . $perm . "\n"); } if (!$exc) { //$s_arr[$f] = @filesize($cfile); if ((!$_CONFIG['mem']) && ($_CONFIG['backup_refresh'] != 1)) { $f_arr[$f++] = $cfile; } else { $f++; } $s += get_filesize($cfile); } } } } } } // Wrap things up if we're in a directory //if( is_dir( $currentfullpath ) ) @closedir($handle); } } //legacy function, use instead the fileRecursion::getFileSize() function get_filesize($path) { //$sizeInBytes = filesize($path); $sizeInBytes = sprintf("%u", filesize($path)); if ((!$sizeInBytes) and (function_exists("exec"))){ $command = "ls -l \"$path\" | cut -d \" \" -f 5"; $sizeInBytes = @exec($command); } return $sizeInBytes; } function getBackupFiles(&$d_arr, &$f_arr, &$s_arr, &$d, &$f) { // ---------------------------------------------------------- // Routine to list the existing backup files in the Component // Backup folder // ---------------------------------------------------------- global $_CONFIG; $path = $_CONFIG['clonerPath']; // Open possibly available directory if (is_dir($path)) { if ($handle = opendir($path)) { while (false !== ($file = readdir($handle))) { // Make sure we don't push parental directories or dotfiles (unix) into the arrays if ($file != "." && $file != ".." && $file[0] != ".") { if (is_dir($path . "/" . $file)) // Create array for directories $d_arr[$d++] = $file; elseif ((strstr($file, '.zip')) || (strstr($file, '.tgz')) || (strstr($file, '.tar'))) { // Create array for files $f_arr[$f++] = $file; } } } } } // Wrap things up if we're in a directory if (is_dir($path)) closedir($handle); sort($f_arr); // Print file list for ($i = 0; $i < count($f_arr); $i++) { $s_arr[$i] = getFileSizeText(get_filesize($path . "/" . $f_arr[$i])); } } function getFileSizeText($filesize) { // ---------------------------------------------------------- // Routine to display a formatted version of a filesize // ---------------------------------------------------------- if ($filesize >= 1024 && $filesize < 1048576) { // Size in kilobytes return round($filesize / 1024, 2) . " KB"; } elseif ($filesize >= 1048576) { // Size in megabytes return round($filesize / 1024 / 1024, 2) . " MB"; } else { // Size in bytes return $filesize . " bytes"; } } function doBackup($tables, $OutType, $OutDest, $toBackUp, $UserAgent, $local_backup_path, &$databaseResult, $backupname, $excltables = array(), $dbname) { global $database, $mosConfig_db, $mosConfig_sitename, $version, $option, $task, $mosConfig_dbprefix, $_CONFIG, $mosConfig_user, $mosConfig_password, $mosConfig_host; if (!$tables[0]) { $databaseResult = LM_DATABASE_MISSING_TABLES; return; } addXLog("Exporting database `$dbname`"); /* Determine the mime type and file extension for the output file */ if ($OutType == "zip") { $filename = $backupname . "-sql" . ".zip"; } elseif ($OutType == "html") { $filename = $backupname . "-sql" . ".html"; } else { $filename = $backupname . "-sql" . ".sql"; } $sqlfile = "$local_backup_path/$filename"; addXLog("SQL file setup to: ".$sqlfile); @unlink($sqlfile); /* Store all the tables we want to back-up in variable $tables[] */ if ($tables[0] == "all") { array_pop($tables); $query = mysql_query("SHOW tables"); while ($row = mysql_fetch_array($query)) { $tables_list[] = $row[0]; } $tables = array_merge($tables, $tables_list); } $newtables = array(); //if(is_array($excltables)) foreach ($tables as $key => $value) { if (is_array($excltables)) { if (!in_array($value, $excltables)) $newtables[] = $value; } else $newtables[] = $value; } addXLog("Exporting tables: "); addXLog(implode("\n", $newtables)); if (sizeof($tables) == sizeof($newtables)) $ex_dump = ""; else $ex_dump = @implode(" ", $newtables); $tables = $newtables; if ($_REQUEST['dbbackup_drop']) { $drop = " --add-drop-table"; } else { $drop = ""; } if ($_REQUEST['dbbackup_comp']) { $drop .= " --compatible=" . strtolower($_REQUEST['dbbackup_comp']) . " "; } if ($_CONFIG['sql_mem']) { exec($_CONFIG[sqldump] . " -h " . $_CONFIG['mysql_host'] . " -u " . $_CONFIG['mysql_user'] . " -p" . $_CONFIG['mysql_pass'] . " " . $dbname . " > " . $sqlfile . " $drop --allow-keywords " . $ex_dump); if (get_filesize($sqlfile) > 0) $databaseResult = LM_DATABASE_BACKUP_COMPLETED . ' ( ' . getFileSizeText(get_filesize($sqlfile)) . ' )'; else $databaseResult = LM_MSG_BACK_14; exec("chmod 777 $sqlfile"); return $sqlfile; } /*Added some default values for quotes and auto_increment problems*/ mysql_query("SET SQL_QUOTE_SHOW_CREATE=1;"); mysql_query("SET sql_mode = 0;"); if ($_REQUEST['dbbackup_comp']) { mysql_query("SET sql_mode=" . $_REQUEST['dbbackup_comp'] . ";"); } /* Store the "Create Tables" SQL in variable $CreateTable[$tblval] */ if ($toBackUp != "data") { foreach ($tables as $tblval) { $query = mysql_query("SHOW CREATE table `$tblval`"); $row = mysql_fetch_array($query); $CreateTable[$tblval] = $row[1]; } } /* Store all the FIELD TYPES being backed-up (text fields need to be delimited) in variable $FieldType*/ if ($toBackUp != "structure") { foreach ($tables as $tblval) { $query = mysql_query("SHOW FIELDS FROM `$tblval`"); while ($row = mysql_fetch_row($query)) { $fields[] = $row[0]; } foreach ($fields as $field) { $FieldType[$tblval][$field->Field] = preg_replace("/[(0-9)]/", '', $field->Type); } } } if ($OutDest == "local") { $fp = fopen($sqlfile, "w"); if (!$fp) { $databaseResult = LM_DATABASE_BACKUP_FAILED; return; } } /* Build the fancy header on the dump file */ $OutBuffer = ""; if ($OutType == 'html') { } else { $OutBuffer .= "#\n"; $OutBuffer .= "# Powered by XCloner Site Backup\n"; $OutBuffer .= "# http://www.xcloner.com\n"; $OutBuffer .= "#\n"; $OutBuffer .= "# Host: " . $_SERVER['HTTP_HOST'] . "\n"; $OutBuffer .= "# Generation Time: " . date("M j, Y \a\\t H:i") . "\n"; $OutBuffer .= "# Server version: " . getVersion() . "\n"; $OutBuffer .= "# PHP Version: " . phpversion() . "\n"; $OutBuffer .= "# Database : `" . $dbname . "`\n# --------------------------------------------------------\n"; } fwrite($fp, $OutBuffer); unset($OutBuffer); /* Okay, here's the meat & potatoes */ foreach ($tables as $tblval) { if ($toBackUp != "data") { if ($OutType == 'html') { } else { $OutBuffer .= "#\n# Table structure for table `$tblval`\n#\n"; if ($_REQUEST['dbbackup_drop']) $OutBuffer .= "#\nDROP table IF EXISTS `$tblval`;\n"; $OutBuffer .= $CreateTable[$tblval] . ";\r\n"; } } fwrite($fp, $OutBuffer); unset($OutBuffer); if ($toBackUp != "structure") { $OutBuffer .= "#\n# Dumping data for table `$tblval`\n#\n"; $query = @mysql_query("SELECT * FROM `$tblval`"); while ($row = @mysql_fetch_array($query, MYSQL_ASSOC)) { $InsertDump = "INSERT INTO `$tblval` VALUES ("; $arr = $row; foreach ($arr as $key => $value) { $value = mysql_escape_string($value); #$value = str_replace("\n", '\r\n', $value); #$value = str_replace("\r", '', $value); //if (@preg_match ("/\b" . $FieldType[$tblval][$key] . "\b/i", "DATE TIME DATETIME CHAR VARCHAR TEXT TINYTEXT MEDIUMTEXT LONGTEXT BLOB TINYBLOB MEDIUMBLOB LONGBLOB ENUM SET")) { $InsertDump .= "'$value',"; } /*else { $InsertDump .= "'$value',"; } */ } $OutBuffer .= rtrim($InsertDump, ',') . ");\n"; fwrite($fp, $OutBuffer); unset($OutBuffer); $i++; } } } if ($OutDest == "local") { //fwrite($fp, $OutBuffer); fclose($fp); @chmod($sqlfile, 0777); $databaseResult = LM_DATABASE_BACKUP_COMPLETED . ' ( ' . getFileSizeText(get_filesize($sqlfile)) . ' )'; return $sqlfile; } } function getNewBackupName($backupFilename){ $newFilename = $backupFilename; $tmp = explode(".",$backupFilename); $extension = $tmp[sizeof($tmp)-1]; $inc = $tmp[sizeof($tmp)-2]; if(strlen($inc)<3){ $newinc = $inc+1; $newFilename = str_replace(".$inc.$extension", "", $backupFilename); //ex, replace .1.tar $newFilename = $newFilename .".$newinc.$extension"; }else{ //it is a first backup, no .0.tar $newFilename = str_replace(".".$extension, "", $backupFilename); //ex, replace .1.tar $newFilename = $newFilename .".1.". $extension; } return $newFilename; } function writeComments($comments){ global $_CONFIG; $fp = @fopen($_CONFIG['commentsfile'], "w"); if($fp){ fwrite($fp, stripcslashes($comments)); fclose($fp); } else{ addXLog("Unable to write comments to file ".$_CONFIG['commentsfile']); } } function getVersion() { $query = mysql_query("SELECT version()"); $row = mysql_fetch_array($query); return $row[0]; } ?>