File manager - Edit - /home/aussies6/new.aussieseafoodhouse.com.au/XCloner.php
Back
<?php /* * XCloner.php * * Copyright 2011 Ovidiu Liuta <info@thinkovi.com> * * 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. */ if(@is_file("../cloner.config.php")){ echo "<h3>Access denied, if you are trying to restore a backup, please move the restore script in another directory!</h3>"; exit; } @set_time_limit(3600); @ini_set("error_reporting", E_ALL^E_NOTICE); ###################### Do not edit Below ############################# $g_pcltar_lib_dir = "./"; require "TAR.php"; $_CONFIG['my_version'] = "3.1.0"; $_CONFIG['script_name'] = "XCloner.php"; $_CONFIG['sql_usefile'] = ""; $_CONFIG['filesLimit'] = 100; $_CONFIG['seek'] = 0; if(isset($_REQUEST['sql_setfile'])) $_CONFIG['sql_usefile'] = $_REQUEST['sql_setfile']; if(trim($_CONFIG['sql_usefile']) == "") $_CONFIG['sql_usefile'] = "database-sql.sql"; if(isset($_REQUEST['strrep'])){ setcookie ("strrep_c", "", time() - 3600); setcookie("strrep_c", str_replace("\r\n","*-*",stripslashes($_REQUEST['strrep'])), time()+3600); /* expire in 1 hour */ }else{ $_REQUEST['strrep'] = str_replace("*-*", "\r\n", $_COOKIE['strrep_c']); } if ($handle = opendir('./')) { /* This is the correct way to loop over the directory. */ while (false !== ($file = readdir($handle))){ $ext = substr($file,strlen($file)-4,strlen($file)); if(($file!='XCloner.php')&&($file!='..')&&($file!='.')&&(($ext=='.tgz')||($ext=='.tar'))){ $_CONFIG[versions][] = $file; } } closedir($handle); }else{ echo "Unable to open my directory for reading and listing!";exit; } ###################################################################### array_map("urldecode", $_REQUEST); $_CONFIG['output_path'] = $_REQUEST['output_path']; $_CONFIG['output_url'] = $_REQUEST['output_url_pref']."://".$_REQUEST['output_url']; $_REQUEST['output_url'] = str_replace("/###","",$_REQUEST['output_url']."###"); $_REQUEST['output_url'] = str_replace("###","",$_REQUEST['output_url']); if(function_exists('filter_var')){ $_CONFIG['output_url'] = filter_var($_CONFIG['output_url'], FILTER_SANITIZE_URL); } $_CONFIG['tmp'] = $_REQUEST['output_path']; if($_REQUEST['files_skip'] == 1) $_REQUEST['do_database'] = 1; if($_REQUEST['fpos']) $_CONFIG['seek'] = $_REQUEST['fpos']; $filepath =$_SERVER["SCRIPT_FILENAME"]; $pathinfo = pathinfo($filepath); $startscript = $pathinfo['dirname']; $_CONFIG[group] = $groupinfo[name]; $_CONFIG[owner] =$ownerinfo[name]; ###################### FRONT AREA ################################### //setCache(); ?> <!DOCTYPE html> <html> <head> <title>XCloner Restore - <?php echo $_SERVER['HTTP_HOST']?> - Backup and Restore Made Easy</title> <META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW"> <link REL="SHORTCUT ICON" HREF="http://www.xcloner.com/images/favicon.ico"> <style type="text/css" media="screen"> @import url( http://www.xcloner.com/downloads/style.css ); @import url( http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/themes/start/jquery-ui.css ); .error { color: red; font-size: 15px; } </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript"></script> <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.min.js" type="text/javascript"></script> </head> <body> <script> $(function() { $( "#tabs-main" ).tabs(); }); </script> <!-- section 1--> <table align='center' width='700' bgcolor='#eeeeee' style='padding: 0 5px 0 5px;'> <tr><td align='center'><h2><font color=red>XCloner</font> Automatic Restore! - <?php echo $_SERVER['HTTP_HOST']?></h2></td></tr> <tr><td align='left'> <form action='' method='GET' name='form'> <?php switch ($_REQUEST[task]) { case 'step2': step2(); break; case 'step1': step1(); break; case 'getinfo': getPHPINFO(); break; case 'info': echo phpinfo(); break; default : start(); break; } ?> </form> </td></tr> <tr><td> <hr /> <small>XCloner Automatic Restore(<b><?php echo $_CONFIG['my_version']?></b>) - <a href='http://www.xcloner.com' title='XCloner.com - Website Backup Application'>Website Backup and Restore</a> </small> </td></tr> </table> </body> </html> <?php ##################################################################### ##################### FUNCTIONS ##################################### 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 ; } } function write_config($file){ global $_CONFIG; if(@$fp = fopen($file, "r")){ $config_data = ""; while(!feof($fp)) $config_data .= fread($fp, 1024); fclose($fp); } if ($_REQUEST[DBcreated] == 'on'){ $config_data = str_replace("define('DB_HOST', '", "define('DB_HOST', '".$_REQUEST[mysql_server]."');#", $config_data); $config_data = str_replace("define('DB_USER', '", "define('DB_USER', '".$_REQUEST[mysql_username]."');#", $config_data); $config_data = str_replace("define('DB_PASSWORD', '", "define('DB_PASSWORD', '".$_REQUEST[mysql_pass]."');#", $config_data); $config_data = str_replace("define('DB_NAME', '", "define('DB_NAME', '".$_REQUEST[mysql_db]."');#", $config_data); $liveurl = $_CONFIG['output_url']; $config_data = str_replace("define('DB_HOST", "define('WP_SITEURL','".$liveurl."');\ndefine('WP_HOME','".$liveurl."');\ndefine('RELOCATE',true);\ndefine('DB_HOST", $config_data); $config_data = str_replace("define('WP_SITEURL', '", "define('WP_SITEURL', '".$liveurl."');#", $config_data); $config_data = str_replace("define('WP_HOME', '", "define('WP_HOME', '".$liveurl."');#", $config_data); } if($_REQUEST['transfer_mode'] == 2){ $config_data = str_replace('$'.'ftp_host =',"$"."ftp_host ='".$_REQUEST[ftp_server]."';#", $config_data); $config_data = str_replace('$'.'ftp_port =',"$"."ftp_port ='".$_REQUEST[ftp_port]."';#", $config_data); $config_data = str_replace('$'.'ftp_user =',"$"."ftp_user ='".$_REQUEST[ftp_user]."';#", $config_data); $config_data = str_replace('$'.'ftp_pass =',"$"."ftp_pass ='".$_REQUEST[ftp_pass]."';#", $config_data); $config_data = str_replace('$'.'ftp_root =',"$"."ftp_root ='".$_REQUEST[ftp_path]."';#", $config_data); }else{ $config_data = str_replace('$'.'ftp_enable =',"$"."ftp_enable ='0';#", $config_data); } $config_data = str_replace('$'.'live_site =',"$"."live_site ='".$_CONFIG['output_url']."';#", $config_data); $config_data = str_replace('$'.'absolute_path =',"$"."absolute_path ='".$_CONFIG['output_path']."';#", $config_data); if ($fp = fopen($file, "w")) { fwrite( $fp, $config_data); fclose( $fp ); } else { return false; } // if return true; } function step1(){ global $_CONFIG; $ftarget = $_CONFIG[output_path]."/".$_REQUEST[ver]; if($_REQUEST['refresh'] < 1) if(!is_writable($_CONFIG[output_path])){ echo "<span class='error'>Directory ".$_CONFIG[output_path]." is not writeable or does not exists! Could not continue...</span>"; return ; } $ftarget = $_REQUEST[ver]; if((!file_exists($ftarget)) and (!$_REQUEST['files_skip'])){ echo "<span class='error'>Could not continue, unable to read the clone backup file! Please make sure you copied the backup in the same directory as XCloner.php </span>"; return; } step2($ftarget); return; } function start() { global $_CONFIG,$pathinfo; $pdir = str_replace($_CONFIG['script_name'], "", $_SERVER["SCRIPT_FILENAME"]); $purl = $_SERVER['HTTP_HOST'].str_replace("/".$_CONFIG['script_name'],"", $_SERVER['SCRIPT_NAME']); ?> <script> $(function() { $( "#DBcreated" ).button(); $( "#phpinfo").button(); $( "#manual_sql" ).button(); $( "#transfer_mode-ftp" ).button(); $( "#transfer_mode-direct" ).button(); $( "input:submit", ".form" ).button(); }); $(function() { $( "#tabs" ).tabs(); $( "#tabs2" ).tabs(); }); </script> <!-- section 1--> <div id="tabs2"> <ul> <li><a href="#tabs2-1">New Path & Url Configuration</a></li> </ul> <div id="tabs2-1"> <table class="adminForm"> <tr><td nowrap> 1. Install directory: (server path where you want to restore your backup)<br /> <input type=text size=80 name='output_path' value='<?php echo str_replace("\\", "/", $pdir);?>'><br > </td></tr> <tr><td> <br />2.Install Url: (the url correspondent of your Install directory:)<br /> <div style="display:inline"> <div style="float:left"> <select name='output_url_pref'> <option selected value='http'>http://</option> <option value='https'>https://</option> </select> </div> <div style="float:left"> <input type=text size=65 name='output_url' value='<?php echo $purl?>'> </div> </div> </td></tr> <tr><td> <br />3. Choose backup archive to restore: <?php echo version_list('ver');?> </td></tr> </table> </div> </div> <!-- end section 1--> <div id="tabs"> <ul> <li><a href="#tabs-1">New Mysql Configuration</a></li> <li><a href="#tabs-2">File Restore Options</a></li> </ul> <div id="tabs-1"> <!--start tabs 1 --> <table width="100%"> <tr><td> <!--<h3><a href="#">Mysql configuration: </a></h3>--> <input type=checkbox checked name='DBcreated' id="DBcreated"> <label for="DBcreated">Import mysql database</label> <input type='checkbox' value='1' name='manual_sql' checked id="manual_sql"> <label for="manual_sql">Incremental sql import</label> </td></tr> <tr><td> <!-- mysql details --> <table width='100%'> <tr> <td nowrap>Mysql server:</td> <td><input type=text size=40 name='mysql_server' value='localhost'></td> <tr> <td>Mysql username:</td> <td><input type=text size=40 name='mysql_username' value=''></td> </tr> <tr> <td>Mysql password:</td> <td><input type=text size=40 name='mysql_pass' value=''></td> </tr> <tr> <td>Mysql database:</td> <td><input type=text size=40 name='mysql_db' value=''></td> </tr> <tr> <td>Data encoding:</td> <td> <select name="charset_of_file"> <option value="" selected="selected">Default</option> <option value="big5" title="Big5 Traditional Chinese">big5</option> <option value="binary" title="Binary pseudo charset">binary</option> <option value="cp1250" title="Windows Central European">cp1250</option> <option value="cp932" title="SJIS for Windows Japanese">cp932</option> <option value="euckr" title="EUC-KR Korean">euckr</option> <option value="gb2312" title="GB2312 Simplified Chinese">gb2312</option> <option value="gbk" title="GBK Simplified Chinese">gbk</option> <option value="latin1" title="cp1252 West European">latin1</option> <option value="latin2" title="ISO 8859-2 Central European">latin2</option> <option value="sjis" title="Shift-JIS Japanese">sjis</option> <option value="tis620" title="TIS620 Thai">tis620</option> <option value="ucs2" title="UCS-2 Unicode">ucs2</option> <option value="ujis" title="EUC-JP Japanese">ujis</option> <option value="utf8" title="UTF-8 Unicode" >utf8</option> </select> </td> </tr> <?php $dir = "administrator/backups/"; $sql_files =array(); if(@is_dir($dir)){ if ($handle = @opendir($dir)) { /* This is the correct way to loop over the directory. */ while (false !== ($file = @readdir($handle))) { if(strstr($file, ".sql")) $sql_files[] = $file; } @closedir($handle); } if(sizeof($sql_files) > 0) { $list = ""; for($i=0;$i<sizeof($sql_files);$i++){ $list .= "<option value='$sql_files[$i]'>$sql_files[$i]</option>"; } echo "<tr><td>Import Mysql file:</td> <td><select name='sql_setfile'><option value='database-sql.sql'>Default</option>$list</select></td> </tr>"; } } ?> </table> </tr></td> <!-- end mysql details --> </table> <!--end tabs 1 --> </div> <div id="tabs-2"> <!-- start tabs 2 --> <table width="100%"> <tr bgcolor='#dddddd'><td> <!--<h3><a href="#">Files transfer and configuration:</a></h3>--> <input type=checkbox name='files_skip' value='1' > <font color='red'>Skip files restore</font><br /> <input type=checkbox name='preserve_perm' value='1'> Restore files permissions<br /> <input type=checkbox name='file_utilities' value='1' > Restore by using the server utilities(tar) <br /> <input type='checkbox' value='1' name='manual_ftp' checked> Incremental transfer </td></tr> <tr><td colspan=2> <table width='100%'> <tr><td colspan='2'> <label for="transfer_mode-ftp">Install files throught ftp:</label> <input type=radio name=transfer_mode value=2 id="transfer_mode-ftp"> <!--<small>this will attempt to transfer all files through ftp, so the owner keep it's permissions, can be used to send files to other hosts also, <font color=red>*recommended</font></small>--> <label for="transfer_mode-direct">Install files directly</label> <input type=radio name=transfer_mode value=1 checked id="transfer_mode-direct"><br /> <!--<small>transfering the files directly will cause some permissions problems in some cases, but it's faster than the other option </small>--> </td></tr> <tr> <td valign="top" nowrap>Ftp server:</td> <td><input type=text size=30 name='ftp_server' value='localhost'> : <input type=text size=3 name='ftp_port' value='21'></td> </tr> <tr> <td valign="top">Ftp username:</td> <td><input type=text size=30 name='ftp_user'></td> </tr> <tr> <td valign="top">Ftp password:</td> <td><input type=text size=30 name='ftp_pass'></td> </tr> <tr> <td valign="top">Ftp upload path:</td> <td><input type=text size=30 name='ftp_path'> <br><small>ftp root path of where the backup will be restored</small> </td> </tr> </table> </td></tr> </table> <!--end tabs 2--> </div> </div> <br /> <div class="form"> <input type=hidden name='task' value='step1'> <input type=submit name=submit value='Start install' > <button onclick="window.open('XCloner.php?task=getinfo', 'getInfo', 'toolbar,width=750,height=400'); return false;" id="phpinfo">phpinfo()</button> </div> <small>*after hitting submit please wait for the package to get unarchived and transfered through ftp if it is the case!</small> <br /> <span class="ui-state-highlight"> <span style='color:red'>Security Note:</span> After restore <b>delete the XCloner.php</b> script from your server</span> </span> <?php } function getPHPINFO(){ ?> <table width='100%'> <tr bgcolor='#dddddd'><td> <b>PHP Configuration: <a target='_blank' href='XCloner.php?task=info'> phpinfo()</a></b> </td></tr> <tr><td> <table bgcolor='#dddddd' width='65%' style='text-align:center;' border='1'> <tr> <td><b style='color:red'>PHP Setting</b></td> <td><b style='color:orange'>Current Value</b></td> <td><b style='color:green'>Recomemnded</b></td> </tr> <tr> <td><b>Open_Basedir:</b> </td> <td> <?php echo (@ini_get('open_basedir') ? @ini_get('open_basedir') : 'No value')?> </td> <td><b>No Value</b></td> </tr> <tr> <td><b>Max Execution Time:</b> </td> <td> <?php echo (@ini_get('max_execution_time') ? @ini_get('max_execution_time') : 'No value')?> </td> <td><b>>30</b></td> </tr> <tr> <td><b>Safe mode:</b> </td> <td> <?php echo (@ini_get('safe_mode') ? @ini_get('safe_mode') : 'Off')?> </td> <td><b>Off</b></td> </tr> </table> </td></tr> </table> <?php } ###END ###Starting the manual sql backup function populate_db_manual( $db, $sqlfile='administrator/backups/database-sql.sql'){ global $qstr, $_CONFIG; $extra_que = $qstr[0]; $file = $sqlfile; define ('DATA_CHUNK_LENGTH',16384); // How many chars are read per time define ('MAX_QUERY_LINES',300); // How many lines may be considered to be one query (except text lines) $lines = ""; $error = ""; $error_status = 0; if((isset($_REQUEST['chunk']))&&((int)$_REQUEST['chunk'] != 0)) $chunk = $_REQUEST['chunk']; else $chunk = DATA_CHUNK_LENGTH; if($_REQUEST['correct_query'] != 1){ $start_pos = (int)$_REQUEST['fpos']; $fpos = read_file($file, MAX_QUERY_LINES, $start_pos, $chunk, $lines); }else{ $lines[0] = stripslashes($_REQUEST['error_msg']); $fpos = $_REQUEST['start_posf'] ; } foreach($lines as $line) if(trim($line) != ''){ $query = $line; $line = $line .";\n"; #$tmp = explode("DEFAULT CHARSET",$line); $line_tmp = $line; $start_pos = $start_pos + strlen($line); if(isset($_REQUEST['strrep'])) { $strrep = explode("\r\n", stripslashes($_REQUEST['strrep'])); foreach($strrep as $value) if(trim($value)!= ""){ $tmp = explode("|", $value); $line_tmp = str_replace(trim($tmp[0]),trim($tmp[1]),$line_tmp); $query = str_replace(trim($tmp[0]),trim($tmp[1]),$query); } } if(!$_CONFIG['mysqli']->query($line_tmp)){ if($_REQUEST['correct_query'] != 1) $fpos = $start_pos ; $form_url = rurl($fpos, $chunk); echo "</form><form name='' action='".$form_url."' method='POST'> <input type='hidden' name='correct_query' value = '1'> <input type='hidden' name='start_pos' value='".($start_pos-strlen($line))."'> <input type='hidden' name='start_posf' value='".$fpos."'> <input type='hidden' name='glen' value='".$qlen."'> <center>"; echo sprintf("<b>###MYSQL error</b>\n<br /><font color='red'>".$_CONFIG['mysqli']->error."</font><br />\n<b>###On Query:</b><br />\n<br /><textarea cols=70 rows=15 name='error_msg'>%s</textarea><br />", $query); echo "<b>Search and replace in query:</b><br /><textarea cols=70 rows=5 name='strrep'>".stripslashes($_REQUEST[strrep])."</textarea><br /> <small> enter a string, one per line, which you would like to replace in the query above, example <i>string_to_search|text_to_replace_with</i> </small>"; echo "<br /> <input type=submit name=submit value='Correct Query >>'>"; echo "</center></form>"; $error_status = 1; break; } } $percent = sprintf("%.2f", (100*$fpos)/ filesize($file)); if($fpos!='-1'){ echo "<h3>Processed $percent% from sql backup!</h3>"; $red_url = rurl($fpos, $chunk); if($error_status == 1 ){ echo "<h3><a href='".$red_url."'>To skip this query, click here to Continue</a></h3>"; exit; }else{ echo "<h3><a href='".$red_url."'>Continue here</a></h3>"; echo "<script>window.location='".$red_url."'</script>"; exit; } } else { echo "<h3>The sql import is finished!</h3>"; } return; } ########END ### STARTING THE AUTOMATIC BACKUP function populate_db( $db, $sqlfile='administrator/backups/database-sql.sql') { global $errors, $_CONFIG; if($_REQUEST['use_mysqldump'] == 1){ echo shell_exec($_REQUEST['mysqldump_path']." -u ".$_REQUEST[mysql_username]." -p".$_REQUEST[mysql_pass]." -h ".$_REQUEST[mysql_server]." ".$_REQUEST[mysql_db]." < ".$sqlfile); return; } $mqr = @get_magic_quotes_runtime(); @set_magic_quotes_runtime(0); @chmod($sqlfile,0777); $query = fread( fopen( $sqlfile, 'r' ), filesize( $sqlfile ) ); @set_magic_quotes_runtime($mqr); $pieces = split_sql($query); for ($i=0; $i<count($pieces); $i++) { $pieces[$i] = trim($pieces[$i]); $tmp = explode("DEFAULT CHARSET",$pieces[$i]); $pieces[$i] = $tmp[0].";"; if(!empty($pieces[$i]) && $pieces[$i] != "#") { if (!$_CONFIG['mysqli']->query($pieces[$i], $db)) { $errors[] = "\n\n##Mysql Query: \n########\n". $pieces[$i]. "\n########\n##Error message: ". $_CONFIG['mysqli']->error; } } } return $errors; } function rurl($fpos = 0, $chunk = 0){ $get_query = "&"; foreach($_REQUEST as $key=>$value){ if(($key != 'fpos')&&($key != 'chunk')&&($key != 'strrep_c')&&($key != 'strrep') && ($key != "error_msg") && ($key != "correct_query") ) $get_query .= $key."=".urlencode($value)."&"; } $url = $_SERVER['PHP_SELF']."?fpos=".$fpos."&chunk=".$chunk.$get_query; return $url; } function read_file($file, $lines, $start_pos, &$chunk, &$text){ $cline = 0; $fp = fopen($file, "r"); fseek($fp, $start_pos); while((!feof($fp)) &&($cline <= $lines)){ $btemp = fgets($fp, $chunk); $buffer .= $btemp; if(strstr($btemp, ";\n")) $cline++; $fpos = ftell($fp); } $buffer = str_replace(";\r", ";\n", $buffer); $text = explode(";\n", $buffer); $fpos = $fpos - strlen($text[sizeof($text)-1]); if(sizeof($text) == 1) $chunk = DATA_CHUNK_LENGTH+$chunk; else $chunk = DATA_CHUNK_LENGTH; if(feof($fp)) $fpos = '-1'; fclose ($fp); return $fpos; // array_reverse is optional: you can also just return the $text array which consists of the file's lines. } /** * @param string */ function split_sql($sql) { $ret = array(); $sql = str_replace("\n) ", "\n) ;\n#\n#", $sql); $sql = str_replace("\n--\n","\n#\n",$sql); $sql = str_replace("\n-- ","\n# ",$sql); $sql = str_replace("\n/*","\n#/*",$sql); $sql = str_replace("#\n", "#;\n", $sql); // Processing the SQL file content $file_content = explode("\n",$sql); $query = ""; // Parsing the SQL file content foreach($file_content as $key=>$sql_line) { if(substr($sql_line, 0, 2) == "--") $sql_line = "#".substr($sql_line, 2, strlen($sql_line)); if(trim($sql_line) != "" ){ $query .= $sql_line; // Checking whether the line is a valid statement if(preg_match("/(.*);/", $sql_line)){ $query = substr($query, 0, strlen($query)-1); //Executing the parsed string, returns the error code in failure $ret[] = $query; $query = ""; } } } //End of foreach return($ret); } function recurseFiles(&$d_arr, &$ds_arr, &$f_arr, &$s_arr, &$d, &$f, &$s, &$includedFolders, $path, $mosConfig_absolute_path) { $currentfullpath = $mosConfig_absolute_path.$path; # Open possibly available directory if( is_dir( $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 != ".." ) { if( is_dir( $currentfullpath . "/" . $file ) ) { # Create array for directories $d_arr[++$d] = $currentfullpath . "/" . $file; recurseFiles($d_arr, $ds_arr, $f_arr, $s_arr, $d, $f, $s, $includedFolders, $path . "/" . $file, $mosConfig_absolute_path); } else { if ( in_array($currentfullpath, $includedFolders) ) { # Create array for files $s_arr[$f] = filesize($currentfullpath.'/'.$file); $f_arr[$f++] = str_replace($mosConfig_absolute_path.'/', '', $currentfullpath.'/').$file; $s += filesize($currentfullpath.'/'.$file); } } } } } # Wrap things up if we're in a directory if( is_dir( $handle ) ) closedir( $handle ); } } function version_list($fname) { global $_CONFIG; $return = "<select name='$fname'><option value=''>Choose local clone archive</option>"; if(is_array($_CONFIG[versions])){ foreach($_CONFIG[versions] as $key=>$value){ $size = sprintf("%.2fM", filesize($value)/(1024*1024)); $return .= "<option selected value='$value'>$value($size)</option>"; } } $return .= "</select>"; return $return; } function recursive_remove_directory($directory, $empty=FALSE){ // if the path has a slash at the end we remove it here if(substr($directory,-1) == '/'){ $directory = substr($directory,0,-1); } // if the path is not valid or is not a directory ... if(!file_exists($directory) || !is_dir($directory)){ // ... we return false and exit the function return FALSE; // ... if the path is not readable }elseif(!is_readable($directory)){ // ... we return false and exit the function return FALSE; // ... else if the path is readable }else{ // we open the directory $handle = opendir($directory); // and scan through the items inside while (FALSE !== ($item = readdir($handle))){ // if the filepointer is not the current directory // or the parent directory if($item != '.' && $item != '..'){ // we build the new path to delete $path = $directory.'/'.$item; // if the new path is a directory if(is_dir($path)){ // we call this function with the new path recursive_remove_directory($path); // if the new path is a file }else{ // we remove the file unlink($path); } } } // close the directory closedir($handle); // if the option to empty is not set to true if($empty == FALSE){ // try to delete the now empty directory if(!@rmdir($directory)){ // return false if not possible return FALSE; } } // return success return TRUE; } } function setCache($time = 3600){ $seconds_to_cache = $time; $ts = gmdate("D, d M Y H:i:s", time() + $seconds_to_cache) . " GMT"; @header("Expires: $ts"); @header("Pragma: cache"); @header("Cache-Control: maxage=$seconds_to_cache"); } ?>
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0 |
proxy
|
phpinfo
|
Settings