我正在使用带有hmvc库的codeigniter框架开发一个php应用程序,应用程序将有模块,我希望每个模块都有不同的内存限制。这可能吗?
答案 0 :(得分:2)
您可以使用内存限制配置向每个模块的根添加.htaccess
:
<IfModule mod_php5.c>
php_value memory_limit 32M
</IfModule>
要动态更新文件,您需要考虑.htaccess
是一个危险的事情。
我会非常努力地确保没有办法允许用户输入(即使是你的,因为如果你能做到,其他人也可以这样做)就可以写入.htaccess
文件。
那说,伪代码示例(告诫者):
private function _set_mem_limit($limit = 0, $module = '')
{
//modules
$available_modules = array(
'module1' => '/var/www/myApp/modules/module1/',
'module2' => '/var/www/myApp/modules/module2/',
);
//limits
$available_limits = array(
'32' => '32M',
'64' => '64M',
'128' => '128M',
'256' => '256M',
'512' => '512M'
);
$string = 'php_value memory_limit ';
// make sure limit is an integer and it is in the available_limits array
// if so, set string with the selected limit from array. otherwise, exit
if(gettype($limit) === 'integer' and in_array($limit, $available_limits))
{
$string .= $available_limits[$limit];
}
else
{
die('Problem setting mem limit.');
}
// make sure incoming module variable is only alphanumeric and exists in
// available_modules array. if so, write the limit to the file. otherwise, exit
if(ctype_alpha($module) and in_array($module, $available_modules))
{
$path = $available_modules[$module].'.htaccess';
$f = fopen($path, 'w');
fwrite($f, $string);
fclose($f);
}
else
{
die('Problem setting path for mem limit.');
}
}
尽管这可行,但我不相信。