1

我正在使用带有 hmvc 库的 codeigniter 框架开发一个 php 应用程序,该应用程序将有模块,我希望每个模块有不同的内存限制。这可能吗?

4

1 回答 1

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.');
    }
}

尽管这可能有效,但我不会相信它。

于 2013-11-13T15:23:57.800 回答