function fail_safe_pcl_db($backup_file, $fail_safe_files, $disable_comp) { //$this->back_hack($task_name, 'DB ZIP PCL: Start'); iwp_mmb_print_flush('DB ZIP PCL: Start'); //define('IWP_PCLZIP_TEMPORARY_DIR', IWP_BACKUP_DIR . '/'); require_once $GLOBALS['iwp_mmb_plugin_dir'] . '/pclzip.class.php'; $archive = new IWPPclZip($backup_file); if ($fail_safe_files && $disable_comp) { $result_db = $archive->add(IWP_DB_DIR, IWP_PCLZIP_OPT_REMOVE_PATH, IWP_BACKUP_DIR, IWP_PCLZIP_OPT_NO_COMPRESSION, IWP_PCLZIP_OPT_TEMP_FILE_THRESHOLD, 1); } elseif (!$fail_safe_files && $disable_comp) { $result_db = $archive->add(IWP_DB_DIR, IWP_PCLZIP_OPT_REMOVE_PATH, IWP_BACKUP_DIR, IWP_PCLZIP_OPT_NO_COMPRESSION); } elseif ($fail_safe_files && !$disable_comp) { $result_db = $archive->add(IWP_DB_DIR, IWP_PCLZIP_OPT_REMOVE_PATH, IWP_BACKUP_DIR, IWP_PCLZIP_OPT_TEMP_FILE_THRESHOLD, 1); } else { $result_db = $archive->add(IWP_DB_DIR, IWP_PCLZIP_OPT_REMOVE_PATH, IWP_BACKUP_DIR); } //$this->back_hack($task_name, 'DB ZIP PCL: End'); iwp_mmb_print_flush('DB ZIP PCL: End'); @unlink($db_result); @unlink(IWP_BACKUP_DIR . '/iwp_db/index.php'); @rmdir(IWP_DB_DIR); if (!$result_db) { return array('error' => 'Failed to zip database. pclZip error (' . $archive->error_code . '): .' . $archive->error_string, 'error_code' => 'failed_to_zip_database_pclZip_error'); } }
function backup_full($task_name, $backup_file, $exclude = array(), $include = array()) { global $zip_errors; $sys = substr(PHP_OS, 0, 3); $this->update_status($task_name, $this->statuses['db_dump']); $GLOBALS['fail_safe_db'] = $this->tasks[$task_name]['task_args']['fail_safe_db']; $db_result = $this->backup_db(); if ($db_result == false) { return array('error' => 'Failed to backup database.'); } else { if (is_array($db_result) && isset($db_result['error'])) { return array('error' => $db_result['error']); } } $this->update_status($task_name, $this->statuses['db_dump'], true); $this->update_status($task_name, $this->statuses['db_zip']); /*zip_backup_db*/ $fail_safe_files = $this->tasks[$task_name]['task_args']['fail_safe_files']; $disable_comp = $this->tasks[$task_name]['task_args']['disable_comp']; $comp_level = $disable_comp ? '-0' : '-1'; $zip = $this->get_zip(); iwp_mmb_print_flush('DB ZIP CMD: Start'); //Add database file chdir(IWP_BACKUP_DIR); $command = "{$zip} -q -r {$comp_level} {$backup_file} 'iwp_db'"; ob_start(); $result = $this->iwp_mmb_exec($command); ob_get_clean(); iwp_mmb_print_flush('DB ZIP CMD: End'); /*zip_backup_db*/ if (!$result) { $zip_archive_db_result = false; if (class_exists("ZipArchive")) { iwp_mmb_print_flush('DB ZIP Archive: Start'); $this->_log("DB zip, fallback to ZipArchive"); $zip_archive_db_result = $this->zip_archive_backup_db($task_name, $db_result, $backup_file); iwp_mmb_print_flush('DB ZIP Archive: End'); } if (!$zip_archive_db_result) { iwp_mmb_print_flush('DB ZIP PCL: Start'); define('PCLZIP_TEMPORARY_DIR', IWP_BACKUP_DIR . '/'); require_once $GLOBALS['iwp_mmb_plugin_dir'] . '/pclzip.class.php'; $archive = new IWPPclZip($backup_file); if ($fail_safe_files && $disable_comp) { $result_db = $archive->add(IWP_DB_DIR, PCLZIP_OPT_REMOVE_PATH, IWP_BACKUP_DIR, PCLZIP_OPT_NO_COMPRESSION, PCLZIP_OPT_TEMP_FILE_THRESHOLD, 1); } elseif (!$fail_safe_files && $disable_comp) { $result_db = $archive->add(IWP_DB_DIR, PCLZIP_OPT_REMOVE_PATH, IWP_BACKUP_DIR, PCLZIP_OPT_NO_COMPRESSION); } elseif ($fail_safe_files && !$disable_comp) { $result_db = $archive->add(IWP_DB_DIR, PCLZIP_OPT_REMOVE_PATH, IWP_BACKUP_DIR, PCLZIP_OPT_TEMP_FILE_THRESHOLD, 1); } else { $result_db = $archive->add(IWP_DB_DIR, PCLZIP_OPT_REMOVE_PATH, IWP_BACKUP_DIR); } iwp_mmb_print_flush('DB ZIP PCL: End'); @unlink($db_result); @unlink(IWP_BACKUP_DIR . '/iwp_db/index.php'); @rmdir(IWP_DB_DIR); if (!$result_db) { return array('error' => 'Failed to zip database. pclZip error (' . $archive->error_code . '): .' . $archive->error_string); } } } @unlink($db_result); @unlink(IWP_BACKUP_DIR . '/iwp_db/index.php'); @rmdir(IWP_DB_DIR); $this->update_status($task_name, $this->statuses['db_zip'], true); //Always remove backup folders $remove = array(trim(basename(WP_CONTENT_DIR)) . "/infinitewp/backups", trim(basename(WP_CONTENT_DIR)) . "/" . md5('iwp_mmb-client') . "/iwp_backups", trim(basename(WP_CONTENT_DIR)) . "/cache", trim(basename(WP_CONTENT_DIR)) . "/w3tc"); $exclude = array_merge($exclude, $remove); //Exclude paths $exclude_data = "-x"; $exclude_file_data = ''; if (!empty($exclude) && is_array($exclude)) { foreach ($exclude as $data) { if (empty($data)) { continue; } if (is_dir(ABSPATH . $data)) { if ($sys == 'WIN') { $exclude_data .= " {$data}/*.*"; } else { $exclude_data .= " '{$data}/*'"; } } else { if ($sys == 'WIN') { if (file_exists(ABSPATH . $data)) { $exclude_data .= " {$data}"; $exclude_file_data .= " {$data}"; } } else { if (file_exists(ABSPATH . $data)) { $exclude_data .= " '{$data}'"; $exclude_file_data .= " '{$data}'"; } } } } } if ($exclude_file_data) { $exclude_file_data = "-x" . $exclude_file_data; } /* foreach ($remove as $data) { if(empty($data)) continue; if ($sys == 'WIN') $exclude_data .= " $data/*.*"; else $exclude_data .= " '$data/*'"; }*/ //commented for pclzip modifications //Include paths by default $add = array(trim(WPINC), trim(basename(WP_CONTENT_DIR)), "wp-admin"); $include_data = ". -i"; foreach ($add as $data) { if ($sys == 'WIN') { $include_data .= " {$data}/*.*"; } else { $include_data .= " '{$data}/*'"; } } //Additional includes? if (!empty($include) && is_array($include)) { foreach ($include as $data) { if (empty($data)) { continue; } if ($data) { if ($sys == 'WIN') { $include_data .= " {$data}/*.*"; } else { $include_data .= " '{$data}/*'"; } } } } $this->update_status($task_name, $this->statuses['files_zip']); chdir(ABSPATH); $do_cmd_zip_alternative = false; @copy($backup_file, $backup_file . '_2'); iwp_mmb_print_flush('Files ZIP CMD: Start'); $command = "{$zip} -q -j {$comp_level} {$backup_file} .* * {$exclude_file_data}"; ob_start(); $result_f = $this->iwp_mmb_exec($command, false, true); ob_get_clean(); iwp_mmb_print_flush('Files ZIP CMD: 1/2 over'); if (!$result_f || $result_f == 18) { // disregard permissions error, file can't be accessed $command = "{$zip} -q -r {$comp_level} {$backup_file} {$include_data} {$exclude_data}"; ob_start(); $result_d = $this->iwp_mmb_exec($command, false, true); ob_get_clean(); if ($result_d && $result_d != 18) { @unlink($backup_file); $do_cmd_zip_alternative = true; if ($result_d > 0 && $result_d < 18) { //return array( // 'error' => 'Failed to archive files (' . $zip_errors[$result_d] . ') .' // ); iwp_mmb_print_flush('Files ZIP CMD: Failed to archive files (' . $zip_errors[$result_d] . ') .'); } else { //return array( // 'error' => 'Failed to archive files.' //); iwp_mmb_print_flush('Files ZIP CMD: Failed to archive files.'); } } } if (!$do_cmd_zip_alternative) { //if FILE ZIP CMD successful @unlink($backup_file . '_2'); } iwp_mmb_print_flush('Files ZIP CMD: End'); if ($result_f && $result_f != 18 || $do_cmd_zip_alternative) { if ($do_cmd_zip_alternative) { @copy($backup_file . '_2', $backup_file); @unlink($backup_file . '_2'); } $zip_archive_result = false; if (class_exists("ZipArchive")) { iwp_mmb_print_flush('Files ZIP Archive: Start'); $this->_log("Files zip fallback to ZipArchive"); $zip_archive_result = $this->zip_archive_backup($task_name, $backup_file, $exclude, $include); iwp_mmb_print_flush('Files ZIP Archive: End'); } if (!$zip_archive_result) { //Try pclZip iwp_mmb_print_flush('Files ZIP PCL: Start'); if (!isset($archive)) { define('PCLZIP_TEMPORARY_DIR', IWP_BACKUP_DIR . '/'); //require_once ABSPATH . '/wp-admin/includes/class-pclzip.php'; require_once $GLOBALS['iwp_mmb_plugin_dir'] . '/pclzip.class.php'; $archive = new IWPPclZip($backup_file); } //Include paths $include_data = array(); if (!empty($include) && is_array($include)) { foreach ($include as $data) { if ($data && file_exists(ABSPATH . $data)) { $include_data[] = ABSPATH . $data . '/'; } } } foreach ($add as $data) { if (file_exists(ABSPATH . $data)) { $include_data[] = ABSPATH . $data . '/'; } } //Include root files if ($handle = opendir(ABSPATH)) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != ".." && !is_dir($file) && file_exists(ABSPATH . $file)) { $include_data[] = ABSPATH . $file; } } closedir($handle); } //exclude paths $exclude_data = array(); if (!empty($exclude) && is_array($exclude)) { foreach ($exclude as $data) { if (is_dir(ABSPATH . $data)) { $exclude_data[] = $data . '/'; } else { $exclude_data[] = $data; } } } foreach ($remove as $rem) { $exclude_data[] = $rem . '/'; } if ($fail_safe_files && $disable_comp) { $result = $archive->add($include_data, PCLZIP_OPT_REMOVE_PATH, ABSPATH, PCLZIP_OPT_IWP_EXCLUDE, $exclude_data, PCLZIP_OPT_NO_COMPRESSION, PCLZIP_OPT_TEMP_FILE_THRESHOLD, 1); } elseif (!$fail_safe_files && $disable_comp) { $result = $archive->add($include_data, PCLZIP_OPT_REMOVE_PATH, ABSPATH, PCLZIP_OPT_IWP_EXCLUDE, $exclude_data, PCLZIP_OPT_NO_COMPRESSION); } elseif ($fail_safe_files && !$disable_comp) { $result = $archive->add($include_data, PCLZIP_OPT_REMOVE_PATH, ABSPATH, PCLZIP_OPT_IWP_EXCLUDE, $exclude_data, PCLZIP_OPT_TEMP_FILE_THRESHOLD, 1); } else { $result = $archive->add($include_data, PCLZIP_OPT_REMOVE_PATH, ABSPATH, PCLZIP_OPT_IWP_EXCLUDE, $exclude_data); } iwp_mmb_print_flush('Files ZIP PCL: End'); if (!$result) { @unlink($backup_file); return array('error' => 'Failed to zip files. pclZip error (' . $archive->error_code . '): .' . $archive->error_string); } } } //Reconnect $this->wpdb_reconnect(); $this->update_status($task_name, $this->statuses['files_zip'], true); return true; }