оповещение об отсутствии интернета

Обнаруженные вами ошибки в работе программы, предложения по ее улучшению
Dazzler
Сообщения: 66
Зарегистрирован: 30 июл 2011, 02:31
Контактная информация:

Re: оповещение об отсутствии интернета

Сообщение Dazzler »

Дмитрий, хотелось бы узнать 1 нюанс, на пинг уходит примерно 3-5 сек, нельзя ли как нить выбросить на экран писюльку, типо "ожидайте ...", ну а потом сама функция. что то не выходит никак (
Аватара пользователя
Dmitry
Администратор
Сообщения: 1073
Зарегистрирован: 25 май 2011, 09:14
Откуда: г. Запорожье, Украина
Контактная информация:

Re: оповещение об отсутствии интернета

Сообщение Dmitry »

В таком случае строку

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

print "Content-type: text/html \n\n";
нужно сместить так, чтобы она была ДО вывода сообщения.
после нее уже

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

print "Обождите....";
а потом уже весь остальной код...
Dazzler
Сообщения: 66
Зарегистрирован: 30 июл 2011, 02:31
Контактная информация:

Re: оповещение об отсутствии интернета

Сообщение Dazzler »

Эффекта не дало, "обождите" пишет после того как выполнилась функция проверки , да вот еще после нажатия на кнопку логин, снова идет проверка (пинг), ну в итоге наблюдается такая затяжка секунд на 12 при авторизации. Вот это уже не гуд(
Аватара пользователя
Dmitry
Администратор
Сообщения: 1073
Зарегистрирован: 25 май 2011, 09:14
Откуда: г. Запорожье, Украина
Контактная информация:

Re: оповещение об отсутствии интернета

Сообщение Dmitry »

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

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

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

в этой части уже не надо будет вывод строки про "контент-тайп" (она в коде выводится ранее)
Dazzler
Сообщения: 66
Зарегистрирован: 30 июл 2011, 02:31
Контактная информация:

Re: оповещение об отсутствии интернета

Сообщение Dazzler »

обращение к файлу hotspotlogin происходит неоднократно, а выполнить функцию проверки инета надо только 1 раз, мб можно как нить забить глобальную переменную, и выставлять флажок при 1м запуске скрипта, ну и goto строка ..., чтоб не прогонять эту же процедуру при авторизации?
Аватара пользователя
Dmitry
Администратор
Сообщения: 1073
Зарегистрирован: 25 май 2011, 09:14
Откуда: г. Запорожье, Украина
Контактная информация:

Re: оповещение об отсутствии интернета

Сообщение Dmitry »

$result == 4 и $result == 12
одно условие выполняется для неавторизованных клиентов, второе для тех, кто не смог авторизоваться (например ввел неверный пароль). :)
в итоге, код попадающий под это условие выводится только тогда, когда выводится именно страница для ввода логина/пароля. ;)
Dazzler
Сообщения: 66
Зарегистрирован: 30 июл 2011, 02:31
Контактная информация:

Re: оповещение об отсутствии интернета

Сообщение Dazzler »

ппц, вопрос удалось ускорить посредством добавления "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;
	}
теперь обработка пинга ускорилась втрое, заметно конечно что чутка притормаживает но уже куда легче
Dazzler
Сообщения: 66
Зарегистрирован: 30 июл 2011, 02:31
Контактная информация:

Re: оповещение об отсутствии интернета

Сообщение Dazzler »

В общем ерунда получается, убивает то что скрипт запускаемый на самом сервере прекрасно работает, но как только его переношу в hotspotlogin и пускаю с клиента все идет не так, если пингуемый сервер online или unreachable возврат 0, если invalid возврат пустота.
Самое интересное, что если в строку $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;
на сервере оно работает и выдает 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.
Но тут опять дилемма:

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

#!/usr/bin/perl

$host = "8.8.8.8";
exec "ping.pl", $host, @ARGV;
print "content-type: text/html \n\n";
print scalar(@ARGV);
exit;
Опять выводится все время 0 либо выше написанный скрипт ошибочен.
Дмитрий, подскажите, мб есть какой вариант решения этого вопроса.
Аватара пользователя
Dmitry
Администратор
Сообщения: 1073
Зарегистрирован: 25 май 2011, 09:14
Откуда: г. Запорожье, Украина
Контактная информация:

Re: оповещение об отсутствии интернета

Сообщение Dmitry »

я же предлагал уже ранее - в крон добавить запуск простого bash-скрипта, который будет просто писать ноль или единицу в специальный файл, а hotspotlogin будет просто считывать этот файлик и проверять, что в нем
Dazzler
Сообщения: 66
Зарегистрирован: 30 июл 2011, 02:31
Контактная информация:

Re: оповещение об отсутствии интернета

Сообщение Dazzler »

Dmitry писал(а):я же предлагал уже ранее - в крон добавить запуск простого bash-скрипта, который будет просто писать ноль или единицу в специальный файл, а hotspotlogin будет просто считывать этот файлик и проверять, что в нем
вариант с кроном неочень подходит, хотелось бы скрипт запускать ondemand (по запросу), а идею которую я предлагаю можно как то довести, скрипт пинга рабочий, единственное что надо, дак это запустить его хоть этим system("file", "arg"); и передать параметры, и все
Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость