function _extractList($p_path, &$p_list_detail, $p_mode, $p_file_list, $p_remove_path) { if ($p_mode == 'complete') { $this->target_path = $p_path; $this->resume(); } return parent::_extractList($p_path, $p_list_detail, $p_mode, $p_file_list, $p_remove_path); }
function step2($file = "") { global $_CONFIG, $filepath; $DBcreated = $_REQUEST[DBcreated]; if ($DBcreated == 'on') { $DBhostname = $_REQUEST['mysql_server']; $DBuserName = $_REQUEST['mysql_username']; $DBpassword = $_REQUEST['mysql_pass']; $DBname = $_REQUEST['mysql_db']; $_CONFIG['mysqli'] = new mysqli($DBhostname, $DBuserName, $DBpassword, $DBname); /* check connection */ if ($_CONFIG['mysqli']->connect_errno) { printf("Connect failed: %s\n", $_CONFIG['mysqli']->connect_error); exit; } $_CONFIG['mysqli']->query("SET sql_mode='';"); $_CONFIG['mysqli']->query("SET foreign_key_checks = 0;"); if ($_REQUEST['charset_of_file'] != "") { $_CONFIG['mysqli']->query("SET NAMES " . $_REQUEST['charset_of_file'] . ""); } else { $_CONFIG['mysqli']->query("SET NAMES utf8;"); } } if ($_REQUEST['do_database'] != 1) { ############ DATABASE ONLY RESTRICTION################################################## ########################### START FTP MODE ################################# if ($_REQUEST[transfer_mode] == 2) { $_CONFIG[output_path] = $_CONFIG[output_path] . "/archive_tmp/"; @mkdir($_CONFIG[output_path]); // set up basic connection $conn_id = @ftp_connect($_REQUEST[ftp_server], $_REQUEST[ftp_port]) or die("<span class='error'>Could not connect to {$_REQUEST['ftp_server']} on port {$_REQUEST['ftp_port']}! Ftp connection has failed!</span>"); // login with username and password $login_result = @ftp_login($conn_id, $_REQUEST[ftp_user], $_REQUEST[ftp_pass]) or die("<span class='error'>Could not login to ftp server for user {$_REQUEST['ftp_user']} and provided pass! Ftp connection has failed!</span>"); // check connection if (!$conn_id || !$login_result) { echo "<b style='color:red'>FTP connection has failed!</b>"; echo "<b style='color:red'>Attempted to connect to " . $_REQUEST[ftp_server] . ":" . $_REQUEST[ftp_port] . " for user " . $_REQUEST[ftp_user] . "</b>"; return; } else { echo "<br />Connected to {$_REQUEST['ftp_server']}, for user {$_REQUEST['ftp_user']}, starting transfer...<br />"; } $ftp_dir_original = ftp_pwd($conn_id); @ftp_mkdir($conn_id, $_REQUEST[ftp_path]); // try to change the directory to somedir if (@ftp_chdir($conn_id, $_REQUEST[ftp_path])) { echo "Current directory is now: <b>" . ftp_pwd($conn_id) . "</b>\n"; } else { echo "<b style='color:red'>Couldn't change directory to <b>{$_REQUEST['ftp_path']}</b>, please verify that the ftp location exists or use the \"Install files directly\" option!</b><br />\n"; return; } @ftp_chdir($conn_id, $ftp_dir_original); } ########################## END FTP MODE ###################################### ##### START extract ###### if ($_REQUEST['refresh'] < 1) { $ext = substr($file, strlen($file) - 4, strlen($file)); if ($_REQUEST['file_utilities'] != '1') { $tar_object = new Archive_Tar($file); if ($_REQUEST['manual_ftp']) { $tar_object->_openRead(); fseek($tar_object->_file, $_CONFIG['seek']); $seek = $tar_object->_extractList($_CONFIG['output_path'], $return, "partial", "", "", $_CONFIG['filesLimit']); $seek = $seek - 512; //reverse 512 bytes if ($seek > 0) { $backupSize = filesize($file); $rurl = rurl($seek, $backupSize); $percent = sprintf("%.2f", $seek * 100 / $backupSize); echo "<h3>Processing files - " . $percent . "%</h3>"; echo "<script> document.location='" . $rurl . "'</script>"; return; } $_REQUEST['fpos'] = 0; $_REQUEST['chunk'] = 0; } else { $tar_object->extract($_CONFIG['output_path']); #$tar_object->extractList("backups/perm.txt", $_CONFIG['output_path']); } } else { if ($ext == '.tgz') { $compress = 'z'; } else { $compress = ''; } shell_exec("tar -x" . $compress . "pf {$file} -C {$_CONFIG['output_path']}"); } } ##### END extract ###### $new_arr = array(); #@chmod($_CONFIG[output_path], 0777); $tran_file = $_CONFIG[output_path] . "/transfer.txt"; if ($_REQUEST[transfer_mode] == 2) { # 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[output_path]; if ($_REQUEST['refresh'] < 1) { # obtain the list of files by recursing the mambo file store recurseFiles($d_arr, $ds_arr, $f_arr, $s_arr, $d, $f, $s, $excludedFolders, '', $_CONFIG[output_path]); recurseFiles($d_arr, $ds_arr, $f_arr, $s_arr, $d, $f, $s, $d_arr, '', $_CONFIG[output_path]); sort($d_arr); sort($f_arr); $new_arr = array_merge($d_arr, $f_arr); if ($_REQUEST[transfer_mode] == 2) { if ($fp = fopen($tran_file, "w")) { foreach ($new_arr as $file) { fwrite($fp, $file . "\n"); } fclose($fp); } else { echo "Unable to write to directory " . $_CONFIG[output_path] . "! Please check that this directory is writeable!"; return; } } else { } } else { $content = ""; $new_arr = file($tran_file); } if (sizeof($new_arr) != 0) { $percn = sprintf("%.2f", $_REQUEST[next] * 100 / sizeof($new_arr)); } if ($percn > sizeof($new_arr)) { $percn = sizeof($new_arr); } } if ($_REQUEST['refresh'] == 1) { echo "<h3>Transfering {$percn}% of " . sizeof($new_arr) . " files through ftp</h3>"; echo "<textarea cols=70 rows=30 name='ftp_list'></textarea>"; } elseif ($_REQUEST['refresh'] == 2) { echo "Files transfer finished!"; } $i = (int) $_REQUEST[next]; $j = 0; ### MOVING THE FILES THROUGH FTP #foreach($new_arr as $key=>$file) for ($key = $i; $key <= sizeof($new_arr); $key++) { $file = str_replace(array("\r", "\n"), array("", ""), $new_arr[$key]); if ($_REQUEST['manual_ftp'] == 1) { if ($j == 100) { #echo "Transfering files from line: ". (int)$_REQUEST[next]; $qstr = explode("&refresh=1&next=", $_SERVER['QUERY_STRING']); $rurl = "XCloner.php?" . $qstr[0] . "&refresh=1&next=" . ($_REQUEST[next] + 100); ftp_close($conn_id); echo "<script> document.location='" . $rurl . "'</script>"; exit; } } $j++; $sfile = str_replace($_CONFIG[output_path], "", $file); $fsource = $_CONFIG[output_path] . "/" . $sfile; if ($sfile != "" && $sfile != "/") { if ($_REQUEST[transfer_mode] == 2) { $upload = 1; $ftarget = $_REQUEST[ftp_path] . "/" . $sfile; if (is_dir($fsource)) { $upload1 = @ftp_mkdir($conn_id, $ftarget); } else { $upload = ftp_put($conn_id, $ftarget, $fsource, FTP_BINARY); } #echo "$i <br >"; if (!$upload) { echo "<br /><font color=red>Transfer fail for {$fsource} to {$ftarget}</font> <br />File already exists and/or doesn't have writing permissions!<br/>"; } else { if ($_REQUEST['manual_ftp'] == 1) { $ftarget .= '\\n'; echo "<script>document.form.ftp_list.value = document.form.ftp_list.value + '" . $ftarget . "'; </script>"; #echo "$ftarget <br />\n"; } } } } } if ($_REQUEST['refresh'] == 1) { $qstr = explode("&refresh=1&next=", $_SERVER['QUERY_STRING']); $rurl = "XCloner.php?" . $qstr[0] . "&refresh=2&next=" . ($_REQUEST[next] + 102); echo "<script> document.location='" . $rurl . "'</script>"; exit; } ############### RESTORING HTACCESS AND CONFIGURATION PERM##################################### if ($_REQUEST[transfer_mode] == 2) { $cmd = "CHMOD 0777 " . $_REQUEST[ftp_path] . "/" . "wp-config.php"; @ftp_site($conn_id, $cmd); } else { @chmod($_REQUEST[output_path] . "/" . "wp-config.php", 0777); } #### CUSTOM PERMISSIONS ##### if ($_REQUEST['preserve_perm']) { $perm_data = ""; $perm_file = $_CONFIG[output_path] . "/administrator/backups/perm.txt"; $per = 1; @chmod($perm_file, 0777); $fp = @fopen($perm_file, 'r'); if ($fp) { while (!feof($fp)) { $perm_data .= fread($fp, 1024); } fclose($fp); } else { echo "Could not set permissions! Permissions file {$perm_file} not found!<br />"; $per = 0; } $data = explode("\n", $perm_data); foreach ($data as $value) { $dir = explode("|", $value); if ($dir[1] == "") { $dir[1] = '0755'; } if (strstr($dir[0], "wp-config.php")) { $dir[1] = '0777'; } if ($_REQUEST[transfer_mode] == 2) { $cmd = "CHMOD " . $dir[1] . " " . $_REQUEST[ftp_path] . "/" . $dir[0]; @ftp_site($conn_id, $cmd); } else { @chmod($_CONFIG[output_path] . "/" . $dir[0], octdec($dir[1])); } } if ($per) { echo "<h2>Permissions restored to their initial value...</h2>"; } } #### END CUSTOM PERMISSIONS ##### $_CONFIG[output_path] = str_replace("/archive_tmp/", "", $_CONFIG[output_path]); if ($_REQUEST[transfer_mode] == 2) { // close the FTP stream @ftp_close($conn_id); recursive_remove_directory($_CONFIG[output_path] . "/archive_tmp/"); @unlink($_CONFIG[output_path] . "/archive_tmp/"); echo "<h2>Files succesfully copied to " . $_REQUEST[ftp_path] . " on {$_REQUEST['ftp_server']} using FTP</h2>"; } else { echo "<h2>Files succesfully copied to " . $_CONFIG[output_path] . "</h2>"; } ######### END DATABASE ONLY RESTRICT ######################################### } ##### RESTORE CONFIGURATION ##### $update_config = 1; if ($_REQUEST['files_skip'] and isset($_REQUEST['fpos'])) { $update_config = 0; } if ($_REQUEST['do_database'] != 1 || $_REQUEST['files_skip'] == 1) { $config_file = $_CONFIG[output_path] . "/wp-config.php"; @chmod($config_file, 0777); @unlink($_CONFIG[output_path] . "/administrator/backups/perm.txt"); if ($_CONFIG['sql_usefile'] == "database-sql.sql" and $update_config) { if (write_config($config_file)) { echo "<H2>Configuration updated!</H2>"; } else { echo "<span class='error'>Unable to write to configuration file {$config_file}... Aborting...</span>"; return; } } } ############ ATTEMPT DATABASE INSERT ##################################### if ($DBcreated != 'on') { echo "<h2>Database import skipped!</h2>"; echo "<a href='" . $_CONFIG[output_url] . "'><b>All should be done! Click here to continue...</b></a><br />"; return; } if ($DBcreated == 'on' && $_REQUEST['do_database'] == 1) { $sqlfile = $_CONFIG[output_path] . "/administrator/backups/" . $_CONFIG['sql_usefile']; if (!file_exists($sqlfile)) { echo "<span class='error'>Unable to read the database backup file {$sqlfile} , database was not imported!</span>"; } else { if ($_REQUEST['manual_sql']) { $errors = populate_db_manual($db, $sqlfile); } else { $errors = populate_db($db, $sqlfile); } if (sizeof($errors) > 0) { echo "There were some errors while importing the database:<br />"; echo "<textarea cols=60 rows=30>" . implode("\n", $errors) . "</textarea>"; exit; } else { @unlink($_CONFIG[output_path] . "/administrator/backups/" . $_CONFIG['sql_usefile']); } echo "<h2>Database populated...</h2>"; } } ################################################################################### if ($_REQUEST['do_database'] != 1) { $vars = ""; foreach ($_REQUEST as $key => $value) { $vars .= $key . '=' . @urlencode($value) . '&'; } #$href = "XCloner.php?".$vars."do_database=1"; $href = rurl() . "&do_database=1"; echo "<br /><a href='{$href}'>Please click here to continue with database import...</a>"; return; } else { echo "<br /><a href='" . $_CONFIG[output_url] . "'><b>All should be done! Click here to continue...<br /></a><br />"; return; } }