Страница 3 из 5

Re: free cp 4 web

Добавлено: 2008-09-01 23:41:26
zingel
на GTK.....

/me - почувствовал рядом линукз

Re: free cp 4 web

Добавлено: 2008-09-01 23:43:05
ProFTP
почему именно линукс?

http://gtk2-perl.sourceforge.net/doc/intro/

Re: free cp 4 web

Добавлено: 2008-09-01 23:52:10
zingel
я не говорил, что GTK = linux, не надо =)

P.s. кодить можно на том, что нравится

Re: free cp 4 web

Добавлено: 2008-09-01 23:55:52
ProFTP
я тоже не говорил что linux - это кодить :-D :drinks:

Re: free cp 4 web

Добавлено: 2008-09-02 8:09:23
zg
ProFTP писал(а):openldap?

кстате, может пойти другим путем, написать на GTK2+ клиент-сервер... :evil:
ldap пока не надо трогать, всё должно быть завязано на конфигах и базе данных, чем больше связок, тем нестабильней система. GTK лесом, вебморды за глаза хватит.

Re: free cp 4 web

Добавлено: 2008-09-03 13:04:06
paix
zg писал(а):собственно как я вижу эту панель: логинишься, попадаешь в панель управления, там есть список клиентов, за каждым клиентов закреплены домены. На домен вешается хостинг, фтп и почта. Так же идёт автоподдержка ДНС домена первичная или вторичная. Собстевнно и хостинг и почта должны быть в рамках домена. То есть будет кнопочка "добавить домен", нажав на которую создастся виртуал хост с поддержкой домена, а на него уже будет идти почта и фтп. Этого функционала хватит за глаза на первое время, всё остальное через правку конфигов. Остальные сервисы, типа PMA. клуглого куба и даже постфиксадмина, должны ставиться уже после установки основного пакета, то есть идти просто дополнениями.

Я скоро займусь веб-мордой всего этого дела, думаю и екзим туда же прикручу со временем, чтоб от постфиксадмина не зависеть.
охота вам геморой на свою Ж ;)
syscp это уже давно все умеет, и еще кучу всего, необходимость которого вы еще не осознали ;)

разве что изобрести еще один кастыль для получения опыта....

ЗЫ. по поводу пакетов не вчитался. Но с пакетами, я полагал, ситуация очевидна! Под релизы закреплены версии софта, под стейбл - нет. Но как правило пакеты со стейбла успешно ставятся и на ближайший релиз.

Re: free cp 4 web

Добавлено: 2008-09-03 15:24:46
zg
paix писал(а):охота вам геморой на свою Ж
гм.. странный вопрос, гемморой уже есть, плеск называется :-D
paix писал(а):syscp это уже давно все умеет, и еще кучу всего, необходимость которого вы еще не осознали
несомненно, я даже не буду спорить :smile: проект, который тут пока планируется, всего лишь альтернатива. Да и квалификацию тоже надо повышать.
paix писал(а):разве что изобрести еще один кастыль для получения опыта....
ага :smile: лично я ещё не выпустил ни одного готового продукта, хотя разработал не одну систему.

Re: free cp 4 web

Добавлено: 2008-09-05 3:14:34
ProFTP
управление jail'ами?

Re: free cp 4 web

Добавлено: 2008-09-05 6:20:34
zg
ProFTP писал(а):управление jail'ами?
погоди пока

Re: free cp 4 web

Добавлено: 2008-09-05 8:08:57
ProFTP
а для хостинга может мало потребности просто будет... то есть чтобы не повторять всё за плеск...

потому что VDS дешевеет, за 30$ в месяц можно найти, и прямо там станет сайтов штук 50 маленьких...

Re: free cp 4 web

Добавлено: 2008-09-06 18:24:25
ProFTP
1)а как быть с файлми конфигурации от какого пользователя читать/записывать файлы конфигов apache22, это в jail держать apache надо?

2) я так понял что держать конфиги в SQLite/MySQL не реализуемо, потому что нигде этого нету, почему-то...

Re: free cp 4 web

Добавлено: 2008-09-07 8:38:08
zg
держать конфиги апача в базе нецелесообразно не стоит - появляется лишняя ненужная зависимость от MySQL, тем более, что данные хранятся в неструктурированном виде, просто как текстовые файлы, смысла нет.

Re: free cp 4 web

Добавлено: 2008-09-07 18:38:46
ProFTP
есть такое как SQLite и BerkleyDB

кстате, на апаче это не реализуемо если полноценно все директивы ставить в таблицу, нужно все модули переписывать, и половину самого апача..

на других ве серверах это есть всё...

Re: free cp 4 web

Добавлено: 2008-09-13 11:24:04
ProFTP
хочеться спросить про то большая ли разница испольховать apache13 или apache22??

просто есть пару модов для apache13 которые позваоляют вставлять в MySQL или SQLite таблицу много директив


вот например единственный модуль mod_vhost_dbi для apache20-22 поддреживает только некоторые директивы, всего 3 или 4, автор модуля написал что для того чтобы добавить все директивы, то надо половину апача переписывать и все его моды... :fool:

все таки очень хорошо было бы если через DB

Re: free cp 4 web

Добавлено: 2008-09-13 13:38:25
zg
работает?

Re: free cp 4 web

Добавлено: 2008-09-13 13:45:56
ProFTP
что именно? :Search:

вы про апачъ?

вот тут многе директивы http://www.lissyara.su/?id=1151

и тут но не знаю что там http://www.lissyara.su/?id=1140

и еще один есть в нем SSL можно поставить директивы...

есть смысл ставить 1.3, или может какой нить другой сервер , или забить на БД?

Re: free cp 4 web

Добавлено: 2008-09-13 16:06:27
zg
ProFTP писал(а):есть смысл ставить 1.3, или может какой нить другой сервер , или забить на БД?
я бы пока забил :smile: текстовые файлики меня вполне устраивают

Re: free cp 4 web

Добавлено: 2008-09-15 12:06:24
paix
ProFTP писал(а):что именно? :Search:

есть смысл ставить 1.3, или может какой нить другой сервер , или забить на БД?
чем проще тем лучше.
Я первый, кто не будет пользоваться сим продуктом, если веб сервер будет хранить конфиги в бд.

насчет апач1 вс апач2.
Если вы не знаете какие фишки того или иного апача вам нужны - то пользовать что без разницы.

Апач1 очень добротный и сильно попилянный. Кроме того к нему много кастыличиков имеется, которые апач 2 не умеет.
например mod_aclr и подобные.
Кроме того, в большинстве случаев апач используется как пхп\сжи\фастцжи бекенд, что лишает смысла использовать всякие извраты 2го апача типа worker\perchaild etc.

Единственное, что мне нравится во 2ом, это удобная реализация include.

И вообще, если можно неюзать апач, лучше его не юзать :-)

Re: free cp 4 web

Добавлено: 2008-09-15 12:57:37
zg
paix писал(а):И вообще, если можно неюзать апач, лучше его не юзать :-)
мне от апача нужны кодировки, виртуал хосты, SSL, suexec, .htaccess, авторизация и mod_rewrite :smile: а так всё-равно апач, не апач, первый, не первый, второй или малиновый, лишь бы работало :smile:

Re: free cp 4 web

Добавлено: 2008-09-16 9:04:21
ProFTP
paix писал(а): чем проще тем лучше.
Я первый, кто не будет пользоваться сим продуктом, если веб сервер будет хранить конфиги в бд.
можно сразу и в текстовом, и в бд
не знаю как в плеск, но вот например в syscp для того чтобы перезаписать новую директиву нужно пол файла удалить или весь и добавить просто с новой директивой - это криво... рано или поздно может похерится это, если будут перегрузы или еще что-то... потому что нету трансакции... (или я ошибаюсь?)
paix писал(а): Кроме того, в большинстве случаев апач используется как пхп\сжи\фастцжи бекенд, что лишает смысла использовать всякие извраты 2го апача типа worker\perchaild etc.
фастцжи если все равно на каком, то хорошо, тогда надо на 1.3 переходить, это точная информация, что всё равно на каком? где-то был что с динамическими странциа апачъ22 быстрее работает на 70% (точно не помню, но и не знаю в каком режиме пхп)


в принципе все равно, лишь бы работало...

Re: free cp 4 web

Добавлено: 2008-09-16 11:32:54
paix
syscp конфиги в базе данных не хранит(хранила).

fastcgi все равно на каком, главное чтобы prefork. На workere он постоянно падал, думаю на peruserid и подобных будет тоже самое. Эксперементировать желания нет.

На счет скорости, случайно не тесты Димы Котерова читал? на dklab.ru? :) шутка.

Re: free cp 4 web

Добавлено: 2008-09-16 11:46:34
ProFTP
paix писал(а):syscp конфиги в базе данных не хранит(хранила).
я вроде бы не говорил что она хранит в базе данных...
ну это ладно... все равно решаемо... хоть в базе, хоть нет...

Re: free cp 4 web

Добавлено: 2008-10-14 5:36:21
ProFTP
не много не доделано, если надо делаю

Код: Выделить всё

use Apache::Admin::Config;
my $conf = new Apache::Admin::Config '/$qhost',
  or die $Apache::Admin::Config::ERROR;
my $vhost;
my %templ_value;
my $templ_value;
my ( $serveradmin, $serveralis, $costomlog, $errorlog, @drtvs4 );
foreach my $vh ( $conf->section('VirtualHost') ) {

    if ( $vh->directive('ServerName')->value eq $nameserver ) {
        $serveradmin = $vh->directive('ServerAdmin');
        $serveralis  = $vh->directive('ServerAlias');
        $costomlog   = $vh->directive('CustomLog');
        $errorlog    = $vh->directive('ErrorLog');
        @drtvs4      = $vh->directive('ErrorDocument');
    }
}

my $template = HTML::Template->new(
    filename          => $dir . 'tempele-apache22-aid.html',
    die_on_bad_params => '0'
);
my $url = $query->url( -relative => 1 );
$template->param( URL => $url );
$template->param( AID => $aid );

if ( defined($saa) ) {
    if ($serveradmin) {
        use Data::Validate::Email qw(is_email);
        if (
            (
                   ( length($saa) )
                && ( 70 > length($saa) )
                && ( 5 < length($saa) )
            )
            && ( is_email($saa) )
          )
        {
            foreach my $vh ( $conf->section('VirtualHost') ) {
                if ( $vh->directive('ServerName')->value eq $nameserver ) {
                    $vh->directive('ServerAdmin')->set_value($saa);
                }
            }
            $conf->save;

            #my  $okssa="ok add ServerAdmin";
        }
        else { %templ_value = ( 'errorsa' => 1 ); }
    }   #else {  $vh->add_directive(ServerAdmin => $saa) }                     }

    if ($serveradmin) {

        #my ($serveradmin);
        # my $serveradmin=$vh->directive('ServerAdmin');
        %templ_value = ( serveradmin => $serveradmin );
    }
    else { %templ_value = ( 'noserverserveradmin' => '1' ); }
    $template->param( NOSERVERADMIN => $templ_value{'noserverserveradmin'} );
    $template->param( SERVERADMIN   => $templ_value{'serveradmin'} );
    $template->param( ERRORSA       => $templ_value{'errorsa'} );
    my $addsa = $query->param("addsa");
    if ( defined($addsa) ) {
        use Data::Validate::Domain qw(is_domain);
        if (   ( ( 70 > length($addsa) ) && ( 4 < length($addsa) ) )
            && ( is_domain($addsa) ) )
        {
            if ($serveralis) {

                #my $serveralis=$vh->directive('ServerAlias');
                my @serv_array = split( / /, $serveralis );
                my $n = scalar(@serv_array);
                my ( $match, $found, $item );
                foreach $item (@serv_array) {
                    if ( $item eq $addsa ) { $match = $item; $found = 1; last; }
                }
                if ( !$found ) {
                    $serv_array[$n] = $addsa;
                    my $addsa2 = join( ' ', @serv_array );
                    foreach my $vh ( $conf->section('VirtualHost') ) {
                        if (
                            $vh->directive('ServerName')->value eq $nameserver )
                        {
                            $vh->directive('ServerAlias')->set_value($addsa2);
                        }
                    }
                    $conf->save;
                }
                else { %templ_value = ( 'addsa_found' => '1' ); }
            }
        }
        else { %templ_value = ( 'addsa_noval' => '1' ); }
    }
    my $sadelete = $query->param("sadelete");
    if ( defined($sadelete) ) {
        if ($serveralis) {
            my @serv_array;
            @serv_array = split( / /, $serveralis );
            my $n = scalar(@serv_array);
            delete( @serv_array[$sadelete] );
            my $addsa2 = join( ' ', @serv_array );
            foreach my $vh ( $conf->section('VirtualHost') ) {
                if ( $vh->directive('ServerName')->value eq $nameserver ) {
                    $vh->directive('ServerAlias')->set_value($addsa2);
                }
            }
            $conf->save;
        }
    }
    my $allsa = $query->param("allsa");
    if ( defined($allsa) ) {
        my $satooall = $query->param("satooall");
        if ($serveralis) {
            $satooall = $query->param("satooall");
            my @serv_array;
            @serv_array = split( / /, $serveralis );
            my $n  = scalar(@serv_array);
            my $ss = "*.$nameserver";
            if ( ( defined($satooall) ) && ( $satooall eq "1" ) ) {
                if ( ( $n eq '2' ) && ( $serv_array[1] eq $ss ) ) {
                    %templ_value = ( 'satooall_in_use' => '1' );
                }
                else {
                    my $allsa2 = "$nameserver2 $ss";
                    foreach my $vh ( $conf->section('VirtualHost') ) {
                        if (
                            $vh->directive('ServerName')->value eq $nameserver )
                        {
                            $vh->directive('ServerAlias')->set_value($allsa2);
                        }
                    }
                    $conf->save;
                }
            }
            elsif ( ( defined($satooall) ) && ( $satooall eq "2" ) ) {
                if ( ( $n > 0 ) && ( $serv_array[1] ne $ss ) ) {
                    %templ_value = ( 'nosatooall_in_use' => '1' );
                }
                else {
                    my $allsa2 = $nameserver2;
                    foreach my $vh ( $conf->section('VirtualHost') ) {
                        if (
                            $vh->directive('ServerName')->value eq $nameserver )
                        {
                            $vh->directive('ServerAlias')->set_value($allsa2);
                        }
                    }
                    $conf->save;
                }
            }
            else { %templ_value = ( 'no_satooall_param' => '1' ); }
        }
    }
    my ( @serv_array, @array_for_template );
    if ($serveralis) {
        @serv_array = split( / /, $serveralis );
        my $n  = scalar(@serv_array);
        my $ss = "*.$nameserver";
        shift(@serv_array);
        my $ns = 1;
        @array_for_template;
        @array_for_template =
          map +{ savalue => $_, savalue2 => $aid, savalue3 => $ns++ },
          @serv_array;
        if ( ( $n eq 2 ) && ( $serv_array[1] eq $ss ) ) {
            %templ_value = ( 'temlp_serveralis_all' => '1' );
        }
        else { %templ_value = ( 'notemlp_serveralis_all' => '1' ); }
    }
    else { %templ_value = ( 'noserveralis' => '1' ); }
    $template->param(
        TEMP_SERVERALIAS_ALL => $templ_value{'temlp_serveralis_all'} );
    $template->param(
        NOTEMP_SERVERALIAS_ALL => $templ_value{'notemlp_serveralis_all'} );
    if ( $templ_value{'addsa_found'} ) {
        $template->param( ADDSA_FOUND => 'ServerAlias found, not added' );
    }
    $template->param( ADDSA_NOVAL        => $templ_value{'addsa_noval'} );
    $template->param( SATOOALL_IN_USE    => $templ_value{'satooall_in_use'} );
    $template->param( NOSATOOALL_IN_USE  => $templ_value{'nosatooall_in_use'} );
    $template->param( NO_SATOOALL_IN_USE => $templ_value{'no_satooall_param'} );
    if ( $templ_value{'notemlp_serveralis_all'} ) {
        $template->param( SA8 => \@array_for_template );
    }
    my $oneoffcl = $query->param("oneoffcl");
    if ( defined($oneoffcl) ) {
        my $clvalue = $query->param("clvalue");
        if ( $clvalue eq '1' ) {
            if ($costomlog) { %templ_value = ( 'customlog_in_use' => '1' ); }
            else {
                my $dircl = "/home/$qhost/log/httpd-access.log combined";
                foreach my $vh ( $conf->section('VirtualHost') ) {
                    if ( $vh->directive('ServerName')->value eq $nameserver ) {
                        $vh->add_directive( CustomLog => $dircl );
                    }
                }
                $conf->save;
            }
        }
        elsif ( $clvalue eq '2' ) {
            if ($costomlog) {
                foreach my $vh ( $conf->section('VirtualHost') ) {
                    if ( $vh->directive('ServerName')->value eq $nameserver ) {
                        $vh->directive('CustomLog')->delete;
                    }
                }
                $conf->save;
            }
            else { %templ_value = ( 'no_customlog_in_use' => '1' ); }
        }
        else { %templ_value = ( 'no_clvalue' => '1' ); }
    }
    my $type_cl = $query->param("type_cl");
    if ( defined($type_cl) ) {
        my $typecls = $query->param("typecls");
        if ($costomlog) {
            my $customl_type = $costomlog;
            my ( $file, $typelog ) = split( / /, $customl_type );
            if ( ( $typecls eq '0' ) && ( $typelog eq 'combined' ) ) {
                %templ_value = ( 'typecls_in_use_combined' => '1' );
            }
            elsif ( ( $typecls eq '0' ) && ( $typelog ne 'combined' ) ) {
                my $typecls_value = "$file combined";
                foreach my $vh ( $conf->section('VirtualHost') ) {
                    if ( $vh->directive('ServerName')->value eq $nameserver ) {
                        $vh->directive('CustomLog')->set_value($typecls_value);
                    }
                }
                $conf->save;
            }
            elsif ( ( $typecls eq '1' ) && ( $typelog eq 'common' ) ) {
                %templ_value = ( 'typecls_in_use_common' => '1' );
            }
            elsif ( ( $typecls eq '1' ) && ( $typelog ne 'common' ) ) {
                my $typecls_value = "$file common";
                foreach my $vh ( $conf->section('VirtualHost') ) {
                    if ( $vh->directive('ServerName')->value eq $nameserver ) {
                        $vh->directive('CustomLog')->set_value($typecls_value);
                    }
                }
                $conf->save;
            }
            else { %templ_value = ( 'no_typecls' => '1' ); }
        }
        else { %templ_value = ( 'no_cl' => '1' ); }
    }
    if ($costomlog) {
        $template->param( CLTRUE => '1' );
        my ( $file, $typelog ) = split( / /, $costomlog );
        if ( $typelog eq 'combined' ) {
            $template->param( CLT_CD => '1' );
        }
        elsif ( $typelog eq 'common' ) {
            %templ_value = ( 'customlogtype_cn' => '1' );
        }
        else { %templ_value = ( 'nocustomlogtype' => '1' ); }
    }
    else { %templ_value = ( 'nocustomlog' => '1' ); }
    $template->param( CLT_CN       => $templ_value{'customlogtype_cn'} );
    $template->param( NOCLT        => $templ_value{'nocustomlogtype'} );
    $template->param( NOCLTRUE     => $templ_value{'nocustomlog'} );
    $template->param( CL_IN_USE    => $templ_value{'customlog_in_use'} );
    $template->param( NO_CL_IN_USE => $templ_value{'no_customlog_in_use'} );
    $template->param( NO_CLVALUE   => $templ_value{'no_clvalue'} );
    $template->param(
        TYPE_CL_IN_USE_D => $templ_value{'typecls_in_use_combined'} );
    $template->param(
        TYPE_CL_IN_USE_C => $templ_value{'typecls_in_use_common'} );
    $template->param( NOTYPE_CL    => $templ_value{'no_typecls'} );
    $template->param( NO_CL_IN_USE => $templ_value{'no_cl'} );

    if ($errorlog) {
        %templ_value = ( 'errorlogtrue' => '1' );
    }
    else { %templ_value = ( 'noerrorlog' => '1' ); }
    $template->param( ERRORLOG   => $templ_value{'notemlp_serveralis_all'} );
    $template->param( NOERRORLOG => $templ_value{'notemlp_serveralis_all'} );
    my ( $type_errord, $tttt, $match_index2, @drtvs3 );
    my $error_typeer_edadd;

    sub eett1 {
        my ( $type_errord, $edvalue, $edtvalue ) = @_;
        if ( $type_errord ne '1' ) {
            use Data::Validate::URI qw(is_uri);
            if (   ( !length($edvalue) )
                || ( 65 < length($edvalue) )
                || ( 5 > length($edvalue) )
                || ( !is_uri($edvalue) ) )
            {
                my $error_typedoc2 = "1";
                $error_typedoc = \$error_typedoc2;
                return $error_typedoc;
            }
        }
        if ( ( $type_errord > 0 ) && ( ( 3 == length($edtvalue) ) ) ) {
            my ( $found, $item );
            my @er_array = (
                100, 101, 200, 201, 202, 203, 204, 205, 206, 300,
                301, 302, 303, 304, 305, 400, 401, 402, 403, 404,
                405, 406, 407, 408, 409, 410, 411, 412, 413, 414,
                415, 500, 501, 502, 503, 504, 505
            );
            foreach $item (@er_array) {
                if ( $item eq $edtvalue ) { $found = 1; last; }
            }
            if ( !$found ) {
                my $error_type2 = "1";
                $error_type = \$error_type2;
                return $error_type;
            }
            my $tttt2 = "1";
            $tttt = \$tttt2;
            return $tttt;
        }
    }

    sub eett2 {
        my ( $edtvalue, @drtvs4 ) = @_;
        for my $loopindex ( 0 .. $#drtvs4 ) {
            my ( $key, $value ) = split( / /, $drtvs4[$loopindex] );
            push( @drtvs3, { $key => $value } );
        }
        my ( $match_key, $match_index, $found );
        for my $loopindex ( 0 .. $#drtvs3 ) {
            for my $key2 ( keys %{ $drtvs3[$loopindex] } ) {
                if ( $key2 eq $edtvalue ) {
                    $drtvs3[$loopindex]{$key2};
                    $match_key   = $key2;
                    $match_index = $loopindex;
                    $found       = 1;
                    last;
                }
            }
        }
        print $match_index;
        if ( !$found && $type_errord ne '2' ) {
            my $error_typeer2 = "1";
            $error_typeer = \$error_typeer2;
            return $error_typeer;
        }
        if ( $found && $type_errord eq '2' ) {
            my $error_typeer_edadd2 = "1";
            $error_typeer_edadd = \$error_typeer_edadd2;
            return $error_typeer_edadd;
        }
        $match_index2 = \$match_index;
        return ( @drtvs3, $match_index2 );
    }
    my $eddelete = $query->param("eddelete");
    my $edadd    = $query->param("edadd");
    my $edchange = $query->param("edchange");
    if ( $eddelete || $edchange || $edadd ) {
        my $edtvalue = $query->param("edtvalue");
        my $edvalue  = $query->param("edvalue");

        if ( ( defined($eddelete) ) && (@drtvs4) ) {
            $type_errord = "1";
        }
        elsif ( defined($edadd) ) {
            $type_errord = "2";
        }
        elsif ( ( defined($edchange) ) && (@drtvs4) ) {
            $type_errord = "3";
        }
        else { my $type_errord = "0"; }

        eett1( $type_errord, $edvalue, $edtvalue );
        if (
               defined($$tttt)
            && eett2( $edtvalue, @drtvs4 )
            && (   ( defined($$match_index2) && $type_errord ne '2' )
                || ( !defined($$error_typeer_edadd) && $type_errord eq '2' ) )
          )
        {
            if ( ( $type_errord eq '3' ) && defined($$match_index2) && @drtvs3 )
            {
                $drtvs3[$$match_index2] = { $edtvalue => $edvalue };
            }
            elsif ( ( $type_errord eq '2' ) && !defined($$error_typeer_edadd) )
            {
                my $match_index3;
                if   ( $#drtvs3 >= 0 ) { $match_index3 = $#drtvs3 + 1; }
                else                   { $match_index3 = 0; }
                print "99999 $match_index3 $#drtvs3 ";
                $drtvs3[$match_index3] = { $edtvalue => $edvalue };
            }
            elsif (( $type_errord eq '1' )
                && defined($$match_index2)
                && @drtvs3 )
            {
                delete( @drtvs3[$$match_index2] );
            }
            else { exit; }
            foreach my $vh ( $conf->section('VirtualHost') ) {
                if ( $vh->directive('ServerName')->value eq $nameserver ) {
                    while ( $vh->directive('ErrorDocument') ) {
                        $vh->directive('ErrorDocument')->delete;
                    }
                    for my $loopindex2 ( 0 .. $#drtvs3 ) {
                        for my $key4 ( keys %{ $drtvs3[$loopindex2] } ) {
                            my $value_er       = $drtvs3[$loopindex2]{$key4};
                            my $setvalue_error = "$key4 $value_er";
                            $vh->add_directive(
                                ErrorDocument => $setvalue_error );
                        }

                    }
                }
            }
            $conf->save;
        }
        else {
            $templ_value{'ed_error'} =
                $$error_type         ne '1' ? (0)
              : $$error_type         ne '1' ? (0)
              : $$error_typeer       ne '1' ? (0)
              : $$error_typeer_edadd ne '1' ? (0)
              :                               (1);
        }
    }

    $template->param( ED_ERROR_VALUEDOC => $$error_typedoc );
    $template->param( ED_ERROR_TYPEDOC  => $$error_type );
    $template->param( ED_ERROR_NO_USE   => $$error_typeer );
    $template->param( ED_ERROR_IN_USE   => $$error_typeer_edadd );
    $template->param( ED_ERROR          => $templ_value{'ed_error'} );
    my @arrayedout;
    my @arrayedout2;
    my @er_array = (
        100, 101, 200, 201, 202, 203, 204, 205, 206, 300, 301, 302, 303, 304,
        305, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412,
        413, 414, 415, 500, 501, 502, 503, 504, 505
    );

    if (@drtvs4) {
        for my $loopindex9 ( 0 .. $#drtvs4 ) {
            my ( $key9, $value9 ) = split( / /, $drtvs4[$loopindex9] );
            push( @arrayedout,
                { errort => $key9, erroru => $value9, aid => $aid } );
        }
        for my $loopindex ( 0 .. $#drtvs4 ) {
            my ( $key, $value ) = split( / /, $drtvs4[$loopindex] );
            push @arrayedseen, $key;
        }
        my %seen;
        @seen{@er_array} = ();
        delete @seen{@arrayedseen};
        my @aonly = sort keys %seen;
        if ( @aonly > 0 ) {
            @arrayedout2 = map +{ errortype => $_ }, @aonly;
        }
        else {
            %templ_value = ( 'errortype_limit' => '1' );
        }
    }
    else {
        @arrayedout2 = map +{ errortype => $_ }, @er_array;
    }
    if ( $templ_value{'errortype_limit'} ) {
        $template->param( ERRORTYPELIMIT => $templ_value{'errortype_limit'} );
    }
    else { $template->param( ADDDOCUM => \@arrayedout2 ); }
    $template->param( SA10 => \@arrayedout );

    $template->param( AUTHORIZE => $authorize );
    $template->param( WELCOME   => $welcome );
    $template->param( USERSE    => $$session{'name'} );

Re: free cp 4 web

Добавлено: 2008-10-14 6:16:07
ProFTP
как делать тарифный план, нужно для сайта или для сайтов делать?

1 тип: 1 сайт - 50Мб - 1$ - 300М трафа - 2 ящика
1 сайт - 50Мб - 1.5$ - 300М трафа - 2 ящика- ssl - pgsql

или 2 тип: 10 сайтов - 200Мб - 4$ - 500М трафа - 20 ящиков
10 сайтов - 200Мб - 5$ - 500М трафа - 20 ящиков - ssl - pgsql

как правильно, если эти 4 варианта СРАЗУ, то не много геморойно будет писать код...

ну и если 1 сайт из 10 съест весь траф или спам будет отправлять, то другие тоже будут страдать их закроют или скорость меньше будет...


тут как квоту поставить для групы чтоли надо, если несколько сайтов на одну квоту (во втором типе) ??

или использовать первый вариант?
я просто видел что многие почему-то использют в тарифных планах несколько сайтов, не понятно как тут правильно...


(для первого типа:
один сайт - один домен - и одна квота - один пользователь.

следеющий сайт, если надо или если поодомен хочу:

один сайт - один домен (или поддомен другой с него) - и одна квота - один пользователь)

Re: free cp 4 web

Добавлено: 2008-10-14 20:30:40
zg
ну ты монстр )))) стока всего написал и ничё не понятно )) пока это не нужно, нужна система управления клиентами.