Есть скрипт выдающий клиентам скорость:#!/usr/bin/perl -w
use DBI;
use Time::localtime;
use POSIX ":sys_wait_h";my $FIRE_SQL_SERVER = "localhost";
my $FIRE_SQL_LOGIN = "******";
my $FIRE_SQL_PASSWD = "*******";
my $FIRE_DBASE = "*******";
my $FIRE_AUTH_TABLE = "users";my ($dbh,$sth,$count);
$dbh = DBI->connect("DBI:mysql:host=$FIRE_SQL_SERVER;database=$FIRE_DBASE","$FIRE_SQL_LOGIN","$FIRE_SQL_PASSWD") or &error_connection;
$sth = $dbh->prepare("SELECT * FROM $FIRE_AUTH_TABLE");
$sth->execute ();
while(@row = $sth->fetchrow_array()) {
if ($row[4] == 1) {
$numipfw = (20000+$row[3]);
exec "ipfw del $numipfw"; exit;
exec "ipfw $numipfw add pipe 100 ip from any to $row[19] out"; exit;
exec "ipfw $numipfw add pipe 100 ip from $row[19] to any in"; exit;
$numipfw = $numipfw + 10000;
exec "ipfw del $numipfw"; exit;
}
if ($row[4] == 2) {
$numipfw = (20000+$row[3]);
exec "ipfw del $numipfw"; exit;
exec "ipfw $numipfw add pipe 100 ip from any to $row[19] out"; exit;
exec "ipfw $numipfw add pipe 100 ip from $row[19] to any in"; exit;
$numipfw = $numipfw + 10000;
exec "ipfw del $numipfw"; exit;
}
}
$dbh->disconnect;
И он просто не работает. Програмерры скажите пожалусто где трабла?
>Есть скрипт выдающий клиентам скорость:
>
>#!/usr/bin/perl -w
>
>use DBI;
>use Time::localtime;что это такое?
>use POSIX ":sys_wait_h";
>
>my $FIRE_SQL_SERVER = "localhost";
>my $FIRE_SQL_LOGIN = "******";
>my $FIRE_SQL_PASSWD = "*******";
>my $FIRE_DBASE = "*******";
>my $FIRE_AUTH_TABLE = "users";
>
>my ($dbh,$sth,$count);
>$dbh = DBI->connect("DBI:mysql:host=$FIRE_SQL_SERVER;database=$FIRE_DBASE","$FIRE_SQL_LOGIN","$FIRE_SQL_PASSWD") or &error_connection;а это что такое?
>$sth = $dbh->prepare("SELECT * FROM $FIRE_AUTH_TABLE");
>$sth->execute ();
>while(@row = $sth->fetchrow_array()) {
> if ($row[4] == 1)
>{
> $numipfw = (20000+$row[3]);
>
>exec "ipfw del $numipfw"; exit;зачем тут exit?
> exec "ipfw $numipfw add pipe 100 ip
>from any to $row[19] out"; exit;
> exec "ipfw $numipfw add pipe 100 ip
>from $row[19] to any in"; exit;
> $numipfw = $numipfw + 10000;
>
>exec "ipfw del $numipfw"; exit;
> }
> if ($row[4] == 2)
>{
> $numipfw = (20000+$row[3]);
>
>exec "ipfw del $numipfw"; exit;
> exec "ipfw $numipfw add pipe 100 ip
>from any to $row[19] out"; exit;
> exec "ipfw $numipfw add pipe 100 ip
>from $row[19] to any in"; exit;
> $numipfw = $numipfw + 10000;
>
>exec "ipfw del $numipfw"; exit;
> }
>
> }
> $dbh->disconnect;
>
>
>И он просто не работает. Програмерры скажите пожалусто где трабла?что говорит?
>>Есть скрипт выдающий клиентам скорость:
>>>>while(@row = $sth->fetchrow_array()) {
>> if ($row[4] == 1)
>> exec "ipfw $numipfw add pipe 100 ip
>>from $row[19] to any in"; exit;
>> $numipfw = $numipfw + 10000;Операции работы с базой данных в принципе написаны НЕ ВЕРНО!!! никто не поручиться что при пересборке или модификации базы данных поля сохранят туже последовательность. Поэтому если хочешь работать с массивом ты должен определить какое поле какой индекс имеет.
Я работаю с именами, если это не критично и не парюсь.И в селекте выбирай не звездочку, а то что тебе нужно, последовательность полей, в принципе с этим можно работать по индексам полей, но опять таки при изменении запроса придется всю программу переделывать, и смотреть где поменялся индекс где не поменялся, уж не говоря о том что другой программист запутается.
>Операции работы с базой данных в принципе написаны НЕ ВЕРНО!!! никто не
>поручиться что при пересборке или модификации базы данных поля сохранят туже
>последовательность. Поэтому если хочешь работать с массивом ты должен определить какое
>поле какой индекс имеет.
>Я работаю с именами, если это не критично и не парюсь.
>
>И в селекте выбирай не звездочку, а то что тебе нужно, последовательность
>полей, в принципе с этим можно работать по индексам полей, но
>опять таки при изменении запроса придется всю программу переделывать, и смотреть
>где поменялся индекс где не поменялся, уж не говоря о том
>что другой программист запутается.В чем неверность?
Подскажи как верно.
Проблемма не работает не в селекте, а в exec он не выполняется и всё. как только убираю все exec и ставлю допустим print то всё в шиколаде.
>В чем неверность?
>
>Подскажи как верно.Я уже сказал, в селекте прописывай имена полей которые ты хочешь получить!!
>
>Проблемма не работает не в селекте, а в exec он не выполняется
>и всё. как только убираю все exec и ставлю допустим print
>то всё в шиколаде.
Касаемо ехес!!!exec LIST
exec PROGRAM LIST
The "exec" function executes a system command and
never returns-- use "system" instead of "exec" if
you want it to return. It fails and returns falseА если ничего вообще не происходит значит юзер, который вызывает первый ipwd не имеет прав на изменение правил файрвола
>>Есть скрипт выдающий клиентам скорость:
>>
>>#!/usr/bin/perl -w
>>
>>use DBI;
>>use Time::localtime;
>
> что это такое?Подкгружается базы для скрипта. Я вам скинул только часть скрипта, ту часть которая не работает.
>
>>use POSIX ":sys_wait_h";
>>
>>my $FIRE_SQL_SERVER = "localhost";
>>my $FIRE_SQL_LOGIN = "******";
>>my $FIRE_SQL_PASSWD = "*******";
>>my $FIRE_DBASE = "*******";
>>my $FIRE_AUTH_TABLE = "users";
>>
>>my ($dbh,$sth,$count);
>>$dbh = DBI->connect("DBI:mysql:host=$FIRE_SQL_SERVER;database=$FIRE_DBASE","$FIRE_SQL_LOGIN","$FIRE_SQL_PASSWD") or &error_connection;
>
> а это что такое?
>
>>$sth = $dbh->prepare("SELECT * FROM $FIRE_AUTH_TABLE");
>>$sth->execute ();
>>while(@row = $sth->fetchrow_array()) {
>> if ($row[4] == 1)
>>{
>> $numipfw = (20000+$row[3]);
>>
>>exec "ipfw del $numipfw"; exit;
>
> зачем тут exit?
>
>
>> exec "ipfw $numipfw add pipe 100 ip
>>from any to $row[19] out"; exit;
>> exec "ipfw $numipfw add pipe 100 ip
>>from $row[19] to any in"; exit;
>> $numipfw = $numipfw + 10000;
>>
>>exec "ipfw del $numipfw"; exit;
>> }
>> if ($row[4] == 2)
>>{
>> $numipfw = (20000+$row[3]);
>>
>>exec "ipfw del $numipfw"; exit;
>> exec "ipfw $numipfw add pipe 100 ip
>>from any to $row[19] out"; exit;
>> exec "ipfw $numipfw add pipe 100 ip
>>from $row[19] to any in"; exit;
>> $numipfw = $numipfw + 10000;
>>
>>exec "ipfw del $numipfw"; exit;
>> }
>>
>> }
>> $dbh->disconnect;
>>
>>
>>И он просто не работает. Програмерры скажите пожалусто где трабла?
>
> что говорит?ни говорит ни единой ошибки. просто не выполняе правила фаервола ошибка в exec. Но где именно ошибка не знаю.
вместо exec лучше было бы использовать system, а на стадии тестирования - на printf.
>
>вместо exec лучше было бы использовать system, а на стадии тестирования -
>на printf.printf - Я же написал, что так и делал на принтф работает класно.
Можно подсказать синтаксис system в примере.