You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
160 lines
4.2 KiB
160 lines
4.2 KiB
<?php
|
|
|
|
defined("DUPXABSPATH") or die("");
|
|
|
|
use Duplicator\Installer\Core\Params\PrmMng;
|
|
use Duplicator\Libs\Snap\SnapIO;
|
|
use Duplicator\Libs\Snap\SnapWP;
|
|
|
|
/**
|
|
* DUPX_cPanel
|
|
* Wrapper Class for cPanel API */
|
|
class DUPX_Server
|
|
{
|
|
/**
|
|
* A list of the core WordPress directories
|
|
*/
|
|
public static $wpCoreDirsList = array(
|
|
'wp-admin',
|
|
'wp-includes'
|
|
);
|
|
|
|
public static function phpSafeModeOn()
|
|
{
|
|
if (version_compare(PHP_VERSION, '5.4.0', '>=')) {
|
|
// safe_mode has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 5.4.0.
|
|
return false;
|
|
} else {
|
|
return filter_var(
|
|
ini_get('safe_mode'),
|
|
FILTER_VALIDATE_BOOLEAN,
|
|
array(
|
|
'options' => array(
|
|
'default' => false
|
|
)
|
|
)
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Check given path prefixed with path array
|
|
*
|
|
* @param string $checkPath Path to check
|
|
* @param array $pathsArr check against
|
|
*
|
|
* @return boolean
|
|
*/
|
|
private static function isPathPrefixedWithArrayPath($checkPath, $pathsArr)
|
|
{
|
|
foreach ($pathsArr as $path) {
|
|
if (0 === strpos($checkPath, $path)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Can this server process in shell_exec mode
|
|
*
|
|
* @return bool
|
|
*/
|
|
public static function is_shell_exec_available()
|
|
{
|
|
if (array_intersect(array('shell_exec', 'escapeshellarg', 'escapeshellcmd', 'extension_loaded'), array_map('trim', explode(',', @ini_get('disable_functions'))))) {
|
|
return false;
|
|
}
|
|
|
|
//Suhosin: http://www.hardened-php.net/suhosin/
|
|
//Will cause PHP to silently fail.
|
|
if (extension_loaded('suhosin')) {
|
|
return false;
|
|
}
|
|
|
|
if (! function_exists('shell_exec')) {
|
|
return false;
|
|
}
|
|
|
|
// Can we issue a simple echo command?
|
|
if (!@shell_exec('echo duplicator')) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Returns the path this this server where the zip command can be called
|
|
*
|
|
* @return null|string // null if can't find unzip
|
|
*/
|
|
public static function get_unzip_filepath()
|
|
{
|
|
$filepath = null;
|
|
if (self::is_shell_exec_available()) {
|
|
if (shell_exec('hash unzip 2>&1') == null) {
|
|
$filepath = 'unzip';
|
|
} else {
|
|
$possible_paths = array('/usr/bin/unzip', '/opt/local/bin/unzip');
|
|
foreach ($possible_paths as $path) {
|
|
if (file_exists($path)) {
|
|
$filepath = $path;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return $filepath;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @return string[]
|
|
*/
|
|
public static function getWpAddonsSiteLists()
|
|
{
|
|
$addonsSites = array();
|
|
$pathsToCheck = DUPX_ArchiveConfig::getInstance()->getPathsMapping();
|
|
|
|
if (is_scalar($pathsToCheck)) {
|
|
$pathsToCheck = array($pathsToCheck);
|
|
}
|
|
|
|
foreach ($pathsToCheck as $mainPath) {
|
|
SnapIO::regexGlobCallback($mainPath, function ($path) use (&$addonsSites) {
|
|
if (SnapWP::isWpHomeFolder($path)) {
|
|
$addonsSites[] = $path;
|
|
}
|
|
}, array(
|
|
'regexFile' => false,
|
|
'recursive' => true
|
|
));
|
|
}
|
|
|
|
return $addonsSites;
|
|
}
|
|
|
|
/**
|
|
* Does the site look to be a WordPress site
|
|
*
|
|
* @return bool Returns true if the site looks like a WP site
|
|
*/
|
|
public static function isWordPress()
|
|
{
|
|
$absPathNew = PrmMng::getInstance()->getValue(PrmMng::PARAM_PATH_WP_CORE_NEW);
|
|
if (!is_dir($absPathNew)) {
|
|
return false;
|
|
}
|
|
if (($root_files = scandir($absPathNew)) == false) {
|
|
return false;
|
|
}
|
|
$file_count = 0;
|
|
foreach ($root_files as $file) {
|
|
if (in_array($file, self::$wpCoreDirsList)) {
|
|
$file_count++;
|
|
}
|
|
}
|
|
return (count(self::$wpCoreDirsList) == $file_count);
|
|
}
|
|
}
|
|
|