оповещение об отсутствии интернета
Re: оповещение об отсутствии интернета
Дмитрий, хотелось бы узнать 1 нюанс, на пинг уходит примерно 3-5 сек, нельзя ли как нить выбросить на экран писюльку, типо "ожидайте ...", ну а потом сама функция. что то не выходит никак (
- Dmitry
- Администратор
- Сообщения: 1073
- Зарегистрирован: 25 май 2011, 09:14
- Откуда: г. Запорожье, Украина
- Контактная информация:
Re: оповещение об отсутствии интернета
В таком случае строку
нужно сместить так, чтобы она была ДО вывода сообщения.
после нее уже
а потом уже весь остальной код...
Код: Выделить всё
print "Content-type: text/html \n\n";
после нее уже
Код: Выделить всё
print "Обождите....";
Re: оповещение об отсутствии интернета
Эффекта не дало, "обождите" пишет после того как выполнилась функция проверки , да вот еще после нажатия на кнопку логин, снова идет проверка (пинг), ну в итоге наблюдается такая затяжка секунд на 12 при авторизации. Вот это уже не гуд(
- Dmitry
- Администратор
- Сообщения: 1073
- Зарегистрирован: 25 май 2011, 09:14
- Откуда: г. Запорожье, Украина
- Контактная информация:
Re: оповещение об отсутствии интернета
в таком случае всю эту "историю" нужно переносить в ту часть кода, где выводится именно форма для авторизации.
в этой части уже не надо будет вывод строки про "контент-тайп" (она в коде выводится ранее)
Код: Выделить всё
if (($result == 4) || ($result == 12))
{
print "<body onLoad=\"javascript:doOnLoad($result, '$loginpath?res=popup2&uamip=$uamip&uamport=$uamport&userurl=$useru
rl&redirurl=$redirurl&timeleft=$timeleft&reply=$replyencoded','$userurldecode', '$redirurldecode', '$timeleft')\" onBlur =
\"javascript:doOnBlur($result)\">\n<center>";
} else {
print "<body onLoad=\"javascript:doOnLoad($result, '$loginpath?res=popup2&uamip=$uamip&uamport=$uamport&userurl=$user
url&redirurl=$redirurl&timeleft=$timeleft&reply=$replyencoded','$userurldecode', '$redirurldecode', '$timeleft')\" onBlur
= \"javascript:doOnBlur($result)\">\n<center>";
}
# In body onLoad above, after $timeleft, add '&reply=$replyencoded to 'standard' cgi script
Re: оповещение об отсутствии интернета
обращение к файлу hotspotlogin происходит неоднократно, а выполнить функцию проверки инета надо только 1 раз, мб можно как нить забить глобальную переменную, и выставлять флажок при 1м запуске скрипта, ну и goto строка ..., чтоб не прогонять эту же процедуру при авторизации?
- Dmitry
- Администратор
- Сообщения: 1073
- Зарегистрирован: 25 май 2011, 09:14
- Откуда: г. Запорожье, Украина
- Контактная информация:
Re: оповещение об отсутствии интернета
$result == 4 и $result == 12
одно условие выполняется для неавторизованных клиентов, второе для тех, кто не смог авторизоваться (например ввел неверный пароль).
в итоге, код попадающий под это условие выводится только тогда, когда выводится именно страница для ввода логина/пароля.
одно условие выполняется для неавторизованных клиентов, второе для тех, кто не смог авторизоваться (например ввел неверный пароль).
в итоге, код попадающий под это условие выводится только тогда, когда выводится именно страница для ввода логина/пароля.
Re: оповещение об отсутствии интернета
ппц, вопрос удалось ускорить посредством добавления "1" в строку $p = $pong->ping($host); -> $p = $pong->ping($host, 1);
теперь обработка пинга ускорилась втрое, заметно конечно что чутка притормаживает но уже куда легче
Код: Выделить всё
use Net::Ping;
# internet connection is available
$host = "8.8.8.8";
#
$pong = Net::Ping->new( $> ? "tcp" : "icmp" );
$p = $pong->ping($host, 1);
if (!($p ne "" && $p == 0))
{
print "Content-type: text/html \n\n";
print "<h2><p align=center>по техническим причинам доступ в интернет временно отсутствует!<br/>приносим свои извенения</p></h2>";
exit;
}
Re: оповещение об отсутствии интернета
В общем ерунда получается, убивает то что скрипт запускаемый на самом сервере прекрасно работает, но как только его переношу в hotspotlogin и пускаю с клиента все идет не так, если пингуемый сервер online или unreachable возврат 0, если invalid возврат пустота.
Самое интересное, что если в строку $pong = Net::Ping->new( $> ? "tcp" : "icmp" ); заменить на $pong = Net::Ping->new("icmp"); то на сервере работает, а на клиенте ошибка.
В общем была принята попытка сделать внешний скрипт с аргументом ввода для проверки online или нет ping.pl:
на сервере оно работает и выдает 1 или 0 на экран
root@anakonda:/usr/lib/cgi-bin# ./ping.pl ya.ru
1
root@anakonda:/usr/lib/cgi-bin#
root@anakonda:/usr/lib/cgi-bin# ./ping.pl ya.ruru
0
root@anakonda:/usr/lib/cgi-bin#
Теперь осталось только из файла hotspotlogin организовать запуск с параметром и принять аргумент $ARVG
чтобы по результату 1 или 0 принять дальнейший ход действий. Писать результаты скрипта в файл считаю неразумным, поскольку нужно выждать (а сколько) результат его выполнения, поэтому считаю лучше передать возврат через $ARGV.
Но тут опять дилемма:
Опять выводится все время 0 либо выше написанный скрипт ошибочен.
Дмитрий, подскажите, мб есть какой вариант решения этого вопроса.
Самое интересное, что если в строку $pong = Net::Ping->new( $> ? "tcp" : "icmp" ); заменить на $pong = Net::Ping->new("icmp"); то на сервере работает, а на клиенте ошибка.
В общем была принята попытка сделать внешний скрипт с аргументом ввода для проверки online или нет ping.pl:
Код: Выделить всё
#!/usr/bin/perl
use Net::Ping;
if ( ! $ARGV[0] ) { print "enter host argument\n"; exit; }
my $p = Net::Ping->new('icmp');
if (! $p->ping($ARGV[0], 2))
{ print "0\n"; }
else
{ print "1\n"; }
$p->close();
exit;
root@anakonda:/usr/lib/cgi-bin# ./ping.pl ya.ru
1
root@anakonda:/usr/lib/cgi-bin#
root@anakonda:/usr/lib/cgi-bin# ./ping.pl ya.ruru
0
root@anakonda:/usr/lib/cgi-bin#
Теперь осталось только из файла hotspotlogin организовать запуск с параметром и принять аргумент $ARVG
чтобы по результату 1 или 0 принять дальнейший ход действий. Писать результаты скрипта в файл считаю неразумным, поскольку нужно выждать (а сколько) результат его выполнения, поэтому считаю лучше передать возврат через $ARGV.
Но тут опять дилемма:
Код: Выделить всё
#!/usr/bin/perl
$host = "8.8.8.8";
exec "ping.pl", $host, @ARGV;
print "content-type: text/html \n\n";
print scalar(@ARGV);
exit;
Дмитрий, подскажите, мб есть какой вариант решения этого вопроса.
- Dmitry
- Администратор
- Сообщения: 1073
- Зарегистрирован: 25 май 2011, 09:14
- Откуда: г. Запорожье, Украина
- Контактная информация:
Re: оповещение об отсутствии интернета
я же предлагал уже ранее - в крон добавить запуск простого bash-скрипта, который будет просто писать ноль или единицу в специальный файл, а hotspotlogin будет просто считывать этот файлик и проверять, что в нем
Re: оповещение об отсутствии интернета
вариант с кроном неочень подходит, хотелось бы скрипт запускать ondemand (по запросу), а идею которую я предлагаю можно как то довести, скрипт пинга рабочий, единственное что надо, дак это запустить его хоть этим system("file", "arg"); и передать параметры, и всеDmitry писал(а):я же предлагал уже ранее - в крон добавить запуск простого bash-скрипта, который будет просто писать ноль или единицу в специальный файл, а hotspotlogin будет просто считывать этот файлик и проверять, что в нем
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость