The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Ограничение PHP по памяти. "
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"Ограничение PHP по памяти. "  
Сообщение от lion (??) on 29-Авг-06, 11:26 
Пытаюсь наложить ограничения по памяти на пользовательские php-скрипты.
FreeBSD6.1 Apache2+PHP4+fastcgi+suexec.
В login.conf завёл новый класс pupkiny со следующими ограничениям:
pupkiny:\
        :passwd_format=blf:\
        :path=/bin /usr/bin /usr/local/bin:\
        :cputime-max=1h30m:\
        :datasize-max=8m:\
        :stacksize-max=2m:\
        :memorylocked-max=4m:\
        :memoryuse-max=10m:\
        :filesize-max=8m:\
        :coredumpsize=0:\
        :openfiles-max=24:\
        :maxproc-max=24:\
        :vmemoryuse-max=10m:\
        :priority=0:\
        :requirehome:\
        :nocheckmail=true:\
        :ignoretime=false:\
        :umask=027:
Присвоил пользователю pupkin этот класс.
Теперь, если пользователь pupkin напишет такой скрипт и запустит его на сервере, то получит облом, т.к. употребил всю доступную ему память.
Скрипт:
<?
set_time_limit(0);
for ($a=0; $a<3000000; $a++) {
        if (!$flag) {
        $tmp_arr[$a]='1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890';
                     }
        if (!($a%100)) {
                $tmp=memory_get_usage();
                echo($tmp.'<br>');
        }
        if ($tmp>400000000) {
                $flag=1; $a=$a-1;
                //unset($tmp_arr);unset($a);
                };
}
?>

Вроде бы всё работает правильно, но стоит добавить в начало этого скрипта
строчку

ini_set('memory_limit','2048M');

и пользователь спокойно забирает всю память+своп.
Есть одно решение:
в php.ini записать disable_functions = ini_set
но оно не очень хорошее, т.к. с помощью ini_set можно установить кучу полезных настроек, не теребя админа и перестаёт работать phpMyAdmin и  куча других прог.

Как в таком случае ограничить пользовательские скрипты?

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Ограничение PHP по памяти. "  
Сообщение от pidorasi (ok) on 29-Авг-06, 12:05 
# cat php.ini |grep lim
memory_limit = 8M      ; Maximum amount of memory a script may consume (8MB)

>Пытаюсь наложить ограничения по памяти на пользовательские php-скрипты.
>FreeBSD6.1 Apache2+PHP4+fastcgi+suexec.
>В login.conf завёл новый класс pupkiny со следующими ограничениям:
>pupkiny:\
>        :passwd_format=blf:\
>        :path=/bin /usr/bin /usr/local/bin:\
>        :cputime-max=1h30m:\
>        :datasize-max=8m:\
>        :stacksize-max=2m:\
>        :memorylocked-max=4m:\
>        :memoryuse-max=10m:\
>        :filesize-max=8m:\
>        :coredumpsize=0:\
>        :openfiles-max=24:\
>        :maxproc-max=24:\
>        :vmemoryuse-max=10m:\
>        :priority=0:\
>        :requirehome:\
>        :nocheckmail=true:\
>        :ignoretime=false:\
>        :umask=027:
>Присвоил пользователю pupkin этот класс.
>Теперь, если пользователь pupkin напишет такой скрипт и запустит его на сервере,
>то получит облом, т.к. употребил всю доступную ему память.
>Скрипт:
><?
>set_time_limit(0);
>for ($a=0; $a<3000000; $a++) {
>        if (!$flag) {
>        $tmp_arr[$a]='1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890';
>            
>         }
>        if (!($a%100)) {
>            
>    $tmp=memory_get_usage();
>                echo($tmp.'<br>');
>        }
>        if ($tmp>400000000) {
>            
>    $flag=1; $a=$a-1;
>            
>    //unset($tmp_arr);unset($a);
>            
>    };
>}
>?>
>
>Вроде бы всё работает правильно, но стоит добавить в начало этого скрипта
>
>строчку
>
>ini_set('memory_limit','2048M');
>
>и пользователь спокойно забирает всю память+своп.
>Есть одно решение:
>в php.ini записать disable_functions = ini_set
> но оно не очень хорошее, т.к. с помощью ini_set можно установить
>кучу полезных настроек, не теребя админа и перестаёт работать phpMyAdmin и
> куча других прог.
>
>Как в таком случае ограничить пользовательские скрипты?


Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "Ограничение PHP по памяти. "  
Сообщение от lion (??) on 29-Авг-06, 12:25 
># cat php.ini |grep lim
>memory_limit = 8M      ; Maximum amount of
>memory a script may consume (8MB)
:)Конечно это не работает. Функция ini_set как раз и переопределяет то, что вы задали в php.ini Почитайте описание функции ini_set. http://www.php.slaed.net/f/ini-set.html
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру