1477 lines
52 KiB
PHP
1477 lines
52 KiB
PHP
<?php
|
|
|
|
if (!defined('WPVIVID_PLUGIN_DIR')){
|
|
die;
|
|
}
|
|
|
|
require_once WPVIVID_PLUGIN_DIR . '/includes/class-wpvivid-compress-default.php';
|
|
|
|
$wpvivid_extract_option = array();
|
|
|
|
class WPvivid_ZipClass extends Wpvivid_Compress_Default
|
|
{
|
|
public $last_error = '';
|
|
public $path_filter=array();
|
|
|
|
public function __construct()
|
|
{
|
|
if (!class_exists('PclZip'))
|
|
include_once(ABSPATH.'/wp-admin/includes/class-pclzip.php');
|
|
if (!class_exists('PclZip'))
|
|
{
|
|
$this->last_error = array('result'=>WPVIVID_FAILED,'error'=>"Class PclZip is not detected. Please update or reinstall your WordPress.");
|
|
}
|
|
}
|
|
|
|
public function get_packages($data,$write_child_files_json=false)
|
|
{
|
|
if(!function_exists('get_home_path'))
|
|
require_once(ABSPATH . 'wp-admin/includes/file.php');
|
|
$files = $this -> filesplit($data['compress']['max_file_size'],$data['files']);
|
|
|
|
$temp_dir = $data['path'].'temp-'.$data['prefix'].DIRECTORY_SEPARATOR;
|
|
if(!file_exists($temp_dir))
|
|
@mkdir($temp_dir);
|
|
$packages = array();
|
|
if(sizeof($files) > 1)
|
|
{
|
|
for($i =0;$i <sizeof($files);$i ++)
|
|
{
|
|
$package = array();
|
|
$path = $data['path'].$data['prefix'].'.part'.sprintf('%03d',($i +1)).'.zip';
|
|
|
|
if(isset($data['json_info']))
|
|
{
|
|
$package['json']=$data['json_info'];
|
|
}
|
|
/*
|
|
$remove_path_size = strlen( $this -> transfer_path(get_home_path()));
|
|
$package['json']['root'] = substr($data['root_path'], $remove_path_size);
|
|
*/
|
|
if($write_child_files_json)
|
|
{
|
|
foreach ($files[$i] as $file)
|
|
{
|
|
$ret_file=$this->get_json_data($file);
|
|
if($ret_file['result']==WPVIVID_SUCCESS)
|
|
{
|
|
$json=$ret_file['json_data'];
|
|
$json = json_decode($json, 1);
|
|
$package['json']['child_file'][basename($file)]=$json;
|
|
}
|
|
}
|
|
}
|
|
if(isset($data['root_flag']))
|
|
$package['json']['root_flag'] = $data['root_flag'];
|
|
if(isset($data['root_path']))
|
|
$package['json']['root_path'] = $data['root_path'];
|
|
$package['json']['file']=basename($path);
|
|
$package['path'] = $path;
|
|
$package['files'] = $files[$i];
|
|
$packages[] = $package;
|
|
}
|
|
}else {
|
|
$package = array();
|
|
$path = $data['path'].$data['prefix'].'.zip';
|
|
|
|
if(isset($data['json_info']))
|
|
{
|
|
$package['json']=$data['json_info'];
|
|
}
|
|
|
|
if($write_child_files_json)
|
|
{
|
|
foreach ($files[0] as $file)
|
|
{
|
|
$ret_file=$this->get_json_data($file);
|
|
if($ret_file['result']==WPVIVID_SUCCESS)
|
|
{
|
|
$json=$ret_file['json_data'];
|
|
$json = json_decode($json, 1);
|
|
$package['json']['child_file'][basename($file)]=$json;
|
|
}
|
|
}
|
|
}
|
|
/*
|
|
$remove_path_size = strlen( $this -> transfer_path(get_home_path()));
|
|
$package['json']['root'] = substr($data['root_path'], $remove_path_size);
|
|
*/
|
|
if(isset($data['root_flag']))
|
|
$package['json']['root_flag'] = $data['root_flag'];
|
|
if(isset($data['root_path']))
|
|
$package['json']['root_path'] = $data['root_path'];
|
|
$package['json']['file']=basename($path);
|
|
$package['path'] = $path;
|
|
$package['files'] = $files[0];
|
|
$packages[] = $package;
|
|
}
|
|
|
|
$ret['packages']=$packages;
|
|
$ret['temp_dir']=$temp_dir;
|
|
return $ret;
|
|
}
|
|
|
|
public function get_plugin_packages($data)
|
|
{
|
|
if(!function_exists('get_home_path'))
|
|
require_once(ABSPATH . 'wp-admin/includes/file.php');
|
|
|
|
$max_size= $data['compress']['max_file_size'];
|
|
|
|
$max_size = str_replace('M', '', $max_size);
|
|
if($max_size==0)
|
|
$max_size=200;
|
|
$size = intval($max_size) * 1024 * 1024;
|
|
|
|
$files = $this -> filesplit_plugin($size,$data['files'],false);
|
|
|
|
$temp_dir = $data['path'].'temp-'.$data['prefix'].DIRECTORY_SEPARATOR;
|
|
if(!file_exists($temp_dir))
|
|
@mkdir($temp_dir);
|
|
$packages = array();
|
|
|
|
if(sizeof($files) > 1)
|
|
{
|
|
for($i =0;$i <sizeof($files);$i ++)
|
|
{
|
|
$package = array();
|
|
$path = $data['path'].$data['prefix'].'.part'.sprintf('%03d',($i +1)).'.zip';
|
|
if(isset($data['json_info']))
|
|
{
|
|
$package['json']=$data['json_info'];
|
|
}
|
|
/*
|
|
$remove_path_size = strlen( $this -> transfer_path(get_home_path()));
|
|
$package['json']['root'] = substr($data['root_path'], $remove_path_size);
|
|
*/
|
|
if(isset($data['root_flag']))
|
|
$package['json']['root_flag'] = $data['root_flag'];
|
|
if(isset($data['root_path']))
|
|
$package['json']['root_path'] = $data['root_path'];
|
|
$package['json']['file']=basename($path);
|
|
$package['path'] = $path;
|
|
$package['files'] = $files[$i];
|
|
$packages[] = $package;
|
|
}
|
|
}else {
|
|
$package = array();
|
|
$path = $data['path'].$data['prefix'].'.zip';
|
|
|
|
if(isset($data['json_info']))
|
|
{
|
|
$package['json']=$data['json_info'];
|
|
}
|
|
/*
|
|
$remove_path_size = strlen( $this -> transfer_path(get_home_path()));
|
|
$package['json']['root'] = substr($data['root_path'], $remove_path_size);
|
|
*/
|
|
if(isset($data['root_flag']))
|
|
$package['json']['root_flag'] = $data['root_flag'];
|
|
if(isset($data['root_path']))
|
|
$package['json']['root_path'] = $data['root_path'];
|
|
$package['json']['file']=basename($path);
|
|
$package['path'] = $path;
|
|
$package['files'] = $files[0];
|
|
$packages[] = $package;
|
|
}
|
|
|
|
$ret['packages']=$packages;
|
|
$ret['temp_dir']=$temp_dir;
|
|
return $ret;
|
|
}
|
|
|
|
public function get_upload_packages($data)
|
|
{
|
|
if(!function_exists('get_home_path'))
|
|
require_once(ABSPATH . 'wp-admin/includes/file.php');
|
|
|
|
$max_size= $data['compress']['max_file_size'];
|
|
|
|
$max_size = str_replace('M', '', $max_size);
|
|
if($max_size==0)
|
|
$max_size=200;
|
|
$size = intval($max_size) * 1024 * 1024;
|
|
|
|
$files = $this -> get_files_cache($size,$data);
|
|
|
|
$temp_dir = $data['path'].'temp-'.$data['prefix'].DIRECTORY_SEPARATOR;
|
|
if(!file_exists($temp_dir))
|
|
@mkdir($temp_dir);
|
|
$packages = array();
|
|
|
|
if(sizeof($files) > 1)
|
|
{
|
|
$i=0;
|
|
foreach ($files as $file)
|
|
{
|
|
$package = array();
|
|
$path = $data['path'].$data['prefix'].'.part'.sprintf('%03d',($i +1)).'.zip';
|
|
if(isset($data['json_info']))
|
|
{
|
|
$package['json']=$data['json_info'];
|
|
}
|
|
/*
|
|
$remove_path_size = strlen( $this -> transfer_path(get_home_path()));
|
|
$package['json']['root'] = substr($data['root_path'], $remove_path_size);
|
|
*/
|
|
if(isset($data['root_flag']))
|
|
$package['json']['root_flag'] = $data['root_flag'];
|
|
if(isset($data['root_path']))
|
|
$package['json']['root_path'] = $data['root_path'];
|
|
$package['json']['file']=basename($path);
|
|
$package['path'] = $path;
|
|
$package['files'] = $file;
|
|
$packages[] = $package;
|
|
$i++;
|
|
}
|
|
}else {
|
|
$package = array();
|
|
$path = $data['path'].$data['prefix'].'.zip';
|
|
if(isset($data['json_info']))
|
|
{
|
|
$package['json']=$data['json_info'];
|
|
}
|
|
/*
|
|
$remove_path_size = strlen( $this -> transfer_path(get_home_path()));
|
|
$package['json']['root'] = substr($data['root_path'], $remove_path_size);
|
|
*/
|
|
if(isset($data['root_flag']))
|
|
$package['json']['root_flag'] = $data['root_flag'];
|
|
if(isset($data['root_path']))
|
|
$package['json']['root_path'] = $data['root_path'];
|
|
$package['json']['file']=basename($path);
|
|
$package['path'] = $path;
|
|
$package['files'] = $files[0];
|
|
$packages[] = $package;
|
|
}
|
|
|
|
$ret['packages']=$packages;
|
|
return $ret;
|
|
}
|
|
|
|
public function compress_additional_database($data){
|
|
if(!function_exists('get_home_path'))
|
|
require_once(ABSPATH . 'wp-admin/includes/file.php');
|
|
global $wpvivid_plugin;
|
|
$wpvivid_plugin->wpvivid_log->WriteLog('Start compressing '.$data['key'],'notice');
|
|
$files = $data['files'];
|
|
$temp_dir = $data['path'].'temp-'.$data['prefix'].DIRECTORY_SEPARATOR;
|
|
if(!file_exists($temp_dir))
|
|
@mkdir($temp_dir);
|
|
|
|
$package_file = array();
|
|
|
|
$ret['result']=WPVIVID_SUCCESS;
|
|
$ret['files']=array();
|
|
|
|
foreach ($files as $file){
|
|
$file_name = $file;
|
|
$file_name = str_replace($data['path'], '', $file_name);
|
|
$file_name = str_replace('.sql', '', $file_name);
|
|
$path = $data['path'].$file_name.'.zip';
|
|
if(isset($data['json_info']))
|
|
{
|
|
$package_file['json']=$data['json_info'];
|
|
foreach ($data['sql_file_name'] as $sql_info){
|
|
if($file === $sql_info['file_name']){
|
|
$package_file['json']['database'] = $sql_info['database'];
|
|
}
|
|
}
|
|
}
|
|
if(isset($data['root_path']))
|
|
$package['json']['root_path'] = $data['root_path'];
|
|
if(isset($data['root_flag']))
|
|
$package_file['json']['root_flag'] = $data['root_flag'];
|
|
$package_file['json']['file']=basename($path);
|
|
$package_file['path'] = $path;
|
|
$package_file['files'] = $file;
|
|
$wpvivid_plugin->set_time_limit($wpvivid_plugin->current_task['id']);
|
|
$zip_ret=$this -> _zip($package_file['path'],$package_file['files'], $data, $package_file['json']);
|
|
if($zip_ret['result']==WPVIVID_SUCCESS)
|
|
{
|
|
$ret['files'][] = $zip_ret['file_data'];
|
|
}
|
|
else
|
|
{
|
|
$ret=$zip_ret;
|
|
break;
|
|
}
|
|
}
|
|
|
|
$wpvivid_plugin->wpvivid_log->WriteLog('Compressing '.$data['key'].' completed','notice');
|
|
return $ret;
|
|
}
|
|
|
|
public function compress($data,$write_child_files_json=false)
|
|
{
|
|
if(!function_exists('get_home_path'))
|
|
require_once(ABSPATH . 'wp-admin/includes/file.php');
|
|
global $wpvivid_plugin;
|
|
$wpvivid_plugin->wpvivid_log->WriteLog('Start compressing '.$data['key'],'notice');
|
|
$files = $this -> filesplit($data['compress']['max_file_size'],$data['files']);
|
|
|
|
$temp_dir = $data['path'].'temp-'.$data['prefix'].DIRECTORY_SEPARATOR;
|
|
if(!file_exists($temp_dir))
|
|
@mkdir($temp_dir);
|
|
$packages = array();
|
|
if(sizeof($files) > 1)
|
|
{
|
|
for($i =0;$i <sizeof($files);$i ++)
|
|
{
|
|
$package = array();
|
|
$path = $data['path'].$data['prefix'].'.part'.sprintf('%03d',($i +1)).'.zip';
|
|
if(isset($data['json_info']))
|
|
{
|
|
$package['json']=$data['json_info'];
|
|
}
|
|
/*
|
|
$remove_path_size = strlen( $this -> transfer_path(get_home_path()));
|
|
$package['json']['root'] = substr($data['root_path'], $remove_path_size);
|
|
*/
|
|
if(isset($data['root_flag']))
|
|
$package['json']['root_flag'] = $data['root_flag'];
|
|
if(isset($options['root_path']))
|
|
$package['json']['root_path'] = $data['root_path'];
|
|
$package['json']['file']=basename($path);
|
|
$package['path'] = $path;
|
|
$package['files'] = $files[$i];
|
|
$packages[] = $package;
|
|
}
|
|
}else {
|
|
$package = array();
|
|
$path = $data['path'].$data['prefix'].'.zip';
|
|
if(isset($data['json_info']))
|
|
{
|
|
$package['json']=$data['json_info'];
|
|
}
|
|
/*
|
|
$remove_path_size = strlen( $this -> transfer_path(get_home_path()));
|
|
$package['json']['root'] = substr($data['root_path'], $remove_path_size);
|
|
*/
|
|
if(isset($data['root_flag']))
|
|
$package['json']['root_flag'] = $data['root_flag'];
|
|
if(isset($options['root_path']))
|
|
$package['json']['root_path'] = $data['root_path'];
|
|
|
|
$package['json']['file']=basename($path);
|
|
$package['path'] = $path;
|
|
$package['files'] = $files[0];
|
|
$packages[] = $package;
|
|
}
|
|
|
|
$ret['result']=WPVIVID_SUCCESS;
|
|
$ret['files']=array();
|
|
|
|
foreach ($packages as $package)
|
|
{
|
|
if(!empty($package['files']))
|
|
{
|
|
$wpvivid_plugin->set_time_limit($wpvivid_plugin->current_task['id']);
|
|
$zip_ret=$this -> _zip($package['path'],$package['files'], $data,$package['json']);
|
|
if($zip_ret['result']==WPVIVID_SUCCESS)
|
|
{
|
|
$ret['files'][] = $zip_ret['file_data'];
|
|
}
|
|
else
|
|
{
|
|
$ret=$zip_ret;
|
|
break;
|
|
}
|
|
}else {
|
|
continue;
|
|
}
|
|
}
|
|
$wpvivid_plugin->wpvivid_log->WriteLog('Compressing '.$data['key'].' completed','notice');
|
|
return $ret;
|
|
}
|
|
|
|
public function extract($files, $path = '', $option = array())
|
|
{
|
|
if (!class_exists('WPvivid_PclZip'))
|
|
include_once WPVIVID_PLUGIN_DIR . '/includes/zip/class-wpvivid-pclzip.php';
|
|
|
|
if(!empty($option)){
|
|
$GLOBALS['wpvivid_extract_option'] = $option;
|
|
}
|
|
|
|
global $wpvivid_plugin;
|
|
//$wpvivid_plugin->restore_data->write_log('start prepare extract','notice');
|
|
define(PCLZIP_TEMPORARY_DIR,dirname($path));
|
|
|
|
$ret['result']=WPVIVID_SUCCESS;
|
|
foreach ($files as $file)
|
|
{
|
|
$wpvivid_plugin->restore_data->write_log('start extracting file:'.$file,'notice');
|
|
$archive = new WPvivid_PclZip($file);
|
|
$zip_ret = $archive->extract(WPVIVID_PCLZIP_OPT_PATH, $path,WPVIVID_PCLZIP_OPT_REPLACE_NEWER,WPVIVID_PCLZIP_CB_PRE_EXTRACT,'wpvivid_function_pre_extract_callback',WPVIVID_PCLZIP_OPT_TEMP_FILE_THRESHOLD,16);
|
|
if(!$zip_ret)
|
|
{
|
|
$ret['result']=WPVIVID_FAILED;
|
|
$ret['error'] = $archive->errorInfo(true);
|
|
$wpvivid_plugin->restore_data->write_log('extract finished:'.wp_json_encode($ret),'notice');
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
$wpvivid_plugin->restore_data->write_log('extract finished file:'.$file,'notice');
|
|
}
|
|
}
|
|
//$this->restore_data->write_log('extract finished files:'.wp_json_encode($all_files),'notice');
|
|
|
|
return $ret;
|
|
}
|
|
|
|
public function extract_ex($files,$path = '',$extract_files=array())
|
|
{
|
|
if (!class_exists('WPvivid_PclZip'))
|
|
include_once WPVIVID_PLUGIN_DIR . '/includes/zip/class-wpvivid-pclzip.php';
|
|
|
|
global $wpvivid_plugin;
|
|
//$wpvivid_plugin->restore_data->write_log('start prepare extract','notice');
|
|
define(PCLZIP_TEMPORARY_DIR,dirname($path));
|
|
|
|
$ret['result']=WPVIVID_SUCCESS;
|
|
foreach ($files as $file)
|
|
{
|
|
$wpvivid_plugin->restore_data->write_log('start extracting file:'.$file,'notice');
|
|
$wpvivid_plugin->restore_data->write_log('extract child file:'.wp_json_encode($extract_files),'notice');
|
|
$archive = new WPvivid_PclZip($file);
|
|
$zip_ret = $archive->extract(WPVIVID_PCLZIP_OPT_BY_NAME,$extract_files,WPVIVID_PCLZIP_OPT_PATH, $path,WPVIVID_PCLZIP_OPT_REPLACE_NEWER,WPVIVID_PCLZIP_CB_PRE_EXTRACT,'wpvivid_function_pre_extract_callback',WPVIVID_PCLZIP_OPT_TEMP_FILE_THRESHOLD,16);
|
|
if(!$zip_ret)
|
|
{
|
|
$ret['result']=WPVIVID_FAILED;
|
|
$ret['error'] = $archive->errorInfo(true);
|
|
$wpvivid_plugin->restore_data->write_log('extract finished:'.wp_json_encode($ret),'notice');
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
$wpvivid_plugin->restore_data->write_log('extract finished file:'.$file,'notice');
|
|
}
|
|
}
|
|
//$this->restore_data->write_log('extract finished files:'.wp_json_encode($all_files),'notice');
|
|
|
|
return $ret;
|
|
}
|
|
|
|
public function extract_by_files($files,$zip,$path = '')
|
|
{
|
|
if (!class_exists('WPvivid_PclZip'))
|
|
include_once WPVIVID_PLUGIN_DIR . '/includes/zip/class-wpvivid-pclzip.php';
|
|
|
|
define(PCLZIP_TEMPORARY_DIR,$path);
|
|
$flag = true;
|
|
$table = array();
|
|
$archive = new WPvivid_PclZip($zip);
|
|
$list = $archive -> listContent();
|
|
foreach ($list as $item)
|
|
{
|
|
if(strstr($item['filename'],WPVIVID_ZIPCLASS_JSONFILE_NAME))
|
|
{
|
|
$result = $archive->extract(WPVIVID_PCLZIP_OPT_BY_NAME, WPVIVID_ZIPCLASS_JSONFILE_NAME);
|
|
if($result)
|
|
{
|
|
$json = json_decode(file_get_contents(dirname($zip).WPVIVID_ZIPCLASS_JSONFILE_NAME),true);
|
|
$path = $json['root_path'];
|
|
}
|
|
}
|
|
}
|
|
|
|
$str = $archive->extract(WPVIVID_PCLZIP_OPT_PATH, $path, WPVIVID_PCLZIP_OPT_BY_NAME, $files, WPVIVID_PCLZIP_OPT_REPLACE_NEWER,WPVIVID_PCLZIP_OPT_TEMP_FILE_THRESHOLD,16);
|
|
if(!$str){
|
|
$flag = false;
|
|
$error = $archive->errorInfo(true);
|
|
}else{
|
|
$success_num = 0;
|
|
$error_num = 0;
|
|
$last_error = '';
|
|
foreach ($str as $item){
|
|
if($item['status'] === 'ok'){
|
|
$success_num ++;
|
|
}else{
|
|
$error_num ++;
|
|
$last_error = 'restore '.$item['filename'].' failed status:'.$item['status'];
|
|
}
|
|
}
|
|
$table['succeed'] = $success_num;
|
|
$table['failed'] = $error_num;
|
|
$error = $last_error;
|
|
}
|
|
|
|
if($flag){
|
|
return array('result'=>WPVIVID_SUCCESS,'table'=>$table,'error' => $error);
|
|
}else{
|
|
return array('result'=>'failed','error'=>$error);
|
|
}
|
|
}
|
|
|
|
public function get_include_zip($files,$allpackages){
|
|
if (!class_exists('WPvivid_PclZip'))
|
|
include_once WPVIVID_PLUGIN_DIR . '/includes/zip/class-wpvivid-pclzip.php';
|
|
|
|
$i = sizeof($files);
|
|
$zips = array();
|
|
foreach ( $allpackages as $item){
|
|
$archive = new WPvivid_PclZip($item);
|
|
$lists = $archive -> listContent();
|
|
foreach ($lists as $file){
|
|
if($this -> _in_array($file['filename'],$files)){
|
|
$zips[$item][] = $file['filename'];
|
|
if($i -- === 0)
|
|
break 2;
|
|
}
|
|
}
|
|
}
|
|
return $zips;
|
|
}
|
|
|
|
public function _zip($name,$files,$options,$json_info=false)
|
|
{
|
|
$zip_object_class=apply_filters('wpvivid_get_zip_object_class_ex','WPvivid_PclZip_Class',$options);
|
|
$zip=new $zip_object_class();
|
|
return $zip->zip($name,$files,$options,$json_info);
|
|
}
|
|
|
|
public function listcontent($path){
|
|
if (!class_exists('WPvivid_PclZip'))
|
|
include_once WPVIVID_PLUGIN_DIR . '/includes/zip/class-wpvivid-pclzip.php';
|
|
$zip = new WPvivid_PclZip($path);
|
|
$list = $zip->listContent();
|
|
return $list;
|
|
}
|
|
public function listnum($path , $includeFolder = false){
|
|
if (!class_exists('WPvivid_PclZip'))
|
|
include_once WPVIVID_PLUGIN_DIR . '/includes/zip/class-wpvivid-pclzip.php';
|
|
$zip = new WPvivid_PclZip($path);
|
|
$list = $zip->listContent();
|
|
$index = 0;
|
|
foreach ($list as $item){
|
|
if(!$includeFolder && $item['folder'])
|
|
continue;
|
|
$index ++;
|
|
}
|
|
return $index;
|
|
}
|
|
|
|
private function transfer_path($path)
|
|
{
|
|
$path = str_replace('\\','/',$path);
|
|
$values = explode('/',$path);
|
|
return implode(DIRECTORY_SEPARATOR,$values);
|
|
}
|
|
|
|
public function get_json_data($path, $json_type = 'backup')
|
|
{
|
|
if (!class_exists('WPvivid_PclZip'))
|
|
include_once WPVIVID_PLUGIN_DIR . '/includes/zip/class-wpvivid-pclzip.php';
|
|
$json_file_name = $json_type === 'backup' ? 'wpvivid_package_info.json' : 'wpvivid_export_package_info.json';
|
|
$archive = new WPvivid_PclZip($path);
|
|
$list = $archive->listContent();
|
|
if($list == false){
|
|
return array('result'=>WPVIVID_FAILED,'error'=>$archive->errorInfo(true));
|
|
}
|
|
else {
|
|
$b_exist = false;
|
|
foreach ($list as $item) {
|
|
if (basename($item['filename']) === $json_file_name) {
|
|
$b_exist = true;
|
|
$result = $archive->extract(WPVIVID_PCLZIP_OPT_BY_NAME, $json_file_name, WPVIVID_PCLZIP_OPT_EXTRACT_AS_STRING);
|
|
if ($result != 0) {
|
|
return array('result'=>WPVIVID_SUCCESS,'json_data'=>$result[0]['content']);
|
|
} else {
|
|
return array('result'=>WPVIVID_FAILED,'error'=>$archive->errorInfo(true));
|
|
}
|
|
}
|
|
}
|
|
if(!$b_exist){
|
|
return array('result'=>WPVIVID_FAILED,'error'=>'Failed to get json, this may be a old version backup.');
|
|
}
|
|
}
|
|
return array('result'=>WPVIVID_FAILED,'error'=>'Unknown error');
|
|
}
|
|
|
|
public function list_file($path)
|
|
{
|
|
if (!class_exists('WPvivid_PclZip'))
|
|
include_once WPVIVID_PLUGIN_DIR . '/includes/zip/class-wpvivid-pclzip.php';
|
|
$archive = new WPvivid_PclZip($path);
|
|
$list = $archive->listContent();
|
|
|
|
$files=array();
|
|
foreach ($list as $item)
|
|
{
|
|
if(basename($item['filename'])==='wpvivid_package_info.json')
|
|
{
|
|
continue;
|
|
}
|
|
$file['file_name']=$item['filename'];
|
|
$files[]=$file;
|
|
}
|
|
|
|
return $files;
|
|
}
|
|
|
|
public function filesplit_plugin($max_file_size,$files,$is_num=true)
|
|
{
|
|
$packages=array();
|
|
if($max_file_size == 0 || empty($max_file_size))
|
|
{
|
|
$packages[] = $files;
|
|
}else{
|
|
$folder_num_sum = 0;
|
|
$package = array();
|
|
|
|
if($is_num)
|
|
{
|
|
foreach ($files as $file)
|
|
{
|
|
$folder_num=0;
|
|
if(is_dir($file))
|
|
{
|
|
$folder_num=$this->get_folder_file_count($file);
|
|
}
|
|
else
|
|
{
|
|
$folder_num_sum+=filesize($file);
|
|
}
|
|
|
|
if($folder_num > $max_file_size)
|
|
{
|
|
$temp_package[] = $file;
|
|
$packages[] = $temp_package;
|
|
$temp_package = array();
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
$folder_num_sum+=$folder_num;
|
|
}
|
|
|
|
if($folder_num_sum > $max_file_size)
|
|
{
|
|
$package[] = $file;
|
|
$packages[] = $package;
|
|
$package = array();
|
|
$folder_num_sum=0;
|
|
}
|
|
else{
|
|
$package[] = $file;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach ($files as $file)
|
|
{
|
|
$folder_num=0;
|
|
if(is_dir($file))
|
|
{
|
|
$folder_num=$this->get_folder_file_size($file);
|
|
}
|
|
else
|
|
{
|
|
$folder_num_sum+=filesize($file);
|
|
}
|
|
|
|
if($folder_num > $max_file_size)
|
|
{
|
|
$temp_package[] = $file;
|
|
$packages[] = $temp_package;
|
|
$temp_package = array();
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
$folder_num_sum+=$folder_num;
|
|
}
|
|
|
|
if($folder_num_sum > $max_file_size)
|
|
{
|
|
$package[] = $file;
|
|
$packages[] = $package;
|
|
$package = array();
|
|
$folder_num_sum=0;
|
|
}
|
|
else{
|
|
$package[] = $file;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(!empty($package))
|
|
$packages[] = $package;
|
|
}
|
|
return $packages;
|
|
}
|
|
|
|
public function get_folder_file_count($file)
|
|
{
|
|
$count=0;
|
|
$this->get_folder_file_count_loop($file,$count);
|
|
|
|
return $count;
|
|
}
|
|
|
|
function get_folder_file_count_loop($path,&$count)
|
|
{
|
|
$handler = opendir($path);
|
|
if($handler!==false)
|
|
{
|
|
while (($filename = readdir($handler)) !== false)
|
|
{
|
|
if ($filename != "." && $filename != "..")
|
|
{
|
|
$count++;
|
|
|
|
if(is_dir($path . DIRECTORY_SEPARATOR . $filename))
|
|
{
|
|
$this->get_folder_file_count_loop($path . DIRECTORY_SEPARATOR . $filename,$count);
|
|
}
|
|
}
|
|
}
|
|
if($handler)
|
|
@closedir($handler);
|
|
}
|
|
}
|
|
|
|
function get_folder_file_size($file)
|
|
{
|
|
$count=0;
|
|
$this->get_folder_file_size_loop($file,$count);
|
|
|
|
return $count;
|
|
}
|
|
|
|
function get_folder_file_size_loop($path,&$count)
|
|
{
|
|
$handler = opendir($path);
|
|
if($handler!==false)
|
|
{
|
|
while (($filename = readdir($handler)) !== false)
|
|
{
|
|
if ($filename != "." && $filename != "..")
|
|
{
|
|
if(is_dir($path . DIRECTORY_SEPARATOR . $filename))
|
|
{
|
|
$this->get_folder_file_size_loop($path . DIRECTORY_SEPARATOR . $filename,$count);
|
|
}
|
|
else
|
|
{
|
|
$count+=filesize($path . DIRECTORY_SEPARATOR . $filename);
|
|
}
|
|
}
|
|
}
|
|
if($handler)
|
|
@closedir($handler);
|
|
}
|
|
}
|
|
|
|
public function get_root_flag_path($flag)
|
|
{
|
|
$path='';
|
|
if($flag==WPVIVID_BACKUP_ROOT_WP_CONTENT)
|
|
{
|
|
$path=WP_CONTENT_DIR;
|
|
}
|
|
else if($flag==WPVIVID_BACKUP_ROOT_CUSTOM)
|
|
{
|
|
$path=WP_CONTENT_DIR.DIRECTORY_SEPARATOR.WPvivid_Setting::get_backupdir();
|
|
}
|
|
else if($flag==WPVIVID_BACKUP_ROOT_WP_ROOT)
|
|
{
|
|
$path=ABSPATH;
|
|
}
|
|
return $path;
|
|
}
|
|
|
|
public function get_files_cache($size,$data)
|
|
{
|
|
$number=1;
|
|
$cache_perfix = $data['path'].$data['prefix'].'_file_cache_';
|
|
$cache_file_handle=false;
|
|
$sumsize=0;
|
|
|
|
if(isset($data['exclude_files_regex']))
|
|
$exclude_files_regex=$data['exclude_files_regex'];
|
|
else
|
|
$exclude_files_regex=array();
|
|
|
|
if(isset($data['exclude_regex']))
|
|
$exclude_regex=$data['exclude_regex'];
|
|
else
|
|
$exclude_regex=array();
|
|
|
|
if(isset($data['compress'])&&$data['compress']['exclude_file_size'])
|
|
$exclude_file_size=$data['compress']['exclude_file_size'];
|
|
else
|
|
$exclude_file_size=0;
|
|
|
|
if(isset($data['skip_files_time']))
|
|
{
|
|
$skip_files_time=$data['skip_files_time'];
|
|
}
|
|
else
|
|
{
|
|
$skip_files_time=0;
|
|
}
|
|
global $wpvivid_plugin;
|
|
$wpvivid_plugin->wpvivid_log->WriteLog('exclude_files_regex:'.wp_json_encode($exclude_files_regex),'notice');
|
|
|
|
foreach ($data['files'] as $file)
|
|
{
|
|
$this->get_file_cache($size,$file,$cache_perfix,$cache_file_handle,$number,$sumsize,$exclude_regex,$exclude_files_regex,$exclude_file_size,$skip_files_time);
|
|
}
|
|
|
|
$file_cache=array();
|
|
|
|
for($i=1;$i<$number+1;$i++)
|
|
{
|
|
$file_cache[]=$cache_perfix.$i.'.txt';
|
|
}
|
|
return $file_cache;
|
|
}
|
|
|
|
public function get_file_cache($size,$path,$cache_perfix,&$cache_file_handle,&$number,&$sumsize,$exclude_regex,$exclude_files_regex,$exclude_file_size,$skip_files_time)
|
|
{
|
|
if(!$cache_file_handle)
|
|
{
|
|
$cache_file=$cache_perfix.$number.'.txt';
|
|
$cache_file_handle=fopen($cache_file,'a');
|
|
}
|
|
$handler = opendir($path);
|
|
|
|
if($handler===false)
|
|
return;
|
|
|
|
while (($filename = readdir($handler)) !== false)
|
|
{
|
|
if ($filename != "." && $filename != "..")
|
|
{
|
|
if (is_dir($path . DIRECTORY_SEPARATOR . $filename))
|
|
{
|
|
if ($this->regex_match($exclude_regex, $path . DIRECTORY_SEPARATOR . $filename, 0))
|
|
{
|
|
$this->get_file_cache($size,$path . DIRECTORY_SEPARATOR . $filename,$cache_perfix,$cache_file_handle,$number,$sumsize,$exclude_regex,$exclude_files_regex,$exclude_file_size,$skip_files_time);
|
|
}
|
|
}
|
|
/*if(is_dir($path . DIRECTORY_SEPARATOR . $filename))
|
|
{
|
|
$this->get_file_cache($size,$path . DIRECTORY_SEPARATOR . $filename,$cache_perfix,$cache_file_handle,$number,$sumsize,$exclude_regex,$exclude_files_regex,$exclude_file_size,$skip_files_time);
|
|
}*/
|
|
else
|
|
{
|
|
if($this->regex_match($exclude_files_regex, $filename, 0))
|
|
{
|
|
if ($exclude_file_size == 0||(filesize($path . DIRECTORY_SEPARATOR . $filename) < $exclude_file_size * 1024 * 1024))
|
|
{
|
|
if(is_readable($path . DIRECTORY_SEPARATOR . $filename))
|
|
{
|
|
if($skip_files_time>0)
|
|
{
|
|
$file_time=filemtime($path . DIRECTORY_SEPARATOR . $filename);
|
|
if($file_time>0&&$file_time>$skip_files_time)
|
|
{
|
|
$sumsize+=filesize($path . DIRECTORY_SEPARATOR . $filename);
|
|
if($sumsize>$size)
|
|
{
|
|
$number++;
|
|
fclose($cache_file_handle);
|
|
$cache_file=$cache_perfix.$number.'.txt';
|
|
$cache_file_handle=fopen($cache_file,'a');
|
|
|
|
$line = $path . DIRECTORY_SEPARATOR . $filename.PHP_EOL;
|
|
fwrite($cache_file_handle, $line);
|
|
|
|
$sumsize=filesize($path . DIRECTORY_SEPARATOR . $filename);
|
|
}
|
|
else
|
|
{
|
|
$line = $path . DIRECTORY_SEPARATOR . $filename.PHP_EOL;
|
|
fwrite($cache_file_handle, $line);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$sumsize+=filesize($path . DIRECTORY_SEPARATOR . $filename);
|
|
if($sumsize>$size)
|
|
{
|
|
$number++;
|
|
fclose($cache_file_handle);
|
|
$cache_file=$cache_perfix.$number.'.txt';
|
|
$cache_file_handle=fopen($cache_file,'a');
|
|
|
|
$line = $path . DIRECTORY_SEPARATOR . $filename.PHP_EOL;
|
|
fwrite($cache_file_handle, $line);
|
|
|
|
$sumsize=filesize($path . DIRECTORY_SEPARATOR . $filename);
|
|
}
|
|
else
|
|
{
|
|
$line = $path . DIRECTORY_SEPARATOR . $filename.PHP_EOL;
|
|
fwrite($cache_file_handle, $line);
|
|
}
|
|
$files[] = $path . DIRECTORY_SEPARATOR . $filename;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if($handler)
|
|
@closedir($handler);
|
|
}
|
|
|
|
private function regex_match($regex_array,$string,$mode)
|
|
{
|
|
if(empty($regex_array))
|
|
{
|
|
return true;
|
|
}
|
|
|
|
if($mode==0)
|
|
{
|
|
foreach ($regex_array as $regex)
|
|
{
|
|
if(preg_match($regex,$string))
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
if($mode==1)
|
|
{
|
|
foreach ($regex_array as $regex)
|
|
{
|
|
if(preg_match($regex,$string))
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public function get_upload_files_from_cache($file)
|
|
{
|
|
$files=array();
|
|
$file = new SplFileObject($file);
|
|
$file->seek(0);
|
|
|
|
$file->setFlags( \SplFileObject::SKIP_EMPTY | \SplFileObject::READ_AHEAD );
|
|
|
|
while(!$file->eof())
|
|
{
|
|
$src = $file->fgets();
|
|
|
|
$src=trim($src,PHP_EOL);
|
|
|
|
if(empty($src))
|
|
continue;
|
|
|
|
if(!file_exists($src))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
$files[]=$src;
|
|
}
|
|
return $files;
|
|
}
|
|
}
|
|
|
|
class WPvivid_PclZip_Class
|
|
{
|
|
public function zip($name,$files,$options,$json_info=false)
|
|
{
|
|
global $wpvivid_plugin;
|
|
|
|
if(file_exists($name))
|
|
@wp_delete_file($name);
|
|
|
|
if (!class_exists('WPvivid_PclZip'))
|
|
include_once WPVIVID_PLUGIN_DIR . '/includes/zip/class-wpvivid-pclzip.php';
|
|
$archive = new WPvivid_PclZip($name);
|
|
if(isset($options['compress']['no_compress']))
|
|
{
|
|
$no_compress=$options['compress']['no_compress'];
|
|
}
|
|
else
|
|
{
|
|
$no_compress=1;
|
|
}
|
|
|
|
if(isset($options['compress']['use_temp_file']))
|
|
{
|
|
$use_temp_file=1;
|
|
}
|
|
else
|
|
{
|
|
$use_temp_file=0;
|
|
}
|
|
|
|
if(isset($options['compress']['use_temp_size']))
|
|
{
|
|
$use_temp_size=$options['compress']['use_temp_size'];
|
|
}
|
|
else
|
|
{
|
|
$use_temp_size=16;
|
|
}
|
|
|
|
if(isset($options['root_path']))
|
|
{
|
|
$replace_path=$options['root_path'];
|
|
}
|
|
else if(isset($options['root_flag']))
|
|
{
|
|
$replace_path=$this->get_root_flag_path($options['root_flag']);
|
|
}
|
|
else
|
|
{
|
|
$replace_path=WP_CONTENT_DIR.DIRECTORY_SEPARATOR.WPvivid_Setting::get_backupdir();
|
|
}
|
|
|
|
if($json_info!==false)
|
|
{
|
|
$temp_path = dirname($name).DIRECTORY_SEPARATOR.'wpvivid_package_info.json';
|
|
if(file_exists($temp_path))
|
|
{
|
|
@wp_delete_file($temp_path);
|
|
}
|
|
$json_info['php_version'] = phpversion();
|
|
global $wpdb;
|
|
$json_info['mysql_version'] = $wpdb->db_version();
|
|
file_put_contents($temp_path,print_r(wp_json_encode($json_info),true));
|
|
$archive -> add($temp_path,WPVIVID_PCLZIP_OPT_REMOVE_PATH,dirname($temp_path));
|
|
@wp_delete_file($temp_path);
|
|
}
|
|
|
|
$wpvivid_plugin->wpvivid_log->WriteLog('Prepare to zip files. file: '.basename($name),'notice');
|
|
|
|
/*foreach ($files as $index => $file){
|
|
if(!is_dir($file) && filesize($file) === 0){
|
|
$wpvivid_plugin->wpvivid_log->WriteLog('Ignore files with size 0. file: '.$file,'notice');
|
|
unset($files[$index]);
|
|
}
|
|
}*/
|
|
|
|
if($no_compress)
|
|
{
|
|
if($use_temp_file==1)
|
|
{
|
|
if($use_temp_size!=0)
|
|
{
|
|
$ret = $archive -> add($files,WPVIVID_PCLZIP_OPT_REMOVE_PATH,$replace_path,WPVIVID_PCLZIP_CB_PRE_ADD,'wpvivid_function_per_add_callback',WPVIVID_PCLZIP_OPT_NO_COMPRESSION,WPVIVID_PCLZIP_OPT_TEMP_FILE_THRESHOLD,$use_temp_size);
|
|
}
|
|
else
|
|
{
|
|
$ret = $archive -> add($files,WPVIVID_PCLZIP_OPT_REMOVE_PATH,$replace_path,WPVIVID_PCLZIP_CB_PRE_ADD,'wpvivid_function_per_add_callback',WPVIVID_PCLZIP_OPT_NO_COMPRESSION,WPVIVID_PCLZIP_OPT_TEMP_FILE_ON);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$ret = $archive -> add($files,WPVIVID_PCLZIP_OPT_REMOVE_PATH,$replace_path,WPVIVID_PCLZIP_CB_PRE_ADD,'wpvivid_function_per_add_callback',WPVIVID_PCLZIP_OPT_NO_COMPRESSION,WPVIVID_PCLZIP_OPT_TEMP_FILE_OFF);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if($use_temp_file==1)
|
|
{
|
|
if($use_temp_size!=0)
|
|
{
|
|
$ret = $archive -> add($files,WPVIVID_PCLZIP_OPT_REMOVE_PATH,$replace_path,WPVIVID_PCLZIP_CB_PRE_ADD,'wpvivid_function_per_add_callback',WPVIVID_PCLZIP_OPT_TEMP_FILE_THRESHOLD,$use_temp_size);
|
|
}
|
|
else
|
|
{
|
|
$ret = $archive -> add($files,WPVIVID_PCLZIP_OPT_REMOVE_PATH,$replace_path,WPVIVID_PCLZIP_CB_PRE_ADD,'wpvivid_function_per_add_callback',WPVIVID_PCLZIP_OPT_TEMP_FILE_ON);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$ret = $archive -> add($files,WPVIVID_PCLZIP_OPT_REMOVE_PATH,$replace_path,WPVIVID_PCLZIP_CB_PRE_ADD,'wpvivid_function_per_add_callback',WPVIVID_PCLZIP_OPT_TEMP_FILE_OFF);
|
|
}
|
|
}
|
|
|
|
if(!$ret)
|
|
{
|
|
$wpvivid_plugin->wpvivid_log->WriteLog('Failed to add zip files, error: '.$archive->errorInfo(true),'notice');
|
|
$size=size_format(disk_free_space(dirname($name)),2);
|
|
$wpvivid_plugin->wpvivid_log->WriteLog('disk_free_space : '.$size,'notice');
|
|
return array('result'=>WPVIVID_FAILED,'error'=>$archive->errorInfo(true));
|
|
}
|
|
|
|
$size=filesize($name);
|
|
if($size===false)
|
|
{
|
|
$wpvivid_plugin->wpvivid_log->WriteLog('Failed to add zip files, error: file not found after backup success','error');
|
|
$size=size_format(disk_free_space(dirname($name)),2);
|
|
$wpvivid_plugin->wpvivid_log->WriteLog('disk_free_space : '.$size,'notice');
|
|
return array('result'=>WPVIVID_FAILED,'error'=>'The file compression failed while backing up becuase of '.$name.' file not found. Please try again. The available disk space: '.$size.'.');
|
|
}
|
|
else if($size==0)
|
|
{
|
|
$wpvivid_plugin->wpvivid_log->WriteLog('Failed to add zip files, error: file size 0B after backup success','error');
|
|
$size=size_format(disk_free_space(dirname($name)),2);
|
|
$wpvivid_plugin->wpvivid_log->WriteLog('disk_free_space : '.$size,'notice');
|
|
return array('result'=>WPVIVID_FAILED,'error'=>'The file compression failed while backing up. The size of '.$name.' file is 0. Please make sure there is an enough disk space to backup. Then try again. The available disk space: '.$size.'.');
|
|
}
|
|
|
|
$wpvivid_plugin->wpvivid_log->WriteLog('Adding zip files completed.'.basename($name).', filesize: '.size_format(filesize($name),2),'notice');
|
|
$file_data = array();
|
|
$file_data['file_name'] = basename($name);
|
|
$file_data['size'] = filesize($name);
|
|
|
|
return array('result'=>WPVIVID_SUCCESS,'file_data'=>$file_data);
|
|
}
|
|
|
|
public function get_root_flag_path($flag)
|
|
{
|
|
$path='';
|
|
if($flag==WPVIVID_BACKUP_ROOT_WP_CONTENT)
|
|
{
|
|
$path=WP_CONTENT_DIR;
|
|
}
|
|
else if($flag==WPVIVID_BACKUP_ROOT_CUSTOM)
|
|
{
|
|
$path=WP_CONTENT_DIR.DIRECTORY_SEPARATOR.WPvivid_Setting::get_backupdir();
|
|
}
|
|
else if($flag==WPVIVID_BACKUP_ROOT_WP_ROOT)
|
|
{
|
|
$path=ABSPATH;
|
|
}
|
|
return $path;
|
|
}
|
|
}
|
|
|
|
class WPvivid_PclZip_Class_Ex
|
|
{
|
|
public function zip($name,$files,$options,$json_info=false)
|
|
{
|
|
global $wpvivid_plugin;
|
|
|
|
if(file_exists($name))
|
|
@wp_delete_file($name);
|
|
|
|
if (!class_exists('WPvivid_PclZip'))
|
|
include_once WPVIVID_PLUGIN_DIR . '/includes/zip/class-wpvivid-pclzip.php';
|
|
$archive = new WPvivid_PclZip($name);
|
|
|
|
if(isset($options['compress']['no_compress']))
|
|
{
|
|
$no_compress=$options['compress']['no_compress'];
|
|
}
|
|
else
|
|
{
|
|
$no_compress=1;
|
|
}
|
|
|
|
if(isset($options['compress']['use_temp_file']))
|
|
{
|
|
$use_temp_file=1;
|
|
}
|
|
else
|
|
{
|
|
$use_temp_file=0;
|
|
}
|
|
|
|
if(isset($options['compress']['use_temp_size']))
|
|
{
|
|
$use_temp_size=$options['compress']['use_temp_size'];
|
|
}
|
|
else
|
|
{
|
|
$use_temp_size=16;
|
|
}
|
|
|
|
if(isset($options['root_path']))
|
|
{
|
|
$replace_path=$options['root_path'];
|
|
}
|
|
else if(isset($options['root_flag']))
|
|
{
|
|
$replace_path=$this->get_root_flag_path($options['root_flag']);
|
|
}
|
|
else
|
|
{
|
|
$replace_path=WP_CONTENT_DIR.DIRECTORY_SEPARATOR.WPvivid_Setting::get_backupdir();
|
|
}
|
|
|
|
if($json_info!==false)
|
|
{
|
|
$temp_path = dirname($name).DIRECTORY_SEPARATOR.'wpvivid_package_info.json';
|
|
if(file_exists($temp_path))
|
|
{
|
|
@wp_delete_file($temp_path);
|
|
}
|
|
$json_info['php_version'] = phpversion();
|
|
global $wpdb;
|
|
$json_info['mysql_version'] = $wpdb->db_version();
|
|
file_put_contents($temp_path,print_r(wp_json_encode($json_info),true));
|
|
$archive -> add($temp_path,WPVIVID_PCLZIP_OPT_REMOVE_PATH,dirname($temp_path));
|
|
@wp_delete_file($temp_path);
|
|
}
|
|
|
|
$wpvivid_plugin->wpvivid_log->WriteLog('Prepare to zip files. file: '.basename($name),'notice');
|
|
|
|
if($no_compress)
|
|
{
|
|
if($use_temp_file==1)
|
|
{
|
|
if($use_temp_size!=0)
|
|
{
|
|
$ret = $archive -> add($files,WPVIVID_PCLZIP_OPT_REMOVE_PATH,$replace_path,WPVIVID_PCLZIP_CB_PRE_ADD,'wpvivid_function_per_add_callback',WPVIVID_PCLZIP_OPT_NO_COMPRESSION,WPVIVID_PCLZIP_OPT_TEMP_FILE_THRESHOLD,$use_temp_size);
|
|
}
|
|
else
|
|
{
|
|
$ret = $archive -> add($files,WPVIVID_PCLZIP_OPT_REMOVE_PATH,$replace_path,WPVIVID_PCLZIP_CB_PRE_ADD,'wpvivid_function_per_add_callback',WPVIVID_PCLZIP_OPT_NO_COMPRESSION,WPVIVID_PCLZIP_OPT_TEMP_FILE_ON);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$ret = $archive -> add($files,WPVIVID_PCLZIP_OPT_REMOVE_PATH,$replace_path,WPVIVID_PCLZIP_CB_PRE_ADD,'wpvivid_function_per_add_callback',WPVIVID_PCLZIP_OPT_NO_COMPRESSION,WPVIVID_PCLZIP_OPT_TEMP_FILE_OFF);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if($use_temp_file==1)
|
|
{
|
|
if($use_temp_size!=0)
|
|
{
|
|
$ret = $archive -> add($files,WPVIVID_PCLZIP_OPT_REMOVE_PATH,$replace_path,WPVIVID_PCLZIP_CB_PRE_ADD,'wpvivid_function_per_add_callback',WPVIVID_PCLZIP_OPT_TEMP_FILE_THRESHOLD,$use_temp_size);
|
|
}
|
|
else
|
|
{
|
|
$ret = $archive -> add($files,WPVIVID_PCLZIP_OPT_REMOVE_PATH,$replace_path,WPVIVID_PCLZIP_CB_PRE_ADD,'wpvivid_function_per_add_callback',WPVIVID_PCLZIP_OPT_TEMP_FILE_ON);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$ret = $archive -> add($files,WPVIVID_PCLZIP_OPT_REMOVE_PATH,$replace_path,WPVIVID_PCLZIP_CB_PRE_ADD,'wpvivid_function_per_add_callback',WPVIVID_PCLZIP_OPT_TEMP_FILE_OFF);
|
|
}
|
|
}
|
|
|
|
if(!$ret)
|
|
{
|
|
$wpvivid_plugin->wpvivid_log->WriteLog('Failed to add zip files, error: '.$archive->errorInfo(true),'notice');
|
|
$size=size_format(disk_free_space(dirname($name)),2);
|
|
$wpvivid_plugin->wpvivid_log->WriteLog('disk_free_space : '.$size,'notice');
|
|
return array('result'=>WPVIVID_FAILED,'error'=>$archive->errorInfo(true));
|
|
}
|
|
|
|
$size=filesize($name);
|
|
if($size===false)
|
|
{
|
|
$wpvivid_plugin->wpvivid_log->WriteLog('Failed to add zip files, error: file not found after backup success','error');
|
|
$size=size_format(disk_free_space(dirname($name)),2);
|
|
$wpvivid_plugin->wpvivid_log->WriteLog('disk_free_space : '.$size,'notice');
|
|
return array('result'=>WPVIVID_FAILED,'error'=>'The file compression failed while backing up becuase of '.$name.' file not found. Please try again. The available disk space: '.$size.'.');
|
|
}
|
|
else if($size==0)
|
|
{
|
|
$wpvivid_plugin->wpvivid_log->WriteLog('Failed to add zip files, error: file size 0B after backup success','error');
|
|
$size=size_format(disk_free_space(dirname($name)),2);
|
|
$wpvivid_plugin->wpvivid_log->WriteLog('disk_free_space : '.$size,'notice');
|
|
return array('result'=>WPVIVID_FAILED,'error'=>'The file compression failed while backing up. The size of '.$name.' file is 0. Please make sure there is an enough disk space to backup. Then try again. The available disk space: '.$size.'.');
|
|
}
|
|
|
|
$wpvivid_plugin->wpvivid_log->WriteLog('Adding zip files completed.'.basename($name).', filesize: '.size_format(filesize($name),2),'notice');
|
|
$file_data = array();
|
|
$file_data['file_name'] = basename($name);
|
|
$file_data['size'] = filesize($name);
|
|
|
|
return array('result'=>WPVIVID_SUCCESS,'file_data'=>$file_data);
|
|
}
|
|
|
|
public function get_root_flag_path($flag)
|
|
{
|
|
$path='';
|
|
if($flag==WPVIVID_BACKUP_ROOT_WP_CONTENT)
|
|
{
|
|
$path=WP_CONTENT_DIR;
|
|
}
|
|
else if($flag==WPVIVID_BACKUP_ROOT_CUSTOM)
|
|
{
|
|
$path=WP_CONTENT_DIR.DIRECTORY_SEPARATOR.WPvivid_Setting::get_backupdir();
|
|
}
|
|
else if($flag==WPVIVID_BACKUP_ROOT_WP_ROOT)
|
|
{
|
|
$path=ABSPATH;
|
|
}
|
|
return $path;
|
|
}
|
|
}
|
|
|
|
$wpvivid_old_time=0;
|
|
|
|
function wpvivid_function_per_add_callback($p_event, &$p_header)
|
|
{
|
|
if(!file_exists($p_header['filename'])){
|
|
return 0;
|
|
}
|
|
/*if($p_header['size'] === 0){
|
|
return 0;
|
|
}*/
|
|
|
|
$path = str_replace('\\','/',WP_CONTENT_DIR);
|
|
$content_path = $path.'/';
|
|
if(strpos($p_header['filename'], $content_path.'mu-plugins/endurance-browser-cache.php')!==false)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(strpos($p_header['filename'], $content_path.'mu-plugins/endurance-page-cache.php')!==false)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(strpos($p_header['filename'], $content_path.'mu-plugins/endurance-php-edge.php')!==false)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
$plugins = substr(WP_PLUGIN_DIR, strpos(WP_PLUGIN_DIR, 'wp-content/'));
|
|
|
|
if(strpos($p_header['filename'],$plugins.'/wpvivid-backuprestore')!==false)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(strpos($p_header['filename'],$plugins.'/wpvivid-backup-pro')!==false)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
global $wpvivid_old_time;
|
|
if(time()-$wpvivid_old_time>30)
|
|
{
|
|
$wpvivid_old_time=time();
|
|
global $wpvivid_plugin;
|
|
if(isset($wpvivid_plugin->current_task['id']))
|
|
{
|
|
$wpvivid_plugin->check_cancel_backup($wpvivid_plugin->current_task['id']);
|
|
WPvivid_taskmanager::update_backup_task_status($wpvivid_plugin->current_task['id']);
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
function wpvivid_function_pre_extract_callback($p_event, &$p_header)
|
|
{
|
|
$plugins = substr(WP_PLUGIN_DIR, strpos(WP_PLUGIN_DIR, 'wp-content/'));
|
|
|
|
if ( isset( $GLOBALS['wpvivid_extract_option'] ) )
|
|
{
|
|
$option = $GLOBALS['wpvivid_extract_option'];
|
|
if (isset($option['file_type']))
|
|
{
|
|
if ($option['file_type'] == 'themes')
|
|
{
|
|
if (isset($option['remove_themes']))
|
|
{
|
|
foreach ($option['remove_themes'] as $slug => $themes)
|
|
{
|
|
if (empty($slug))
|
|
continue;
|
|
if(strpos($p_header['filename'],$plugins.DIRECTORY_SEPARATOR.$slug)!==false)
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if ($option['file_type'] == 'plugin')
|
|
{
|
|
if (isset($option['remove_plugin']))
|
|
{
|
|
foreach ($option['remove_plugin'] as $slug => $plugin)
|
|
{
|
|
if (empty($slug))
|
|
continue;
|
|
if(strpos($p_header['filename'],$plugins.'/'.$slug)!==false)
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$path = str_replace('\\','/',WP_CONTENT_DIR);
|
|
$content_path = $path.'/';
|
|
if(strpos($p_header['filename'], $content_path.'advanced-cache.php')!==false)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(strpos($p_header['filename'], $content_path.'db.php')!==false)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(strpos($p_header['filename'], $content_path.'object-cache.php')!==false)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(strpos($p_header['filename'],$plugins.'/wpvivid-backuprestore')!==false)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(strpos($p_header['filename'],'wp-config.php')!==false)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(strpos($p_header['filename'],'wpvivid_package_info.json')!==false)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(strpos($p_header['filename'],'.htaccess')!==false)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(strpos($p_header['filename'],'.user.ini')!==false)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(strpos($p_header['filename'],'wordfence-waf.php')!==false)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(strpos($p_header['filename'], $content_path.'mu-plugins/endurance-browser-cache.php')!==false)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(strpos($p_header['filename'], $content_path.'mu-plugins/endurance-page-cache.php')!==false)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(strpos($p_header['filename'], $content_path.'mu-plugins/endurance-php-edge.php')!==false)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(strpos($p_header['filename'], $content_path.'mu-plugins/wp-stack-cache.php')!==false)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
} |