protected static function checkDirectoryMainWPDirectory($write = true) { $branding_title = "MainWP"; if (MainWPChildBranding::is_branding()) { $branding_title = MainWPChildBranding::get_branding(); } $branding_title .= " upload directory"; try { $dirs = MainWPHelper::getMainWPDir(null, false); $path = $dirs[0]; } catch (Exception $e) { return self::renderDirectoryRow($branding_title, '', 'Writable', $e->getMessage(), false); } if (!is_dir(dirname($path))) { if ($write) { return self::renderDirectoryRow($branding_title, $path, 'Writable', 'Directory not found', false); } else { return false; } } $hasWPFileSystem = MainWPHelper::getWPFilesystem(); global $wp_filesystem; if ($hasWPFileSystem && !empty($wp_filesystem)) { if (!$wp_filesystem->is_writable($path)) { if ($write) { return self::renderDirectoryRow($branding_title, $path, 'Writable', 'Directory not writable', false); } else { return false; } } } else { if (!is_writable($path)) { if ($write) { return self::renderDirectoryRow($branding_title, $path, 'Writable', 'Directory not writable', false); } else { return false; } } } if ($write) { return self::renderDirectoryRow($branding_title, $path, 'Writable', 'Writable', true); } else { return true; } }
public function clean() { if (file_exists(WP_CONTENT_DIR . '/dbBackup.sql')) { @unlink(WP_CONTENT_DIR . '/dbBackup.sql'); } if (file_exists(ABSPATH . 'clone/config.txt')) { @unlink(ABSPATH . 'clone/config.txt'); } if (MainWPHelper::is_dir_empty(ABSPATH . 'clone')) { @rmdir(ABSPATH . 'clone'); } try { $dirs = MainWPHelper::getMainWPDir('backup', false); $backupdir = $dirs[0]; $files = glob($backupdir . '*'); foreach ($files as $file) { if (MainWPHelper::isArchive($file)) { @unlink($file); } } } catch (Exception $e) { } }
public static function validateMainWPDir() { $done = false; $dir = MainWPHelper::getMainWPDir(); $dir = $dir[0]; if (MainWPHelper::getWPFilesystem()) { global $wp_filesystem; try { MainWPHelper::checkDir($dir, false); } catch (Exception $e) { } if (!empty($wp_filesystem)) { if ($wp_filesystem->is_writable($dir)) { $done = true; } } } if (!$done) { if (!file_exists($dir)) { @mkdirs($dir); } if (is_writable($dir)) { $done = true; } } return $done; }
public static function cloneBackupExtract() { try { MainWPHelper::endSession(); $file = isset($_POST['f']) ? $_POST['f'] : $_POST['file']; $testFull = false; if ($file == '') { $dirs = MainWPHelper::getMainWPDir('backup', false); $backupdir = $dirs[0]; $files = glob($backupdir . 'download-*'); $archiveFile = false; foreach ($files as $file) { if (MainWPHelper::isArchive($file, 'download-')) { $archiveFile = $file; break; } } if ($archiveFile === false) { throw new Exception(__('No download file found', 'mainwp-child')); } $file = $archiveFile; } else { if (file_exists($file)) { $testFull = true; } else { $file = ABSPATH . $file; if (!file_exists($file)) { throw new Exception(__('Backup file not found', 'mainwp-child')); } $testFull = true; } } //return size in kb $cloneInstall = new MainWPCloneInstall($file); //todo: RS: refactor to get those plugins after install (after .18 release) $cloneInstall->readConfigurationFile(); $plugins = get_option('mainwp_temp_clone_plugins'); $themes = get_option('mainwp_temp_clone_themes'); if ($testFull) { $cloneInstall->testDownload(); } $cloneInstall->removeConfigFile(); $cloneInstall->extractBackup(); $pubkey = get_option('mainwp_child_pubkey'); $uniqueId = get_option('mainwp_child_uniqueId'); $server = get_option('mainwp_child_server'); $nonce = get_option('mainwp_child_nonce'); $nossl = get_option('mainwp_child_nossl'); $nossl_key = get_option('mainwp_child_nossl_key'); $sitesToClone = get_option('mainwp_child_clone_sites'); $cloneInstall->install(); $cloneInstall->updateWPConfig(); // $cloneInstall->update_option('mainwp_child_pubkey', $pubkey); // $cloneInstall->update_option('mainwp_child_uniqueId', $uniqueId); // $cloneInstall->update_option('mainwp_child_server', $server); // $cloneInstall->update_option('mainwp_child_nonce', $nonce); // $cloneInstall->update_option('mainwp_child_nossl', $nossl); // $cloneInstall->update_option('mainwp_child_nossl_key', $nossl_key); // $cloneInstall->update_option('mainwp_child_clone_sites', $sitesToClone); // $cloneInstall->update_option('mainwp_child_clone_permalink', true); MainWPHelper::update_option('mainwp_child_pubkey', $pubkey, 'yes'); MainWPHelper::update_option('mainwp_child_uniqueId', $uniqueId); MainWPHelper::update_option('mainwp_child_server', $server); MainWPHelper::update_option('mainwp_child_nonce', $nonce); MainWPHelper::update_option('mainwp_child_nossl', $nossl, 'yes'); MainWPHelper::update_option('mainwp_child_nossl_key', $nossl_key); MainWPHelper::update_option('mainwp_child_clone_sites', $sitesToClone); if (!MainWPHelper::startsWith(basename($file), 'download-backup-')) { MainWPHelper::update_option('mainwp_child_restore_permalink', true, 'yes'); } else { MainWPHelper::update_option('mainwp_child_clone_permalink', true, 'yes'); } $cloneInstall->clean(); if ($plugins !== false) { $out = array(); if (is_array($plugins)) { $dir = WP_CONTENT_DIR . '/plugins/'; $fh = @opendir($dir); while ($entry = @readdir($fh)) { if (!is_dir($dir . $entry)) { continue; } if ($entry == '.' || $entry == '..') { continue; } if (!in_array($entry, $plugins)) { MainWPHelper::delete_dir($dir . $entry); } } @closedir($fh); } delete_option('mainwp_temp_clone_plugins'); } if ($themes !== false) { $out = array(); if (is_array($themes)) { $dir = WP_CONTENT_DIR . '/themes/'; $fh = @opendir($dir); while ($entry = @readdir($fh)) { if (!is_dir($dir . $entry)) { continue; } if ($entry == '.' || $entry == '..') { continue; } if (!in_array($entry, $themes)) { MainWPHelper::delete_dir($dir . $entry); } } @closedir($fh); } delete_option('mainwp_temp_clone_themes'); } $output = array('result' => 'ok'); //todo: remove old tables if other prefix? wp_logout(); wp_set_current_user(0); } catch (Exception $e) { $output = array('error' => $e->getMessage()); } //return size in kb die(json_encode($output)); }
function uploadFile($file, $offset = 0) { $dirs = MainWPHelper::getMainWPDir('backup'); $backupdir = $dirs[0]; header('Content-Description: File Transfer'); header('Content-Description: File Transfer'); if (MainWPHelper::endsWith($file, '.tar.gz')) { header('Content-Type: application/x-gzip'); header("Content-Encoding: gzip'"); } else { header('Content-Type: application/octet-stream'); } header('Content-Disposition: attachment; filename="' . basename($file) . '"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($backupdir . $file)); while (@ob_end_flush()) { } $this->readfile_chunked($backupdir . $file, $offset); }
/** * Create full backup */ public function createFullBackup($excludes, $filePrefix = '', $addConfig = false, $includeCoreFiles = false, $file_descriptors = 0, $fileSuffix = false, $excludezip = false, $excludenonwp = false, $loadFilesBeforeZip = true, $ext = 'zip', $pid = false, $append = false) { $this->file_descriptors = $file_descriptors; $this->loadFilesBeforeZip = $loadFilesBeforeZip; $dirs = MainWPHelper::getMainWPDir('backup'); $backupdir = $dirs[0]; if (!defined('PCLZIP_TEMPORARY_DIR')) { define('PCLZIP_TEMPORARY_DIR', $backupdir); } if ($pid !== false) { $pid = trailingslashit($backupdir) . 'backup-' . $pid . '.pid'; } //Verify if another backup is running, if so, return an error $files = glob($backupdir . '*.pid'); foreach ($files as $file) { if (basename($file) == basename($pid)) { continue; } if (time() - filemtime($file) < 160) { MainWPHelper::error('Another backup process is running, try again later'); } } $timestamp = time(); if ($filePrefix != '') { $filePrefix .= '-'; } if ($ext == 'zip') { $this->archiver = null; $ext = '.zip'; } else { $this->archiver = new TarArchiver($this, $ext, $pid); $ext = $this->archiver->getExtension(); } // throw new Exception('Test 1 2 : ' . print_r($append,1)); if ($fileSuffix !== false && !empty($fileSuffix)) { $file = $fileSuffix . ($append === true ? '' : $ext); //Append already contains extension! } else { $file = 'backup-' . $filePrefix . $timestamp . $ext; } $filepath = $backupdir . $file; $fileurl = $file; // if (!$append) // { // if ($dh = opendir($backupdir)) // { // while (($file = readdir($dh)) !== false) // { // if ($file != '.' && $file != '..' && preg_match('/(.*).(zip|tar|tar.gz|tar.bz2|pid|done)$/', $file)) // { // @unlink($backupdir . $file); // } // } // closedir($dh); // } // } if (!$addConfig) { if (!in_array(str_replace(ABSPATH, '', WP_CONTENT_DIR), $excludes) && !in_array('wp-admin', $excludes) && !in_array(WPINC, $excludes)) { $addConfig = true; $includeCoreFiles = true; } } $this->timeout = 20 * 60 * 60; /*20 minutes*/ $mem = '512M'; @ini_set('memory_limit', $mem); @set_time_limit($this->timeout); @ini_set('max_execution_time', $this->timeout); if ($this->archiver != null) { $success = $this->archiver->createFullBackup($filepath, $excludes, $addConfig, $includeCoreFiles, $excludezip, $excludenonwp, $append); } else { if ($this->checkZipSupport()) { $success = $this->createZipFullBackup($filepath, $excludes, $addConfig, $includeCoreFiles, $excludezip, $excludenonwp); } else { if ($this->checkZipConsole()) { $success = $this->createZipConsoleFullBackup($filepath, $excludes, $addConfig, $includeCoreFiles, $excludezip, $excludenonwp); } else { $success = $this->createZipPclFullBackup2($filepath, $excludes, $addConfig, $includeCoreFiles, $excludezip, $excludenonwp); } } } return $success ? array('timestamp' => $timestamp, 'file' => $fileurl, 'filesize' => filesize($filepath)) : false; }