user['name'], $dout, $dret);
if(preg_match('/'.$softpanel->user['name'].'/is', implode('', $dout))){
return true;
}*/
// Lets check if CageFS is enabled for this user
@exec("/usr/bin/selectorctl --user-current --user=".(($globals['softpanel'] == 'plesk') ? $softpanel->user['login_name'] : $softpanel->user['name'])." 2>&1", $cout, $cret);
if(preg_match('/ERROR/is', implode('', $cout))){
return true;
}
// selectorctl does not work in CageFS for PHP interpreter
if(preg_match('/selectorctl does not work/is', implode('', $cout))){
return true;
}
// If it is native than we will find the verison using sphpversion()
if(preg_match('/native/is', implode('', $cout))){
$native = sphpversion();
}
// Get the list of Default enabled extensions
$curr_version = str_replace('.', '', substr($cout[0],0,3)); //current php version
$cagefs_phpbin = '/opt/alt/php'.$curr_version.'/usr/bin/php';
if(!empty($native)){
//Cannot define here as defining at the end fails if user attempts to change the PHP version via checkbox
//define(eu_php_bin, 'php');
$cagefs_phpbin = '/usr/bin/php';
}
// What is the user's PHP version ?
@exec("/usr/bin/selectorctl --user-current --user=".(($globals['softpanel'] == 'plesk') ? $softpanel->user['login_name'] : $softpanel->user['name'])." | awk '{print $2}'", $out, $ret);
if(!empty($native)){
$tmp_out = $native;
}else{
$tmp_out = current($out);
}
(!empty($tmp_out) ? $php_version = $tmp_out : '');
//List of installed PHP versions in cageFS
exec("/usr/bin/selectorctl --list | awk '{print $2}'", $php_installed_vers, $pvret);
sort($php_installed_vers);
if(!empty($scripts[$soft]['php_min'])){
// Is it lower than the required version ?
if(sversion_compare($tmp_out, $scripts[$soft]['php_min'], '<')){
foreach($php_installed_vers as $ver){
if(sversion_compare($ver, $scripts[$soft]['php_min'], '>=')){
// Ask for a confirmation
if(!checkbox('php_version_select')){
$error[] = 'PHP version is less than the required '.$scripts[$soft]['php_min'].'
Do you wish to enable PHP '.$ver.' ? (Might cause issues with your existing installations).';
// Lets enable the version for the user
}else{
$pid = strval(posix_getpid());
@exec("/usr/bin/selectorctl --set-user-current=".substr($ver, 0, 3)." --user=".(($globals['softpanel'] == 'plesk') ? $softpanel->user['login_name'] : $softpanel->user['name'])." --exclude-pid-list=".$pid , $sout, $sret);
@exec("/usr/bin/selectorctl --user-current --user=".(($globals['softpanel'] == 'plesk') ? $softpanel->user['login_name'] : $softpanel->user['name'])." | awk '{print $2}'", $nout, $nret);
$php_version = current($nout);
$opt_version = str_replace('.', '', substr($php_version,0,3));
$cagefs_phpbin = '/opt/alt/php'.$opt_version.'/usr/bin/php';
}
break;
}
}
}
}
rsort($php_installed_vers);
if(!empty($scripts[$soft]['php_max'])){
// Is it lower than the required version ?
if(sversion_compare($tmp_out, $scripts[$soft]['php_max'], '>')){
foreach($php_installed_vers as $ver){
if(sversion_compare($ver, $scripts[$soft]['php_max'], '<')){
// Ask for a confirmation
if(!checkbox('php_max_version_select')){
$error[] = 'This script is not compatible with PHP version : '.$scripts[$soft]['php_max'].'+
Do you wish to enable PHP '.$ver.' ? (Might cause issues with your existing installations).';
// Lets enable the version for the user
}else{
$pid = strval(posix_getpid());
@exec("/usr/bin/selectorctl --set-user-current=".substr($ver, 0, 3)." --user=".(($globals['softpanel'] == 'plesk') ? $softpanel->user['login_name'] : $softpanel->user['name'])." --exclude-pid-list=".$pid , $sout, $sret);
@exec("/usr/bin/selectorctl --user-current --user=".(($globals['softpanel'] == 'plesk') ? $softpanel->user['login_name'] : $softpanel->user['name'])." | awk '{print $2}'", $nout, $nret);
$php_version = current($nout);
$opt_version = str_replace('.', '', substr($php_version,0,3));
$cagefs_phpbin = '/opt/alt/php'.$opt_version.'/usr/bin/php';
}
break;
}
}
}
}
// Get the list of enabled extensions for this user
$command = '/usr/bin/selectorctl --list-user-extensions --user='.(($globals['softpanel'] == 'plesk') ? $softpanel->user['login_name'] : $softpanel->user['name']);
@exec($command, $extout, $extret);
if(!empty($extout) && is_array($extout)){
if(in_array('nd_mysqli', $extout)){
$__hooks['loaded_extension'][] = 'mysqli';
}
if(in_array('nd_mysql', $extout)){
$__hooks['loaded_extension'][] = 'mysql';
}
//added check for nd_pdo_mysql extension so that script that requires pdo_mysql extension enabled will find it as enabled
if(in_array('nd_pdo_mysql', $extout)){
$__hooks['loaded_extension'][] = 'pdo_mysql';
}
if(!empty($__hooks['loaded_extension']) && is_array($__hooks['loaded_extension'])){
$__hooks['loaded_extension'] = array_merge($__hooks['loaded_extension'], $extout);
}else{
$__hooks['loaded_extension'] = $extout;
}
}
// Get the list of compiled extensions in the selected PHP binary
@exec($cagefs_phpbin.' -n -m', $extout1, $extret1);
if(!empty($extout1) && is_array($extout1)){
if(!empty($__hooks['loaded_extension']) && is_array($__hooks['loaded_extension'])){
$__hooks['loaded_extension'] = array_merge($__hooks['loaded_extension'], $extout1);
}else{
$__hooks['loaded_extension'] = $extout1;
}
}
// these extensions are returned by php and we need to convert it to CageFS format
foreach($__hooks['loaded_extension'] as $ke => $ve){
$__hooks['loaded_extension'][$ke] = strtolower(str_replace(' ', '_', $ve));
}
// This indicates that the PHP extensions list loaded in $__hooks is exhaustive list
//If cageFS has native php installed, the loaded extensions return empty value
if(!empty($__hooks['loaded_extension']) && empty($native)){
define('PHP_EXT_EXHAUSTIVE', 1);
}
}
if(!empty($php_version)) define('php_version', $php_version);
if(!empty($cagefs_phpbin)) define('eu_php_bin', $cagefs_phpbin);
}