CGI трансакция?

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

CGI трансакция?

Непрочитанное сообщение ProFTP » 2008-08-18 1:26:10

есть cgi дижок, perl

нужно выполнить пару команд через system(), если клиент нажмен в браузере Stop, то получаеться что выполнение может не полностью закончиться?
если оно будет пару секунд, например?

как тут нужно сделать? или какой-то другой функцией?
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: CGI трансакция?

Непрочитанное сообщение zingel » 2008-08-18 2:07:05

в обратных ковычках с проверкой......

``; - замена system() && exec()
Z301171463546 - можно пожертвовать мне денег

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: CGI трансакция?

Непрочитанное сообщение ProFTP » 2008-08-18 4:00:23

не понял

есть например:

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

system("cp 1 2");
system("cp 1 3");
system("cp 1 4");
Как тут связать с exec? что за кавычки?
как это называеться чтобы в гугле найти? не нашел
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: CGI трансакция?

Непрочитанное сообщение zingel » 2008-08-18 4:31:30

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

perldoc -f exec
Z301171463546 - можно пожертвовать мне денег

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: CGI трансакция?

Непрочитанное сообщение ProFTP » 2008-08-18 4:36:52

там полностью не написано, вот так должно быть?

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

           exec (cp 1 4')   or print STDERR "couldn't exec foo: $!";
                   { exec ('cp 1 4') }; print STDERR "couldn't exec foo: $!";
                   { exec ('cp 1 4') }; print STDERR "couldn't exec foo: $!";

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

  If there is more than one argument in LIST, or if LIST is an
               array with more than one value, calls execvp(3) with the argu-
               ments in LIST.  If there is only one scalar argument or an
               array with one element in it, the argument is checked for shell
               metacharacters, and if there are any, the entire argument is
               passed to the system's command shell for parsing (this is
               "/bin/sh -c" on Unix platforms, but varies on other platforms).
               If there are no shell metacharacters in the argument, it is
               split into words and passed directly to "execvp", which is more
               efficient.  Examples:

                   exec '/bin/echo', 'Your arguments are: ', @ARGV;
                   exec "sort $outfile | uniq";
в том доке, не понятно это, и нафига мне тут echo, и как 3 функции сюда вставить...?
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: CGI трансакция?

Непрочитанное сообщение zg » 2008-08-18 5:28:50

ProFTP писал(а):если клиент нажмен в браузере Stop, то получаеться что выполнение может не полностью закончиться?
ага :smile: для решения этой проблемы нужно сделать отложенные задания, то есть ты даёшь задание скрипту - "скопировать файлы туда-то" или "убить всю систему", но скрипт не выполняет их сразу, он кладёт задания в базу. По крону, уже другой скрипт, смотрит какие задания есть в базе и выполняет независимо от удалённого пользователя.

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: CGI трансакция?

Непрочитанное сообщение zingel » 2008-08-18 5:45:24

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

my $cp1 = `cp 1 2`;
my $cp2 = `cp 2 3`;
my $cp3 = `cp 3 4`;
вот так правильнее, вот тут в чём вся мощщщ кавычек....без всяких сраных system()
Z301171463546 - можно пожертвовать мне денег

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: CGI трансакция?

Непрочитанное сообщение ProFTP » 2008-08-18 5:57:08

zg писал(а):
ProFTP писал(а):если клиент нажмен в браузере Stop, то получаеться что выполнение может не полностью закончиться?
ага :smile: для решения этой проблемы нужно сделать отложенные задания, то есть ты даёшь задание скрипту - "скопировать файлы туда-то" или "убить всю систему", но скрипт не выполняет их сразу, он кладёт задания в базу. По крону, уже другой скрипт, смотрит какие задания есть в базе и выполняет независимо от удалённого пользователя.
именно так и делаю!

сейчас кое-что другое, но все равно эта трансакция остаеться...

кстате, а webmin работает в apache от рута или нет? по-моиму от рута, как он тогже конфиги меняет, или он записывает в свою БД и потом парсит и выполняет отдельно чтоли?
Последний раз редактировалось ProFTP 2008-08-18 6:04:57, всего редактировалось 2 раза.
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: CGI трансакция?

Непрочитанное сообщение zingel » 2008-08-18 6:01:32

вебмин работает от всего, чудная программа, если хочеш чтобы твой сервер зарутали - поставь вебмин...
Z301171463546 - можно пожертвовать мне денег

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: CGI трансакция?

Непрочитанное сообщение ProFTP » 2008-08-18 6:18:31

кстате, в инсталяторе webmin высталяеться владелец root на все каталоги...
от рута тогда запускать можно скрипты apache или нет? фиг знает как лучше :st:
а какие программы записывают в БД с начало, а потом выполняют?

вот такое регуляртное выражение подойдет для безопасности?

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

($file !~ /^[A-Za-z0-9]+$/)
если в вводе есть не буква и не цифра, то выдаст ошибку... :oops:
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: CGI трансакция?

Непрочитанное сообщение zg » 2008-08-18 11:04:40

ProFTP писал(а):если в вводе есть не буква и не цифра, то выдаст ошибку... :oops:
это неверный путь, пробел - не буква и не цифра, но его наличие доспускается в имени файла, _ (земля) тоже не буква и не цифра, но тоже очень распространён, - (минус) тоже самое, и ещё куча нужных символов.
ProFTP писал(а):от рута тогда запускать можно скрипты apache или нет?
всё можно, но иногда только один раз.... :roll: а если нужно не всё, то sudo вполне подойдёт.

Скажи прямо, чего тебе нужно сделать?

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: CGI трансакция?

Непрочитанное сообщение ProFTP » 2008-08-19 11:38:03

нужно сделать несколько system функций, еще видел используеться где-то демон Сишный, может он паралельно использует system от скрипта?

(это не срочно надо, просто хотел спросить как запустить пару system функций)
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: CGI трансакция?

Непрочитанное сообщение zg » 2008-08-19 19:42:23

демон от крона отличается только скоростью обработки и сложностью реализации. Демон можно писать не только на C, но и на перле и на пхп. Только у демона одна трабла есть - на каждый запрос обычно идёт форк и процессы идут параллельно, а кроновый скрипт пораждает один процесс и обработка может идти как последовательно так и параллельно. Ну и использование демона с правами рута (также как и крона) ничего хорошего для безопасности не сулит.

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: CGI трансакция?

Непрочитанное сообщение ProFTP » 2008-09-03 2:42:34

по-моиму я нашел, елси это оно ...

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

  package User;

        @ISA = qw(Object::Transaction);

        use Object::Transaction;

        my $top = "/some/path";

        sub new { 
                my ($package, $login) = @_;
                die unless getpwnam($login);
                return bless { UID => getpwnam($login) };
        }

        sub file { 
                my ($ref, $id) = @_;
                $id = $ref->id() unless $id;
                return "$top/users/$id/data.storable";
        }

        sub id {
                my ($this) = @_;
                return $this->{UID};
        }

        sub preload
        {
                my ($id) = @_;
                return if getpwuid($id);
                return getpwnam($id) if getpwnam($id);
                die;
        }

        sub postload
        {
                my ($this) = @_;
                my ($name,$passwd,$uid,$gid,$quota,$comment,$gcos,$dir,
                        $shell,$expire) = getpwuid($this->{UID});
                $this->{SHELL} = $shell;
        }

        sub presave
        {
                my ($this, $old) = @_;
                my $id = $this->{UID};
                mkdir("$top/users/$id", 0700);
                delete $this->{SHELL};
        }

        sub postsave
        {
                goto &postload;
        }

        sub postremove
        {
                delete from pw file...
        }

        my $joe = new User "joe";
        $joe->savelater();

        my $fred = new User "fred";
        $fred->savelater();

        $joe->commit();
http://search.cpan.org/~muir/Object-Tra ... action.pod
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение