Пример #1
0
 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');
     }
 }
Пример #2
0
 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;
 }