123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244 |
- <?php
- /**
- *
- * @global type $CONFIG
- * @return string filename of a new backup or false
- */
- function backup_tool_create_backup($options = array()) {
- /*
- * Create a new backup file
- */
- global $CONFIG;
- $dbuser = $CONFIG->dbuser; //get database user
- $dbpass = $CONFIG->dbpass; //get database password
- $dbname = $CONFIG->dbname; //get database name
- $dbhost = $CONFIG->dbhost;
- $datafolder = in_array('data', $options) ? elgg_get_data_path() : ''; //get path to sndata folder
- $rootfolder = in_array('site', $options) ? elgg_get_root_path() : ''; //get path to Elgg folder
- //get path to default backup dir specified in plugin settings
- $backup_dir = elgg_get_plugin_setting('backup_dir', 'backup-tool');
-
- $backip_file_name = elgg_get_plugin_setting("backup_name", 'backup-tool', 'backup') . '-' . date("Ymd");
- $backup_data_dir = $backup_dir.$backip_file_name."/";
-
-
- mkdir($backup_data_dir);
-
- $dump_path = '';
- //prepeare database dump
- if (in_array('db', $options)) {
- $backup_dump_dir = $backup_data_dir."dump/";
- mkdir($backup_dump_dir);
- $dump_name = $dbname . '.sql';
- $dump_path = $backup_dump_dir . $dump_name;
- $dump_command = "mysqldump --user={$dbuser} --password={$dbpass} --host={$dbhost} --databases {$dbname} > {$dump_path}";
-
- shell_exec($dump_command);
- sleep(1);
-
- //make a tar file for a dump
- //$cmd = "cd {$backup_dump_dir} && tar -cf {$backip_file_name}.tar {$dump_name}";
- //$result = shell_exec($cmd);
- //unlink($dump_path);
- }
-
-
- //prepare dataroot
- if (in_array('data',$options)){
- $backup_dataroot_dir = $backup_data_dir."dataroot/";
- mkdir($backup_dataroot_dir);
- $cmd = "cd {$datafolder} && cp . {$backup_dataroot_dir} -R";
- shell_exec($cmd);
- }
- //prepare siteroot
- if (in_array('site',$options)){
- $backup_siteroot_dir = $backup_data_dir."siteroot/";
- mkdir($backup_dataroot_dir);
- $cmd = "cd {$rootfolder} && cp . {$backup_siteroot_dir} -R";
- shell_exec($cmd);
- }
-
- //prepare tar file
- //$tar_name = $backip_file_name . '.tar';
- // $cmd = "tar -cf {$backup_data_dir}{$tar_name} {$datafolder} {$rootfolder}";
- $cmd = "cd {$backup_dir} && tar -cf {$backip_file_name}.tar -C {$backip_file_name} .";
- $result = shell_exec($cmd);
-
- //remove temp folder
- $remove_command = "rm " . $backup_data_dir ." -R";
- shell_exec($remove_command);
-
- //if dump with such name already exists then remove it first
- if (file_exists($backup_dir . $backip_file_name.".tar.gz")) {
- $remove_command = "rm " . $backup_dir . $backip_file_name . ".tar.gz";
- shell_exec($remove_command);
- }
- //compress
- $gzip_command = "gzip {$backup_dir}{$backip_file_name}.tar";
- shell_exec($gzip_command);
- if (file_exists($backup_dir . $backip_file_name . ".tar.gz")) {
- //create info file
- $inifile = fopen($backup_dir . $backip_file_name . ".tar.gz.ini", "w+");
- $options_string = serialize($options);
- fputs($inifile, $options_string, strlen($options_string));
- fclose($inifile);
- //return name of the new created backup file
- return $backip_file_name . "tar.gz";
- }
- return false;
- }
- function backup_tool_restore_backup ($options = array()){
-
- global $CONFIG;
- $dbuser = $CONFIG->dbuser; //get database user
- $dbpass = $CONFIG->dbpass; //get database password
- $dbname = $CONFIG->dbname; //get database name
- $dbhost = $CONFIG->dbhost;
- //get path to default backup dir specified in plugin settings
- $backup_dir = elgg_get_plugin_setting('backup_dir', 'backup-tool');
-
- $backip_file_name = $options['file_name'];
-
- $backup_data_dir = $backup_dir.str_replace(".tar.gz","",$backip_file_name)."/";
- $backup_file_path = $backup_dir.$backip_file_name;
- mkdir($backup_data_dir);
-
-
- //extract files from backup file into the new backup's dir
- $cmd = "cd $backup_data_dir && tar xfz $backup_file_path";
- exec($cmd);
-
- //restore dump
- $dump_dir = $backup_data_dir."dump/";
- $dump_file_path = $dump_dir.$dbname.".sql";
-
- $cmd = "mysql --user={$dbuser} --password={$dbpass} --host={$dbhost} {$dbname} < {$dump_file_path}";
- exec($cmd);
-
- //restore data folder
-
- $data_dir = $backup_data_dir."dataroot/";
-
- if (is_dir($data_dir)){
- $datafolder = elgg_get_data_path();
-
- $cmd = "cd $data_dir && cp -R . $datafolder";
- exec($cmd);
- }
-
- //restore site folder
-
- $site_dir = $backup_data_dir."siteroot/";
-
- if (is_dir($site_dir)){
- $sitefolder = elgg_get_root_path();
-
- $cmd = "cd $site_dir && cp -R . $sitefolder";
- exec($cmd);
- }
-
-
- //remove backup's dir
- $cmd = "rm $backup_data_dir -R";
- exec($cmd);
-
- return true;
- }
- function backup_tool_cleanup($offset) {
- elgg_load_library("backup_tool");
- $backup_dir = elgg_get_plugin_setting('backup_dir', 'backup-tool');
- $dir = opendir($backup_dir);
- //get size of each backup and comare it with offset
- while ($file = readdir($dir)) {
- if ($file != '.' && $file != '..') {
- $filename = $backup_dir . $file;
- if (is_file($filename)) {
- //if differences between current time and creation time is greater than offset then remove file
- $current_time = time();
- $creation_time = filemtime($filename);
- if ($current_time - $creation_time >= $offset) {
- unlink($filename);
- if (file_exists($filename . ".ini")) {
- unlink($filename . ".ini");
- }
- }
- }
- }
- }
- }
- /**
- *
- * @param type $filename - file for uploading
- * @param type $ftpfortest - ftp settings for test
- */
- function backup_tool_upload_to_ftp($filename = NULL, $ftpfortest = false) {
- if (!$ftpfortest) {
- //get ftp settings
- $ftp = unserialize(elgg_get_plugin_setting('ftp', 'backup-tool'));
- } else {
- $ftp = $ftpfortest;
- }
- //Set up a connection
- $conn = ftp_connect($ftp['host']) or die("Can not connect to " . $ftp['host']);
- // Login
- if (ftp_login($conn, $ftp['user'], $ftp['password'])) {
- echo elgg_echo('backup-tool:ftp:established');
- if (ftp_chdir($conn, $ftp['dir'])) {
- if (!$ftpfortest) {
- //try to upload file
- //get path to default backup dir specified in plugin settings
- $backup_dir = elgg_get_plugin_setting('backup_dir', 'backup-tool');
- $file_path = $backup_dir . $filename;
- if (ftp_put($conn, $filename, $file_path, FTP_BINARY)) {
- echo "successfully uploaded $filename\n";
- } else {
- echo "There was a problem while uploading $filename\n";
- }
- }
- } else {
- echo elgg_echo('backup-tool:ftp:failchdir');
- }
- } else {
- echo elgg_echo('backup-tool:ftp:notestablished');
- }
- // close the connection
- ftp_close($conn);
- }
|