forked from extern/egroupware
* PHP: automatic set size shared memory available to PHP APC(u) extension to 128MB, if installed and less then 64MB
This commit is contained in:
parent
418dc8c45b
commit
e68c0857de
@ -258,6 +258,9 @@ foreach(array('php','source_dir','data_dir','setup-cli') as $name)
|
|||||||
if (!file_exists($config[$name])) bail_out(1,$config[$name].' not found!');
|
if (!file_exists($config[$name])) bail_out(1,$config[$name].' not found!');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// fix important php.ini and conf.d/*.ini settings
|
||||||
|
check_fix_php_apc_ini();
|
||||||
|
|
||||||
// install/upgrade required pear packages
|
// install/upgrade required pear packages
|
||||||
check_install_pear_packages();
|
check_install_pear_packages();
|
||||||
|
|
||||||
@ -834,3 +837,66 @@ function _ucr_secret($name)
|
|||||||
}
|
}
|
||||||
return trim(file_get_contents($filename));
|
return trim(file_get_contents($filename));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check and evtl. fix APC(u) shared memory size (apc.shm_segments * apc.shm_size) >= 64M
|
||||||
|
*
|
||||||
|
* We check for < 64M to allow to use that for small installs manually, but set 128M by default.
|
||||||
|
*/
|
||||||
|
function check_fix_php_apc_ini()
|
||||||
|
{
|
||||||
|
if (extension_loaded('apc'))
|
||||||
|
{
|
||||||
|
$shm_size = ini_get('apc.shm_size');
|
||||||
|
$shm_segments = ini_get('apc.shm_segments');
|
||||||
|
// ancent APC (3.1.3) in Debian 6/Squezze has size in MB without a unit
|
||||||
|
if (($numeric_size = is_numeric($shm_size) && $shm_size <= 1048576)) $shm_size .= 'M';
|
||||||
|
|
||||||
|
$size = _size_with_unit($shm_size) * $shm_segments;
|
||||||
|
//echo "shm_size=$shm_size, shm_segments=$shm_segments --> $size, numeric_size=$numeric_size\n";
|
||||||
|
|
||||||
|
// check if we have less then 64MB (eg. default 32M) --> set it to 128MB
|
||||||
|
if ($size < _size_with_unit('64M'))
|
||||||
|
{
|
||||||
|
ob_start();
|
||||||
|
phpinfo();
|
||||||
|
$phpinfo = ob_get_clean();
|
||||||
|
$matches = null;
|
||||||
|
if (preg_match('#(/[a-z0-5./]+apcu?.ini)(,| |$)#mi', $phpinfo, $matches) &&
|
||||||
|
file_exists($path = $matches[1]) && ($apc_ini = file_get_contents($path)))
|
||||||
|
{
|
||||||
|
$new_shm_size = 128 / $shm_segments;
|
||||||
|
$new_shm_size .= 'M';
|
||||||
|
if ($numeric_size) $new_shm_size = _size_with_unit ($new_shm_size);
|
||||||
|
if (preg_match('|^apc.shm_size\s*=\s*(\d+[KMG]?)$|m', $apc_ini))
|
||||||
|
{
|
||||||
|
file_put_contents($path, preg_replace('|^apc.shm_size\s*=\s*(\d+[KMG]?)$|m', 'apc.shm_size='.$new_shm_size, $apc_ini));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
file_put_contents($path, $apc_ini."\napc.shm_size=$new_shm_size\n");
|
||||||
|
}
|
||||||
|
echo "Fix APC(u) configuration, set apc.shm_size=$new_shm_size in $path\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert a size with unit eg. 32M to a number
|
||||||
|
* @param int $size
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
function _size_with_unit($size)
|
||||||
|
{
|
||||||
|
switch(strtoupper(substr($size, -1)))
|
||||||
|
{
|
||||||
|
case 'G':
|
||||||
|
$size *= 1024;
|
||||||
|
case 'M':
|
||||||
|
$size *= 1024;
|
||||||
|
case 'K':
|
||||||
|
$size *= 1024;
|
||||||
|
}
|
||||||
|
return $size;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user