/** * create manifest file * @return bool */ public function create_manifest() { $this->substeps_todo = 3; $this->log(sprintf(__('%d. Trying to generate a manifest file …', 'backwpup'), $this->steps_data[$this->step_working]['STEP_TRY'])); //build manifest $manifest = array(); // add blog information $manifest['blog_info']['url'] = home_url(); $manifest['blog_info']['wpurl'] = site_url(); $manifest['blog_info']['prefix'] = $GLOBALS['wpdb']->prefix; $manifest['blog_info']['description'] = get_option('blogdescription'); $manifest['blog_info']['stylesheet_directory'] = get_template_directory_uri(); $manifest['blog_info']['activate_plugins'] = wp_get_active_and_valid_plugins(); $manifest['blog_info']['activate_theme'] = wp_get_theme()->get('Name'); $manifest['blog_info']['admin_email'] = get_option('admin_email'); $manifest['blog_info']['charset'] = get_bloginfo('charset'); $manifest['blog_info']['version'] = BackWPup::get_plugin_data('wp_version'); $manifest['blog_info']['backwpup_version'] = BackWPup::get_plugin_data('version'); $manifest['blog_info']['language'] = get_bloginfo('language'); $manifest['blog_info']['name'] = get_bloginfo('name'); $manifest['blog_info']['abspath'] = ABSPATH; $manifest['blog_info']['uploads'] = wp_upload_dir(null, false, true); $manifest['blog_info']['contents']['basedir'] = WP_CONTENT_DIR; $manifest['blog_info']['contents']['baseurl'] = WP_CONTENT_URL; $manifest['blog_info']['plugins']['basedir'] = WP_PLUGIN_DIR; $manifest['blog_info']['plugins']['baseurl'] = WP_PLUGIN_URL; $manifest['blog_info']['themes']['basedir'] = get_theme_root(); $manifest['blog_info']['themes']['baseurl'] = get_theme_root_uri(); // add job settings $manifest['job_settings'] = $this->job; // add archive info foreach ($this->additional_files_to_backup as $file) { $manifest['archive']['extra_files'][] = basename($file); } if (isset($this->steps_data['JOB_FILE'])) { if ($this->job['backuproot']) { $manifest['archive']['abspath'] = trailingslashit($this->get_destination_path_replacement(ABSPATH)); } if ($this->job['backupuploads']) { $manifest['archive']['uploads'] = trailingslashit($this->get_destination_path_replacement(BackWPup_File::get_upload_dir())); } if ($this->job['backupcontent']) { $manifest['archive']['contents'] = trailingslashit($this->get_destination_path_replacement(WP_CONTENT_DIR)); } if ($this->job['backupplugins']) { $manifest['archive']['plugins'] = trailingslashit($this->get_destination_path_replacement(WP_PLUGIN_DIR)); } if ($this->job['backupthemes']) { $manifest['archive']['themes'] = trailingslashit($this->get_destination_path_replacement(get_theme_root())); } } if (!file_put_contents(BackWPup::get_plugin_data('TEMP') . 'manifest.json', json_encode($manifest))) { return false; } $this->substeps_done = 1; //Create backwpup_readme.txt $readme_text = __('You may have noticed the manifest.json file in this archive.', 'backwpup') . PHP_EOL; $readme_text .= __('manifest.json might be needed for later restoring a backup from this archive.', 'backwpup') . PHP_EOL; $readme_text .= __('Please leave manifest.json untouched and in place. Otherwise it is safe to be ignored.', 'backwpup') . PHP_EOL; if (!file_put_contents(BackWPup::get_plugin_data('TEMP') . 'backwpup_readme.txt', $readme_text)) { return false; } $this->substeps_done = 2; //add file to backup files if (is_readable(BackWPup::get_plugin_data('TEMP') . 'manifest.json')) { $this->additional_files_to_backup[] = BackWPup::get_plugin_data('TEMP') . 'manifest.json'; $this->additional_files_to_backup[] = BackWPup::get_plugin_data('TEMP') . 'backwpup_readme.txt'; $this->log(sprintf(__('Added manifest.json file with %1$s to backup file list.', 'backwpup'), size_format(filesize(BackWPup::get_plugin_data('TEMP') . 'manifest.json'), 2))); } $this->substeps_done = 3; return true; }
/** * * Check is folder readable and exists create it if not * add .htaccess or index.html file in folder to prevent directory listing * * @param string $folder the folder to check * @param bool $donotbackup Create a file that the folder will not backuped * * @return string with error message if one */ public static function check_folder($folder, $donotbackup = FALSE) { $folder = BackWPup_File::get_absolute_path($folder); $folder = untrailingslashit($folder); //check that is not home of WP $uploads = BackWPup_File::get_upload_dir(); if ($folder === untrailingslashit(str_replace('\\', '/', ABSPATH)) || $folder === untrailingslashit(str_replace('\\', '/', dirname(ABSPATH))) || $folder === untrailingslashit(str_replace('\\', '/', WP_PLUGIN_DIR)) || $folder === untrailingslashit(str_replace('\\', '/', WP_CONTENT_DIR)) || $folder === untrailingslashit($uploads) || $folder === '/') { return sprintf(__('Folder %1$s not allowed, please use another folder.', 'backwpup'), $folder); } //open base dir check if (!BackWPup_File::is_in_open_basedir($folder)) { return sprintf(__('Folder %1$s is not in open basedir, please use another folder.', 'backwpup'), $folder); } //create folder if it not exists if (!is_dir($folder)) { if (!wp_mkdir_p($folder)) { return sprintf(__('Cannot create folder: %1$s', 'backwpup'), $folder); } } //check is writable dir if (!is_writable($folder)) { return sprintf(__('Folder "%1$s" is not writable', 'backwpup'), $folder); } //create files for securing folder if (get_site_option('backwpup_cfg_protectfolders')) { $server_software = strtolower($_SERVER['SERVER_SOFTWARE']); //IIS if (strstr($server_software, 'microsoft-iis')) { if (!file_exists($folder . '/web.config')) { file_put_contents($folder . '/web.config', "<configuration>" . PHP_EOL . "\t<system.webServer>" . PHP_EOL . "\t\t<authorization>" . PHP_EOL . "\t\t\t<deny users=" * " />" . PHP_EOL . "\t\t</authorization>" . PHP_EOL . "\t</system.webServer>" . PHP_EOL . "</configuration>"); } } elseif (strstr($server_software, 'nginx')) { if (!file_exists($folder . '/index.php')) { file_put_contents($folder . '/index.php', "<?php" . PHP_EOL . "header( \$_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found' );" . PHP_EOL . "header( 'Status: 404 Not Found' );" . PHP_EOL); } } else { if (!file_exists($folder . '/.htaccess')) { file_put_contents($folder . '/.htaccess', "<Files \"*\">" . PHP_EOL . "<IfModule mod_access.c>" . PHP_EOL . "Deny from all" . PHP_EOL . "</IfModule>" . PHP_EOL . "<IfModule !mod_access_compat>" . PHP_EOL . "<IfModule mod_authz_host.c>" . PHP_EOL . "Deny from all" . PHP_EOL . "</IfModule>" . PHP_EOL . "</IfModule>" . PHP_EOL . "<IfModule mod_access_compat>" . PHP_EOL . "Deny from all" . PHP_EOL . "</IfModule>" . PHP_EOL . "</Files>"); } if (!file_exists($folder . '/index.php')) { file_put_contents($folder . '/index.php', "<?php" . PHP_EOL . "header( \$_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found' );" . PHP_EOL . "header( 'Status: 404 Not Found' );" . PHP_EOL); } } } //Create do not backup file for this folder if ($donotbackup && !file_exists($folder . '/.donotbackup')) { file_put_contents($folder . '/.donotbackup', __('BackWPup will not backup folders and its sub folders when this file is inside.', 'backwpup')); } return ''; }
/** * * Get folder to exclude from a given folder for file backups * * @param $folder string folder to check for excludes * * @return array of folder to exclude */ private function get_exclude_dirs($folder) { $folder = trailingslashit(str_replace('\\', '/', realpath($folder))); $excludedir = array(); if (FALSE !== strpos(trailingslashit(str_replace('\\', '/', realpath(ABSPATH))), $folder) && trailingslashit(str_replace('\\', '/', realpath(ABSPATH))) != $folder) { $excludedir[] = trailingslashit(str_replace('\\', '/', realpath(ABSPATH))); } if (FALSE !== strpos(trailingslashit(str_replace('\\', '/', realpath(WP_CONTENT_DIR))), $folder) && trailingslashit(str_replace('\\', '/', realpath(WP_CONTENT_DIR))) != $folder) { $excludedir[] = trailingslashit(str_replace('\\', '/', realpath(WP_CONTENT_DIR))); } if (FALSE !== strpos(trailingslashit(str_replace('\\', '/', realpath(WP_PLUGIN_DIR))), $folder) && trailingslashit(str_replace('\\', '/', realpath(WP_PLUGIN_DIR))) != $folder) { $excludedir[] = trailingslashit(str_replace('\\', '/', realpath(WP_PLUGIN_DIR))); } if (FALSE !== strpos(trailingslashit(str_replace('\\', '/', realpath(get_theme_root()))), $folder) && trailingslashit(str_replace('\\', '/', realpath(get_theme_root()))) != $folder) { $excludedir[] = trailingslashit(str_replace('\\', '/', realpath(get_theme_root()))); } if (FALSE !== strpos(trailingslashit(str_replace('\\', '/', realpath(BackWPup_File::get_upload_dir()))), $folder) && trailingslashit(str_replace('\\', '/', realpath(BackWPup_File::get_upload_dir()))) != $folder) { $excludedir[] = trailingslashit(str_replace('\\', '/', realpath(BackWPup_File::get_upload_dir()))); } return array_unique($excludedir); }
/** * * Get folder to exclude from a given folder for file backups * * @param $folder string folder to check for excludes * * @return array of folder to exclude */ private function get_exclude_dirs($folder) { $folder = trailingslashit(str_replace('\\', '/', realpath($folder))); $excludedir = array(); $excludedir[] = trailingslashit(str_replace('\\', '/', realpath(BackWPup::get_plugin_data('TEMP')))); //exclude temp $excludedir[] = trailingslashit(str_replace('\\', '/', realpath(get_site_option('backwpup_cfg_logfolder')))); //exclude log folder if (FALSE !== strpos(trailingslashit(str_replace('\\', '/', realpath(ABSPATH))), $folder) && trailingslashit(str_replace('\\', '/', realpath(ABSPATH))) != $folder) { $excludedir[] = trailingslashit(str_replace('\\', '/', realpath(ABSPATH))); } if (FALSE !== strpos(trailingslashit(str_replace('\\', '/', realpath(WP_CONTENT_DIR))), $folder) && trailingslashit(str_replace('\\', '/', realpath(WP_CONTENT_DIR))) != $folder) { $excludedir[] = trailingslashit(str_replace('\\', '/', realpath(WP_CONTENT_DIR))); } if (FALSE !== strpos(trailingslashit(str_replace('\\', '/', realpath(WP_PLUGIN_DIR))), $folder) && trailingslashit(str_replace('\\', '/', realpath(WP_PLUGIN_DIR))) != $folder) { $excludedir[] = trailingslashit(str_replace('\\', '/', realpath(WP_PLUGIN_DIR))); } if (FALSE !== strpos(trailingslashit(str_replace('\\', '/', realpath(get_theme_root()))), $folder) && trailingslashit(str_replace('\\', '/', realpath(get_theme_root()))) != $folder) { $excludedir[] = trailingslashit(str_replace('\\', '/', realpath(get_theme_root()))); } if (FALSE !== strpos(trailingslashit(realpath(BackWPup_File::get_upload_dir())), $folder) && trailingslashit(realpath(BackWPup_File::get_upload_dir())) != $folder) { $excludedir[] = trailingslashit(realpath(BackWPup_File::get_upload_dir())); } //Exclude Backup dirs $jobids = BackWPup_Option::get_job_ids(); foreach ($jobids as $id) { $backupdir = realpath(BackWPup_Option::get($id, 'backupdir')); if (!empty($backupdir) && $backupdir != '/') { $excludedir[] = trailingslashit(str_replace('\\', '/', $backupdir)); } } return array_unique($excludedir); }
function mainwp_backwpup_get_exclude_dirs($folder) { $folder = trailingslashit(str_replace('\\', '/', realpath($folder))); $exclude_dir_array = array(); if (false !== strpos(trailingslashit(str_replace('\\', '/', realpath(ABSPATH))), $folder) && trailingslashit(str_replace('\\', '/', realpath(ABSPATH))) != $folder) { $exclude_dir_array[] = trailingslashit(str_replace('\\', '/', realpath(ABSPATH))); } if (false !== strpos(trailingslashit(str_replace('\\', '/', realpath(WP_CONTENT_DIR))), $folder) && trailingslashit(str_replace('\\', '/', realpath(WP_CONTENT_DIR))) != $folder) { $exclude_dir_array[] = trailingslashit(str_replace('\\', '/', realpath(WP_CONTENT_DIR))); } if (false !== strpos(trailingslashit(str_replace('\\', '/', realpath(WP_PLUGIN_DIR))), $folder) && trailingslashit(str_replace('\\', '/', realpath(WP_PLUGIN_DIR))) != $folder) { $exclude_dir_array[] = trailingslashit(str_replace('\\', '/', realpath(WP_PLUGIN_DIR))); } if (false !== strpos(trailingslashit(str_replace('\\', '/', realpath(get_theme_root()))), $folder) && trailingslashit(str_replace('\\', '/', realpath(get_theme_root()))) != $folder) { $exclude_dir_array[] = trailingslashit(str_replace('\\', '/', realpath(get_theme_root()))); } if (false !== strpos(trailingslashit(str_replace('\\', '/', realpath(BackWPup_File::get_upload_dir()))), $folder) && trailingslashit(str_replace('\\', '/', realpath(BackWPup_File::get_upload_dir()))) != $folder) { $exclude_dir_array[] = trailingslashit(str_replace('\\', '/', realpath(BackWPup_File::get_upload_dir()))); } return array_unique($exclude_dir_array); }