| 1 |
<?php |
| 2 |
/* |
| 3 |
Plugin Name: UpdraftPlus - Backup/Restore |
| 4 |
Plugin URI: http://updraftplus.com |
| 5 |
Description: Backup and restore: take backups locally, or backup to Amazon S3, Dropbox, Google Drive, Rackspace, (S)FTP, WebDAV & email, on automatic schedules. |
| 6 |
Author: UpdraftPlus.Com, DavidAnderson |
| 7 |
Version: 1.9.26 |
| 8 |
Donate link: http://david.dw-perspective.org.uk/donate |
| 9 |
License: GPLv3 or later |
| 10 |
Text Domain: updraftplus |
| 11 |
Domain Path: /languages |
| 12 |
Author URI: http://updraftplus.com |
| 13 |
*/ |
| 14 |
|
| 15 |
/* |
| 16 |
Portions copyright 2011-14 David Anderson |
| 17 |
Portions copyright 2010 Paul Kehrer |
| 18 |
Other portions copyright as indicated authors in the relevant files |
| 19 |
|
| 20 |
This program is free software; you can redistribute it and/or modify |
| 21 |
it under the terms of the GNU General Public License as published by |
| 22 |
the Free Software Foundation; either version 3 of the License, or |
| 23 |
(at your option) any later version. |
| 24 |
|
| 25 |
This program is distributed in the hope that it will be useful, |
| 26 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 27 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 28 |
GNU General Public License for more details. |
| 29 |
|
| 30 |
You should have received a copy of the GNU General Public License |
| 31 |
along with this program; if not, write to the Free Software |
| 32 |
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
| 33 |
*/ |
| 34 |
|
| 35 |
if (!defined('ABSPATH')) die('No direct access allowed'); |
| 36 |
|
| 37 |
define('UPDRAFTPLUS_DIR', dirname(__FILE__)); |
| 38 |
define('UPDRAFTPLUS_URL', plugins_url('', __FILE__)); |
| 39 |
define('UPDRAFT_DEFAULT_OTHERS_EXCLUDE','upgrade,cache,updraft,backup*,*backups'); |
| 40 |
define('UPDRAFT_DEFAULT_UPLOADS_EXCLUDE','backup*,*backups,backwpup*,wp-clone'); |
| 41 |
|
| 42 |
# The following can go in your wp-config.php |
| 43 |
# Tables whose data can be safed without significant loss, if (and only if) the attempt to back them up fails (e.g. bwps_log, from WordPress Better Security, is log data; but individual entries can be huge and cause out-of-memory fatal errors on low-resource environments). Comma-separate the table names (without the WordPress table prefix). |
| 44 |
if (!defined('UPDRAFTPLUS_DATA_OPTIONAL_TABLES')) define('UPDRAFTPLUS_DATA_OPTIONAL_TABLES', 'bwps_log,statpress,slim_stats,redirection_logs,Counterize,Counterize_Referers,Counterize_UserAgents,wbz404_logs,wbz404_redirects,tts_trafficstats,tts_referrer_stats,wponlinebackup_generations'); |
| 45 |
if (!defined('UPDRAFTPLUS_ZIP_EXECUTABLE')) define('UPDRAFTPLUS_ZIP_EXECUTABLE', "/usr/bin/zip,/bin/zip,/usr/local/bin/zip,/usr/sfw/bin/zip,/usr/xdg4/bin/zip,/opt/bin/zip"); |
| 46 |
if (!defined('UPDRAFTPLUS_MYSQLDUMP_EXECUTABLE')) define('UPDRAFTPLUS_MYSQLDUMP_EXECUTABLE', "/usr/bin/mysqldump,/bin/mysqldump,/usr/local/bin/mysqldump,/usr/sfw/bin/mysqldump,/usr/xdg4/bin/mysqldump,/opt/bin/mysqldump"); |
| 47 |
# If any individual file size is greater than this, then a warning is given |
| 48 |
if (!defined('UPDRAFTPLUS_WARN_FILE_SIZE')) define('UPDRAFTPLUS_WARN_FILE_SIZE', 1024*1024*250); |
| 49 |
# On a test on a Pentium laptop, 100,000 rows needed ~ 1 minute to write out - so 150,000 is around the CPanel default of 90 seconds execution time. |
| 50 |
if (!defined('UPDRAFTPLUS_WARN_DB_ROWS')) define('UPDRAFTPLUS_WARN_DB_ROWS', 150000); |
| 51 |
|
| 52 |
# The smallest value (in megabytes) that the "split zip files at" setting is allowed to be set to |
| 53 |
if (!defined('UPDRAFTPLUS_SPLIT_MIN')) define('UPDRAFTPLUS_SPLIT_MIN', 25); |
| 54 |
|
| 55 |
# The maximum number of files to batch at one time when writing to the backup archive. You'd only be likely to want to raise (not lower) this. |
| 56 |
if (!defined('UPDRAFTPLUS_MAXBATCHFILES')) define('UPDRAFTPLUS_MAXBATCHFILES', 500); |
| 57 |
|
| 58 |
// Load add-ons and files that may or may not be present, depending on where the plugin was distributed |
| 59 |
if (is_file(UPDRAFTPLUS_DIR.'/autoload.php')) require_once(UPDRAFTPLUS_DIR.'/autoload.php'); |
| 60 |
if (is_file(UPDRAFTPLUS_DIR.'/udaddons/updraftplus-addons.php')) include_once(UPDRAFTPLUS_DIR.'/udaddons/updraftplus-addons.php'); |
| 61 |
|
| 62 |
# wp-cron only has hourly, daily and twicedaily, so we need to add some of our own |
| 63 |
function updraftplus_modify_cron_schedules($schedules) { |
| 64 |
$schedules['weekly'] = array('interval' => 604800, 'display' => 'Once Weekly'); |
| 65 |
$schedules['fortnightly'] = array('interval' => 1209600, 'display' => 'Once Each Fortnight'); |
| 66 |
$schedules['monthly'] = array('interval' => 2592000, 'display' => 'Once Monthly'); |
| 67 |
$schedules['every4hours'] = array('interval' => 14400, 'display' => sprintf(__('Every %s hours', 'updraftplus'), 4)); |
| 68 |
$schedules['every8hours'] = array('interval' => 28800, 'display' => sprintf(__('Every %s hours', 'updraftplus'), 8)); |
| 69 |
return $schedules; |
| 70 |
} |
| 71 |
# http://codex.wordpress.org/Plugin_API/Filter_Reference/cron_schedules. Raised priority because some plugins wrongly over-write all prior schedule changes (including BackupBuddy!) |
| 72 |
add_filter('cron_schedules', 'updraftplus_modify_cron_schedules', 30); |
| 73 |
|
| 74 |
// The checks here before loading are for performance only - unless one of those conditions is met, then none of the hooks will ever be used |
| 75 |
if (!is_admin() && (!defined('DOING_CRON') || !DOING_CRON) && (!defined('XMLRPC_REQUEST') || !XMLRPC_REQUEST) && empty($_SERVER['SHELL']) && empty($_SERVER['USER'])) return; |
| 76 |
|
| 77 |
$updraftplus_have_addons = 0; |
| 78 |
if (is_dir(UPDRAFTPLUS_DIR.'/addons') && $dir_handle = opendir(UPDRAFTPLUS_DIR.'/addons')) { |
| 79 |
while (false !== ($e = readdir($dir_handle))) { |
| 80 |
if (is_file(UPDRAFTPLUS_DIR.'/addons/'.$e) && preg_match('/\.php$/', $e)) { |
| 81 |
# We used to have 1024 bytes here - but this meant that if someone's site was hacked and a lot of code added at the top, and if they were running a too-low PHP version, then they might just see the symptom rather than the cause - and raise the support request with us. |
| 82 |
$header = file_get_contents(UPDRAFTPLUS_DIR.'/addons/'.$e, false, null, -1, 16384); |
| 83 |
$phprequires = (preg_match("/RequiresPHP: (\d[\d\.]+)/", $header, $matches)) ? $matches[1] : false; |
| 84 |
$phpinclude = (preg_match("/IncludePHP: (\S+)/", $header, $matches)) ? $matches[1] : false; |
| 85 |
if (false === $phprequires || version_compare(PHP_VERSION, $phprequires, '>=')) { |
| 86 |
$updraftplus_have_addons++; |
| 87 |
if ($phpinclude) require_once(UPDRAFTPLUS_DIR.'/'.$phpinclude); |
| 88 |
include_once(UPDRAFTPLUS_DIR.'/addons/'.$e); |
| 89 |
} |
| 90 |
} |
| 91 |
} |
| 92 |
@closedir($dir_handle); |
| 93 |
} |
| 94 |
|
| 95 |
require_once(UPDRAFTPLUS_DIR.'/class-updraftplus.php'); |
| 96 |
$updraftplus = new UpdraftPlus(); |
| 97 |
$updraftplus->have_addons = $updraftplus_have_addons; |
| 98 |
|
| 99 |
if (!$updraftplus->memory_check(192)) { |
| 100 |
// Experience appears to show that the memory limit is only likely to be hit (unless it is very low) by single files that are larger than available memory (when compressed) |
| 101 |
# Add sanity checks - found someone who'd set WP_MAX_MEMORY_LIMIT to 256K ! |
| 102 |
if (!$updraftplus->memory_check($updraftplus->memory_check_current(WP_MAX_MEMORY_LIMIT))) { |
| 103 |
$new = absint($updraftplus->memory_check_current(WP_MAX_MEMORY_LIMIT)); |
| 104 |
if ($new>32 && $new<100000) { |
| 105 |
@ini_set('memory_limit', $new.'M'); //up the memory limit to the maximum WordPress is allowing for large backup files |
| 106 |
} |
| 107 |
} |
| 108 |
} |
| 109 |
|
| 110 |
if (!class_exists('UpdraftPlus_Options')) require_once(UPDRAFTPLUS_DIR.'/options.php'); |
| 111 |
|