Server IP : 172.67.158.161 / Your IP : 3.149.243.131 Web Server : LiteSpeed System : Linux business53.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64 User : giankuin ( 1871) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /proc/self/root/proc/self/cwd/wp-content/plugins/duplicator-pro/classes/ |
Upload File : |
<?php defined("ABSPATH") or die(""); if (!defined('DUPLICATOR_PRO_VERSION')) exit; // Exit if accessed directly require_once (DUPLICATOR_PRO_PLUGIN_PATH . '/classes/entities/class.global.entity.php'); require_once (DUPLICATOR_PRO_PLUGIN_PATH . '/classes/class.io.php'); require_once (DUPLICATOR_PRO_PLUGIN_PATH . '/classes/entities/class.storage.entity.php'); /** * Class used to get server info * @package Duplicator\classes */ class DUP_PRO_Server { //IDE HELPERS /* @var $package DUP_PRO_Package */ /* @var $upload_info DUP_PRO_Package_Upload_Info */ public static function isCurlEnabled() { return function_exists('curl_init'); } public static function isURLFopenEnabled() { $val = ini_get('allow_url_fopen'); return ($val == true); } /** * Gets the system requirements which must pass to build a package * @return array An array of requirements */ public static function getRequirments() { $global = DUP_PRO_Global_Entity::get_instance(); $dup_tests = array(); //PHP SUPPORT $safe_ini = strtolower(ini_get('safe_mode')); $dup_tests['PHP']['SAFE_MODE'] = $safe_ini != 'on' || $safe_ini != 'yes' || $safe_ini != 'true' || ini_get("safe_mode") != 1 ? 'Pass' : 'Fail'; $dup_tests['PHP']['VERSION'] = version_compare(phpversion(), '5.2.9') >= 0 ? 'Pass' : 'Fail'; if ($global->archive_build_mode == DUP_PRO_Archive_Build_Mode::ZipArchive) { $dup_tests['PHP']['ZIP'] = class_exists('ZipArchive') ? 'Pass' : 'Fail'; } $dup_tests['PHP']['FUNC_1'] = function_exists("file_get_contents") ? 'Pass' : 'Fail'; $dup_tests['PHP']['FUNC_2'] = function_exists("file_put_contents") ? 'Pass' : 'Fail'; $dup_tests['PHP']['FUNC_3'] = function_exists("mb_strlen") ? 'Pass' : 'Fail'; $dup_tests['PHP']['ALL'] = !in_array('Fail', $dup_tests['PHP']) ? 'Pass' : 'Fail'; //PERMISSIONS $home_path = DUP_PRO_Archive::getArchiveListPaths('home'); if (strlen($home_path) === 0) { $home_path = DIRECTORY_SEPARATOR; } if (($handle_test = @opendir($home_path)) === false) { $dup_tests['IO']['WPROOT'] = 'Fail'; } else { @closedir($handle_test); $dup_tests['IO']['WPROOT'] = 'Pass'; } $dup_tests['IO']['SSDIR'] = is_writeable(DUPLICATOR_PRO_SSDIR_PATH) ? 'Pass' : 'Fail'; $dup_tests['IO']['SSTMP'] = is_writeable(DUPLICATOR_PRO_SSDIR_PATH_TMP) ? 'Pass' : 'Fail'; $dup_tests['IO']['ALL'] = !in_array('Fail', $dup_tests['IO']) ? 'Pass' : 'Fail'; //SERVER SUPPORT $dup_tests['SRV']['MYSQL_VER'] = version_compare(DUP_PRO_DB::getVersion(), '5.0', '>=') ? 'Pass' : 'Fail'; $dup_tests['SRV']['ALL'] = !in_array('Fail', $dup_tests['SRV']) ? 'Pass' : 'Fail'; //INSTALLATION FILES $dup_tests['RES']['INSTALL'] = !(self::hasInstallFiles()) ? 'Pass' : 'Fail'; $dup_tests['Success'] = $dup_tests['PHP']['ALL'] == 'Pass' && $dup_tests['IO']['ALL'] == 'Pass' && $dup_tests['SRV']['ALL'] == 'Pass' && $dup_tests['RES']['INSTALL'] == 'Pass'; return $dup_tests; } /** * Gets the system checks which are not required * @return array An array of system checks */ public static function getChecks($package) { $global = DUP_PRO_Global_Entity::get_instance(); $checks = array(); //----------------------------- //PHP SETTINGS $php_test0 = false; foreach ($GLOBALS['DUPLICATOR_PRO_SERVER_LIST'] as $value) { if (stristr($_SERVER['SERVER_SOFTWARE'], $value)) { $php_test0 = true; break; } } $php_test1 = ini_get("open_basedir"); $php_test1 = empty($php_test1) ? true : false; $php_test2 = ini_get("max_execution_time"); $php_test2 = ($php_test2 > DUPLICATOR_PRO_SCAN_TIMEOUT) || (strcmp($php_test2, 'Off') == 0 || $php_test2 == 0) ? true : false; $php_test3 = true; if ($package->contains_storage_type(DUP_PRO_Storage_Types::Dropbox)) { $php_test3 = function_exists('openssl_csr_new'); } $php_test4 = function_exists('mysqli_connect'); $php_test5 = self::isURLFopenEnabled(); $php_test6 = self::isCurlEnabled(); $php_test7 = DUP_PRO_U::PHP53() ? true : false; $checks['SRV']['Brand'] = DUP_PRO_Package::is_active_brand_prepared(); $checks['SRV']['HOST'] = DUP_PRO_Custom_Host_Manager::getInstance()->getActiveHostings(); $checks['SRV']['PHP']['websrv'] = $php_test0; $checks['SRV']['PHP']['openbase'] = $php_test1; $checks['SRV']['PHP']['maxtime'] = $php_test2; $checks['SRV']['PHP']['openssl'] = $php_test3; $checks['SRV']['PHP']['mysqli'] = $php_test4; $checks['SRV']['PHP']['allowurlfopen'] = $php_test5; $checks['SRV']['PHP']['curlavailable'] = $php_test6; $checks['SRV']['PHP']['version'] = $php_test7; if ($package->contains_storage_type(DUP_PRO_Storage_Types::Dropbox)) { $dropbox_transfer_test = true; if ($global->dropbox_transfer_mode == DUP_PRO_Dropbox_Transfer_Mode::cURL) { $dropbox_transfer_test = $php_test6; } else if ($global->dropbox_transfer_mode == DUP_PRO_Dropbox_Transfer_Mode::FOpen_URL) { $dropbox_transfer_test = $php_test5; } $checks['SRV']['PHP']['ALL'] = ($php_test0 && $php_test1 && $php_test2 && $php_test3 && $php_test4 && $php_test7 && $dropbox_transfer_test && $checks['SRV']['Brand']['LogoImageExists']) ? 'Good' : 'Warn'; } else { $checks['SRV']['PHP']['ALL'] = ($php_test0 && $php_test1 && $php_test2 && $php_test4 && $php_test7 && $checks['SRV']['Brand']['LogoImageExists']) ? 'Good' : 'Warn'; } //----------------------------- //WORDPRESS SETTINGS global $wp_version; $wp_test1 = version_compare($wp_version, DUPLICATOR_PRO_SCAN_MIN_WP) >= 0 ? true : false; //Core Files $files = array(); $home_path = duplicator_pro_get_home_path(); /** searching wp-config in working word press is not worthy * if this script is executing that means wp-config.php exists :) * we need to know the core folders and files added by the user at this point * retaining old logic as else for the case if its used some where else */ $files['wp-config.php'] = file_exists(DupProSnapLibIOU::safePath($home_path . '/wp-config.php')); //Core dir and files logic if (isset($_POST['file_notice']) && isset($_POST['dir_notice'])) { //means if there are core directories excluded or core files excluded return false if ((bool) $_POST['file_notice'] || (bool) $_POST['dir_notice']) $wp_test2 = false; else $wp_test2 = true; } else { $wp_test2 = $files['wp-config.php']; } $license = DUP_PRO_License_U::getLicenseType(); //$Package = ($package == null) ? DUP_PRO_Package::get_temporary_package() : $package; $Package = $package; // $package can not be null! /* $cache_path = DupProSnapLibIOU::safePath(WP_CONTENT_DIR) . '/cache'; $dirEmpty = DUP_PRO_IO::isDirEmpty($cache_path); $dirSize = DUP_PRO_IO::getDirSize($cache_path); $cach_filtered = in_array($cache_path, explode(';', $Package->Archive->FilterDirs)); $wp_test3 = ($cach_filtered || $dirEmpty || $dirSize < DUPLICATOR_PRO_SCAN_CACHESIZE ) ? true : false; */ $wp_test4 = is_multisite(); $wp_test5 = ($license == DUP_PRO_License_Type::BusinessGold); $checks['SRV']['WP']['version'] = $wp_test1; $checks['SRV']['WP']['core'] = $wp_test2; // $checks['SRV']['WP']['cache'] = $wp_test3; $checks['SRV']['WP']['ismu'] = $wp_test4; $checks['SRV']['WP']['ismuplus'] = $wp_test5; if ($wp_test4) { // $checks['SRV']['WP']['ALL'] = ($wp_test1 && $wp_test2 && $wp_test3 && $wp_test5) ? 'Good' : 'Warn'; $checks['SRV']['WP']['ALL'] = ($wp_test1 && $wp_test2 && $wp_test5) ? 'Good' : 'Warn'; } else { // $checks['SRV']['WP']['ALL'] = ($wp_test1 && $wp_test2 && $wp_test3) ? 'Good' : 'Warn'; $checks['SRV']['WP']['ALL'] = ($wp_test1 && $wp_test2) ? 'Good' : 'Warn'; } return $checks; } /** * Check to see if duplicator installation files are present * @return bool True if any installation files are found */ public static function hasInstallFiles() { $global = DUP_PRO_Global_Entity::get_instance(); $files = self::getInstallerFiles(); foreach ($files as $file => $path) { if (false !== stripos($file, '[hash]')) { $glob_files = glob($path); if (!empty($glob_files)) { return true; } } elseif (file_exists($path)) return true; } return false; } /** * Returns an array with stats about the orphaned files * @return array The full path of the orphaned file */ public static function getOrphanedPackageFiles() { /* @var $global DUP_PRO_Global_Entity */ $global = DUP_PRO_Global_Entity::get_instance(); $filepaths = array(); $orphans = array(); $endPackagesFile = array( 'archive.daf', 'archive.zip', 'database.sql', 'dirs.txt', 'files.txt', 'log.txt', 'scan.json' ); $endPackagesFile[] = $global->installer_base_name; for ($i = 0; $i < count($endPackagesFile); $i++) { $endPackagesFile[$i] = preg_quote($endPackagesFile[$i], '/'); } $regexMatch = '/('.implode('|', $endPackagesFile).')$/'; $numPackages = DUP_PRO_Package::count_by_status(); $numPerPage = 100; $pages = floor($numPackages / $numPerPage) + 1; $skipStart = array( 'dup_pro' ); for ($page = 0; $page < $pages; $page ++) { $offset = $page * $numPerPage; $pagePackages = DUP_PRO_Package::get_row_by_status(array(), $numPerPage, $offset); foreach ($pagePackages as $cPack) { $skipStart[] = $cPack->name.'_'.$cPack->hash; } } $pagePackages = null; $fileTimeSkipInSec = (max(DUP_PRO_Constants::DEFAULT_MAX_PACKAGE_RUNTIME_IN_MIN , $global->max_package_runtime_in_min) + DUP_PRO_Constants::ORPAHN_CLEANUP_DELAY_MAX_PACKAGE_RUNTIME) * 60; if (file_exists(DUPLICATOR_PRO_SSDIR_PATH) && ($handle = opendir(DUPLICATOR_PRO_SSDIR_PATH)) !== false) { while (false !== ($fileName = readdir($handle))) { if ($fileName == '.' && $fileName == '..') { continue; } $fileFullPath = DUPLICATOR_PRO_SSDIR_PATH.'/'.$fileName; if (is_dir($fileFullPath)) { continue; } if (time() - filemtime($fileFullPath) < $fileTimeSkipInSec) { // file younger than 2 hours skip for security continue; } if (!preg_match($regexMatch, $fileName)) { continue; } foreach ($skipStart as $skip) { if (strpos($fileName, $skip) === 0) { continue 2; } } $orphans[] = $fileFullPath; } closedir($handle); } return $orphans; } /** * Returns an array with stats about the orphaned files * @return array The total count and file size of orphaned files */ public static function getOrphanedPackageInfo() { $files = self::getOrphanedPackageFiles(); $info = array(); $info['size'] = 0; $info['count'] = 0; if (count($files)) { foreach ($files as $path) { $get_size = @filesize($path); if ($get_size > 0) { $info['size'] += $get_size; $info['count'] ++; } } } return $info; } /** * Gets a list of all the installer files and directory by name and full path * * @remarks * FILES: installer.php, installer-backup.php, dup-installer-bootlog__[HASH].txt * DIRS: dup-installer * DEV FILES: wp-config.orig * Last set is for lazy developer cleanup files that a developer may have * accidently left around lets be proactive for the user just in case. * * @return array [file_name, file_path] */ public static function getInstallerFiles() { $global = DUP_PRO_Global_Entity::get_instance(); if ($global == null) { $installer_base_name = 'installer.php'; $installer_backup_filename = 'installer-backup.php'; } else { // RSR: This a hack fix since installer_base_name is getting cleared out for unknown reasons on some boxes after install if (($global->installer_base_name === null) || trim($global->installer_base_name) == '') { $global->installer_base_name = 'installer.php'; $global->save(); } $installer_base_name = $global->installer_base_name; $installer_backup_filename = $global->get_installer_backup_filename(); } $home_path = duplicator_pro_get_home_path(); return array( DUPLICATOR_PRO_INSTALL_PHP => $home_path . '/' . $installer_base_name, $installer_backup_filename => $home_path . '/' . $installer_backup_filename, basename(DUPLICATOR_PRO_ENHANCED_INSTALLER_DIRECTORY) . ' ' . DUP_PRO_U::__('(directory)') => DUPLICATOR_PRO_ENHANCED_INSTALLER_DIRECTORY, DUPLICATOR_PRO_IMPORT_INSTALLER_NAME => DUPLICATOR_PRO_IMPORT_INSTALLER_FILEPATH, 'dup-wp-config-arc__[HASH].txt' => $home_path . '/dup-wp-config-arc__*.txt', 'wp-config.duporig' => $home_path . '/wp-config.duporig', DUPLICATOR_PRO_ORIG_FOLDER_PREFIX . '[HASH]' . DUP_PRO_U::__('(directory)') => $home_path . '/' . DUPLICATOR_PRO_ORIG_FOLDER_PREFIX . DUPLICATOR_PRO_INSTALLER_HASH_PATTERN, 'dup-installer-data__[HASH].sql' => $home_path . '/dup-installer-data__'.DUPLICATOR_PRO_INSTALLER_HASH_PATTERN.'.sql', 'dup-database__[HASH].sql' => $home_path . '/dup-database__'.DUPLICATOR_PRO_INSTALLER_HASH_PATTERN.'.sql', 'dup-installer-log_[HASH].txt' => $home_path . '/dup-installer-log__'.DUPLICATOR_PRO_INSTALLER_HASH_PATTERN.'.txt', 'dup-installer-bootlog__[HASH].txt' => $home_path . '/' . 'dup-installer-bootlog__'.DUPLICATOR_PRO_INSTALLER_HASH_PATTERN.'.txt', 'duplicator_pro_params_overwrite.php'=> $home_path . '/duplicator_pro_params_overwrite.php', ); } /** * Get the IP of a client machine * @return string IP of the client machine */ public static function getClientIP() { if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) { return $_SERVER["HTTP_X_FORWARDED_FOR"]; } else if (array_key_exists('REMOTE_ADDR', $_SERVER)) { return $_SERVER["REMOTE_ADDR"]; } else if (array_key_exists('HTTP_CLIENT_IP', $_SERVER)) { return $_SERVER["HTTP_CLIENT_IP"]; } return ''; } /** * Get PHP memory usage * @return string Returns human readable memory usage. */ public static function getPHPMemory($peak = false) { if ($peak) { $result = 'Unable to read PHP peak memory usage'; if (function_exists('memory_get_peak_usage')) { $result = DUP_PRO_U::byteSize(memory_get_peak_usage(true)); } } else { $result = 'Unable to read PHP memory usage'; if (function_exists('memory_get_usage')) { $result = DUP_PRO_U::byteSize(memory_get_usage(true)); } } return $result; } /** * Gets the name of the owner of the current PHP script * * @return string The name of the owner of the current PHP script */ public static function getCurrentUser() { $unreadable = 'Undetectable'; if (function_exists('get_current_user') && is_callable('get_current_user')) { $user = get_current_user(); return strlen($user) ? $user : $unreadable; } return $unreadable; } }