CGI трансакция?
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
CGI трансакция?
есть cgi дижок, perl
нужно выполнить пару команд через system(), если клиент нажмен в браузере Stop, то получаеться что выполнение может не полностью закончиться?
если оно будет пару секунд, например?
как тут нужно сделать? или какой-то другой функцией?
нужно выполнить пару команд через system(), если клиент нажмен в браузере Stop, то получаеться что выполнение может не полностью закончиться?
если оно будет пару секунд, например?
как тут нужно сделать? или какой-то другой функцией?
Услуги хостинговой компании Host-Food.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/
Тарифы на виртуальные сервера (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 трансакция?
в обратных ковычках с проверкой......
``; - замена system() && exec()
``; - замена system() && exec()
Z301171463546 - можно пожертвовать мне денег
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: CGI трансакция?
не понял
есть например:
Как тут связать с exec? что за кавычки?
как это называеться чтобы в гугле найти? не нашел
есть например:
Код: Выделить всё
system("cp 1 2");
system("cp 1 3");
system("cp 1 4");
как это называеться чтобы в гугле найти? не нашел
- zingel
- beastie
- Сообщения: 6204
- Зарегистрирован: 2007-10-30 3:56:49
- Откуда: Moscow
- Контактная информация:
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: CGI трансакция?
там полностью не написано, вот так должно быть?
в том доке, не понятно это, и нафига мне тут echo, и как 3 функции сюда вставить...?
Код: Выделить всё
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";
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: CGI трансакция?
агаProFTP писал(а):если клиент нажмен в браузере Stop, то получаеться что выполнение может не полностью закончиться?

- zingel
- beastie
- Сообщения: 6204
- Зарегистрирован: 2007-10-30 3:56:49
- Откуда: Moscow
- Контактная информация:
Re: CGI трансакция?
Код: Выделить всё
my $cp1 = `cp 1 2`;
my $cp2 = `cp 2 3`;
my $cp3 = `cp 3 4`;
Z301171463546 - можно пожертвовать мне денег
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: CGI трансакция?
именно так и делаю!zg писал(а):агаProFTP писал(а):если клиент нажмен в браузере Stop, то получаеться что выполнение может не полностью закончиться?для решения этой проблемы нужно сделать отложенные задания, то есть ты даёшь задание скрипту - "скопировать файлы туда-то" или "убить всю систему", но скрипт не выполняет их сразу, он кладёт задания в базу. По крону, уже другой скрипт, смотрит какие задания есть в базе и выполняет независимо от удалённого пользователя.
сейчас кое-что другое, но все равно эта трансакция остаеться...
кстате, а webmin работает в apache от рута или нет? по-моиму от рута, как он тогже конфиги меняет, или он записывает в свою БД и потом парсит и выполняет отдельно чтоли?
Последний раз редактировалось ProFTP 2008-08-18 6:04:57, всего редактировалось 2 раза.
- zingel
- beastie
- Сообщения: 6204
- Зарегистрирован: 2007-10-30 3:56:49
- Откуда: Moscow
- Контактная информация:
Re: CGI трансакция?
вебмин работает от всего, чудная программа, если хочеш чтобы твой сервер зарутали - поставь вебмин...
Z301171463546 - можно пожертвовать мне денег
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: CGI трансакция?
кстате, в инсталяторе webmin высталяеться владелец root на все каталоги...
от рута тогда запускать можно скрипты apache или нет? фиг знает как лучше
а какие программы записывают в БД с начало, а потом выполняют?
вот такое регуляртное выражение подойдет для безопасности?
если в вводе есть не буква и не цифра, то выдаст ошибку... 
от рута тогда запускать можно скрипты apache или нет? фиг знает как лучше

а какие программы записывают в БД с начало, а потом выполняют?
вот такое регуляртное выражение подойдет для безопасности?
Код: Выделить всё
($file !~ /^[A-Za-z0-9]+$/)

-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: CGI трансакция?
это неверный путь, пробел - не буква и не цифра, но его наличие доспускается в имени файла, _ (земля) тоже не буква и не цифра, но тоже очень распространён, - (минус) тоже самое, и ещё куча нужных символов.ProFTP писал(а):если в вводе есть не буква и не цифра, то выдаст ошибку...
всё можно, но иногда только один раз....ProFTP писал(а):от рута тогда запускать можно скрипты apache или нет?

Скажи прямо, чего тебе нужно сделать?
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: CGI трансакция?
нужно сделать несколько system функций, еще видел используеться где-то демон Сишный, может он паралельно использует system от скрипта?
(это не срочно надо, просто хотел спросить как запустить пару system функций)
(это не срочно надо, просто хотел спросить как запустить пару system функций)
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: CGI трансакция?
демон от крона отличается только скоростью обработки и сложностью реализации. Демон можно писать не только на C, но и на перле и на пхп. Только у демона одна трабла есть - на каждый запрос обычно идёт форк и процессы идут параллельно, а кроновый скрипт пораждает один процесс и обработка может идти как последовательно так и параллельно. Ну и использование демона с правами рута (также как и крона) ничего хорошего для безопасности не сулит.
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: CGI трансакция?
по-моиму я нашел, елси это оно ...
http://search.cpan.org/~muir/Object-Tra ... action.pod
Код: Выделить всё
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();