Перейти к содержимому
Калькуляторы

Опубликована Процедура блокировки некошерной инфо

Пришло

Внимание!

 

Напоминаем, что с 11:00 МСК 1.09.2014 будет закрыта возможность получения выгрузки реестра запрещенных сайтов в формате 1.0 как в ручном режиме, так и с использованием веб-сервиса - останется только возможность получения выгрузки в актуальном формате 2.0. Также будет отключен устаревший веб-сервис http://www.zapret-info.gov.ru/services/OperatorRequest/?wsdl

 

Подробная информация об этом была размещена в Памятке оператору связи (http://vigruzki.rkn.gov.ru/docs/description_for_operators_actual.pdf)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот что пишет после запуска доработанного скрипта:

Добавил и сюда больше дебага :)

Вообще, это какая-то ошибка в сети между вами и API или в ответе сервера, какая именно - хз пока

 

Too late to run INIT block at /usr/local/lib/perl5/site_perl/5.18/mach/Net/DNS.pm line 209.

Попробуйте обновить Net/DNS: https://rt.cpan.org/Public/Bug/Display.html?id=96119

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Попробуйте обновить Net/DNS: https://rt.cpan.org/...y.html?id=96119

Там опять эту заявку открыли, в версии 0.79 эта же ошибка вылезла у людей, буду наблюдать за процессом решения.

Распишите пожалуйста что для корректной работы скрипта нужно? Какие оснастки необходимы для Перла вообще, с чем необходимо собрать openssl? Может у меня чего-то не хватает.

А можно еще прикрутить вывод в какой-то лог о результатах работы скрипта, например о времени запуска, версии дампа (свежее, старее), сколько позиций добавлено, сколько удалено, ну и ошибки, если они были? Можно файл лога указать в конфиге, а скрипт уже будет писать в него, взяв информацию о его расположении оттуда.

Да, и еще вот такое пишет в конце удачной работы:

Not a HASH reference at /usr/local/lib/perl5/5.18/Net/SMTP.pm line 367.

Что это означает?

Изменено пользователем NeXuSs

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А у меня все плавно прошло.

Поменял адреса WSDL, заменил getLastDumpDate на getLastDumpDateEx, добавил номер версию к sendRequest и все.

 

 

Скрипт на Perl, должен быть в кодировке UTF-8:

 

 

#!/usr/bin/perl -w

use strict;
use warnings;
use vars qw ($dbh $soap %modes $options %id %var);
use utf8;
use Encode;
use XML::LibXML;
use DBI;
use SOAP::Lite;
use MIME::Base64;
use Data::Dumper;
$Data::Dumper::Useqq = 1;
{
 no warnings 'redefine';
 sub Data::Dumper::qquote
 {
   my $s = shift;
   return "'$s'";
 }
}

$| = 1;
binmode(STDIN, ':utf8');
binmode(STDOUT,':utf8');
binmode(STDERR,':utf8');

$modes{$_} = ($_ ~~ [split(' ',join(' ',@ARGV))]) ? 1 : 0 foreach (qw(interactive debug));
my @clock = localtime(time); $clock[5] += 1900; $clock[4] += 1;
$var{'clock'} = sprintf('%6$04d-%5$02d-%4$02dT%3$02d:%2$02d:%1$02d',@clock);
$var{'timestamp'} = time;
$var{'source'} = "$0 pid#$$ uid $</$>";
$var{'template'} = join('',<DATA>);
$dbh = DBI->connect("DBI:mysql:dbname:localhost", "user", "password")
      or die("* Fail on connect to database: $DBI::errstr");
$dbh->{'mysql_enable_utf8'} = 1;
$dbh->do("set NAMES utf8");
$options = $dbh->selectall_hashref("select * from OPTIONS", [qw(SECTION NAME)])
   or die("* Fail on retrieve options: $DBI::errstr");
&proc_options($options);
my $stage = &proc_prepare();
unless ($stage)
{
print "$var{'clock'}: * Unknown stage, quit\n";
}
else
{
$soap = SOAP::Lite->service($options->{'PROC'}->{'WSDL'})
	or dir("* Fail on connect to web-service");
($var{'LastDumpDate'}) = $soap->getLastDumpDateEx;
$var{'timer'} = time;
while ((time-$var{'timer'}) < (($options->{'PROC'}->{'TIMEOUT'}||3600)+($options->{'PROC'}->{'DELAY'}||60)))
{
	$stage = &getrow('REQUESTS',$id{'request'});
	if (!defined $stage)
	{
		print "$var{'clock'}: * Undefined stage, cancel\n";
		last;
	}
	elsif ($stage->{'STAGE'} eq 'INIT')
	{
		my ($req,$sig) = &proc_init();
		$dbh->do("update REQUESTS set STAGE=?, STAGE_COUNT=0, STAGE_TIME=0, LAST_DATE=?, SEND_FILE=?, SEND_SIGN=? where ID = $id{'request'}", undef, ('SEND',$var{'LastDumpDate'},$req,$sig));
	}
	elsif ($stage->{'STAGE'} eq 'SEND')
	{
		my $sid = &proc_send($stage->{'SEND_FILE'}, $stage->{'SEND_SIGN'});
		last unless ($sid);
		#sleep($options->{'PROC'}->{'DELAY'}||60);
	}
	elsif ($stage->{'STAGE'} eq 'RECEIVE')
	{
		my $res = &proc_receive($stage->{'SVC_SESSION'});
		last;
	}
	else
	{
		print "$var{'clock'}: * Invalid stage $stage->{'STAGE'}, cancel\n";
		last;
	}
}
unless ((time-$var{'timer'}) < (($options->{'PROC'}->{'TIMEOUT'}||3600)+($options->{'PROC'}->{'DELAY'}||60)))
{
	print "$var{'clock'}: * Timeout\n";
	$dbh->do("update REQUESTS set STAGE=? where ID = $id{'request'}", undef, ('FAIL'));
}
}
$dbh->disconnect;


sub _str($)
{
my $str = shift;
return utf8::is_utf8($str) ? $str : decode_utf8($str);
}

sub getrow($;@)
{
my $table = shift;
my @key = $dbh->primary_key(undef,undef,$table);
return unless (@key);
return unless ($#key==$#_);
my $sql = "select * from $table where " . join(' and ', map {"$_ = ?"} @key);
my $row = $dbh->selectrow_hashref($sql, undef, @_);
return $row;
}

sub proc_options($)
{
my $hash = shift;
my $cnt = grep {ref($_)} (values(%$hash));
if ($cnt)
{
	while (my ($k,$v) = each %$hash)
	{
		&proc_options($v);
		$hash->{$k} = $v->{'VALUE'} if (exists($v->{'VALUE'}));
	}
	return;
}
$hash->{'VALUE'} = $hash->{'VALUE_'.$hash->{'DATATYPE'}};
delete $hash->{$_} foreach(grep {/VALUE_/} keys(%$hash));
delete $hash->{$_} foreach(qw(SECTION NAME DISPLAY));
}

sub proc_prepare()
{
my $sql = "select * from REQUESTS where STAGE in ('INIT','SEND','RECEIVE')";
my $row = $dbh->selectrow_hashref($sql);
unless ($row)
{
	$dbh->do("insert into REQUESTS (CLOCK,SOURCE,STAGE) values (?,?,?)", undef, ($var{'clock'}, $var{'source'}, 'INIT'));
	$row = $dbh->selectrow_hashref($sql);
}
$id{'request'} = $row->{'ID'};
return $row->{'STAGE'} if ($row);
}

sub proc_init()
{
my $data = $var{'template'};
my $fields = { %{$options->{'PROVIDER'}}, 'CLOCK'=>sprintf('%6$04d-%5$02d-%4$02dT%3$02d:%2$02d:%1$02d',@clock) . '.000+04:00' };
$data =~ s{%([-\w\d]+)%}{$fields->{$1}||''}egs;
$data =~ s/\n/\r\n/g;
my ($req,$sig);
{
	open FILE, ">", "/tmp/request.xml";
	binmode FILE;
	print FILE encode('cp1251',$data);
	close FILE;
	system("$options->{'PROC'}->{'OPENSSL'} smime -sign -signer $options->{'PROC'}->{'CERT'} -outform DER -in /tmp/request.xml -out /tmp/request.sig");
}
{
	open FILE, "/tmp/request.xml";
	binmode FILE;
	$req = join('',<FILE>);
	close FILE;
	unlink "/tmp/request.xml";
}
{
	open FILE, "/tmp/request.sig";
	binmode FILE;
	$sig = join('',<FILE>);
	close FILE;
	unlink "/tmp/request.sig";
}
return ($req,$sig);
}

sub proc_send($$)
{
my $req = shift;
my $sig = shift;
my @res = $soap->sendRequest($req, $sig, '2.0');
$res[$_] = &_str($res[$_]) foreach (0..$#res);
if (@res)
{
	if ($res[0] eq 'true')
	{
		$dbh->do("update REQUESTS set STAGE=?, STAGE_TIME=?, SVC_RESULT=?, SVC_COMMENT=?, SVC_SESSION=? where ID = $id{'request'}", undef, ('RECEIVE',time-$var{'timer'},$res[0],$res[1],$res[2]));
		return $res[2];
	}
	elsif ($res[0] eq 'false')
	{
		$dbh->do("update REQUESTS set STAGE=?, STAGE_TIME=?, SVC_RESULT=?, SVC_COMMENT=? where ID = $id{'request'}", undef, ('FAIL',time-$var{'timer'},$res[0],$res[1]));
	}
	else
	{
		$dbh->do("update REQUESTS set STAGE=?, STAGE_TIME=?, SVC_RESULT=?, SVC_COMMENT=? where ID = $id{'request'}", undef, ('FAIL',time-$var{'timer'},'false',$res[1]));
	}
}
else
{
	$dbh->do("update REQUESTS set STAGE=?, STAGE_TIME=? where ID = $id{'request'}", undef, ('FAIL',time-$var{'timer'}));
}
}

sub proc_receive($)
{
my $sid = shift;
my @res = $soap->getResult($sid);
$res[$_] = &_str($res[$_]) foreach (0..$#res);
if (@res)
{
	if ($res[0] eq 'true')
	{
		my $data = decode_base64($res[1]);
		print "$var{'clock'}: OK, ZIP-file length " . length($data) . "\n";
		$dbh->do("update REQUESTS set STAGE=?, STAGE_COUNT=STAGE_COUNT+1, STAGE_TIME=?, RES_RESULT=?, RES_DATA=? where ID = $id{'request'}", undef, ('DONE',time-$var{'timer'},$res[0],$data));
		#open FILE, "/tmp/reg_dump.zip";
		#binmode FILE;
		#print FILE $data;
		#close FILE;
		#if (-e "/tmp/reg_dump.zip")
		#{
		#	system("/usr/local/bin/unzip -o /tmp/reg_dump.zip -d /tmp");
		#}
	}
	elsif (($res[0] eq 'false') && ($res[1] eq 'запрос обрабатывается'))
	{
		print "$var{'clock'}: Not OK: $res[1]\n";
		$dbh->do("update REQUESTS set STAGE=?, STAGE_COUNT=STAGE_COUNT+1, STAGE_TIME=?, RES_RESULT=?, RES_COMMENT=? where ID = $id{'request'}", undef, ('RECEIVE',time-$var{'timer'},$res[0],$res[1]));
	}
	else
	{
		print "$var{'clock'}: Service fail, stop\n";
		$dbh->do("update REQUESTS set STAGE=?, STAGE_COUNT=STAGE_COUNT+1, STAGE_TIME=?, RES_RESULT=?, RES_COMMENT=? where ID = $id{'request'}", undef, ('FAIL',time-$var{'timer'},'false',"Response: ".Dumper(\@res)));
	}
}
else
{
	print "$var{'clock'}: Service not response, retry\n";
	$dbh->do("update REQUESTS set STAGE_COUNT=STAGE_COUNT+1, STAGE_TIME=?, RES_RESULT=?, RES_COMMENT=? where ID = $id{'request'}", undef, (time-$var{'timer'},'false','Service not response'));
}
}


__DATA__
<?xml version="1.0" encoding="windows-1251"?>
<request>
<requestTime>%CLOCK%</requestTime>
<operatorName>%TITLE%</operatorName>
<inn>%INN%</inn>
<ogrn>%OGRN%</ogrn>
<email>%EMAIL%</email>
</request>

 

 

Скрипт работает в паре с базой данных.

База данных должна быть такая:

 

 

CREATE TABLE IF NOT EXISTS `OPTIONS` (
 `SECTION` varchar(80) NOT NULL COMMENT 'Секция параметра.',
 `NAME` varchar(80) NOT NULL COMMENT 'Наименование параметра.',
 `DATATYPE` enum('BOOLEAN','INTEGER','FLOAT','DATE','TIMESTAMP','TEXT','BLOB','URL','null') NOT NULL COMMENT 'Тип данных параметра.',
 `VALUE_BOOLEAN` tinyint(3) unsigned DEFAULT NULL COMMENT 'Значение параметра - логическое.',
 `VALUE_INTEGER` int(11) DEFAULT NULL COMMENT 'Значение параметра - целочисленное.',
 `VALUE_FLOAT` float DEFAULT NULL COMMENT 'Значение параметра - вещественное.',
 `VALUE_DATE` datetime DEFAULT NULL COMMENT 'Значение параметра - дата/время.',
 `VALUE_TIMESTAMP` timestamp NULL DEFAULT NULL COMMENT 'Значение параметра - unix timestamp.',
 `VALUE_TEXT` text COMMENT 'Значение параметра - текст.',
 `VALUE_BLOB` blob COMMENT 'Значение параметра - данные.',
 `VALUE_URL` varchar(1000) DEFAULT NULL COMMENT 'Значение параметра - ссылка.',
 `DISPLAY` varchar(200) DEFAULT NULL COMMENT 'Текстовое представление параметра.',
 `DESCRIPTION` varchar(200) DEFAULT NULL COMMENT 'Описание параметра.',
 PRIMARY KEY (`SECTION`,`NAME`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Параметры и настройки для автоматической работы с реестром.';

INSERT INTO `OPTIONS` (`SECTION`, `NAME`, `DATATYPE`, `VALUE_BOOLEAN`, `VALUE_INTEGER`, `VALUE_FLOAT`, `VALUE_DATE`, `VALUE_TIMESTAMP`, `VALUE_TEXT`, `VALUE_BLOB`, `VALUE_URL`, `DISPLAY`, `DESCRIPTION`) VALUES
('PROC', 'CERT', 'URL', NULL, NULL, NULL, NULL, NULL, NULL, NULL, '/data/zapret-info/key/provider.pem', '/data/zapret-info/key/provider.pem', 'Файл ЭЦП для подписи'),
('PROC', 'DELAY', 'INTEGER', NULL, 60, NULL, NULL, NULL, NULL, NULL, NULL, '60', 'Задержка перед опросом сервера'),
('PROC', 'LOG', 'URL', NULL, NULL, NULL, NULL, NULL, NULL, NULL, '/data/zapret-info/log/', '/data/zapret-info/log/', 'Каталог для журналов'),
('PROC', 'OPENSSL', 'URL', NULL, NULL, NULL, NULL, NULL, NULL, NULL, '/data/zapret-info/bin/openssl', '/data/zapret-info/bin/openssl', 'Размещение OpenSSL'),
('PROC', 'TIMEOUT', 'INTEGER', NULL, 3600, NULL, NULL, NULL, NULL, NULL, NULL, '3600', 'Таймаут ответа сервера'),
('PROC', 'WEBSVC', 'URL', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://vigruzki.rkn.gov.ru/services/OperatorRequest/', 'http://vigruzki.rkn.gov.ru/services/OperatorRequest/', 'Адрес веб-сервиса'),
('PROC', 'WSDL', 'URL', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://vigruzki.rkn.gov.ru/services/OperatorRequest/?wsdl', 'http://vigruzki.rkn.gov.ru/services/OperatorRequest/?wsdl', 'Адрес WSDL-схемы'),
('PROVIDER', 'ASN', 'INTEGER', NULL, 56580, NULL, NULL, NULL, NULL, NULL, NULL, '12345', 'Номер автономной системы'),
('PROVIDER', 'EMAIL', 'URL', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'email', 'email', 'Электронный адрес'),
('PROVIDER', 'INN', 'TEXT', NULL, NULL, NULL, NULL, NULL, '123', NULL, NULL, '123', 'ИНН'),
('PROVIDER', 'KPP', 'TEXT', NULL, NULL, NULL, NULL, NULL, '123', NULL, NULL, '123', 'КПП'),
('PROVIDER', 'OGRN', 'TEXT', NULL, NULL, NULL, NULL, NULL, '123', NULL, NULL, '123', 'ОГРН'),
('PROVIDER', 'TITLE', 'TEXT', NULL, NULL, NULL, NULL, NULL, 'Провайдер', NULL, NULL, 'Провайдер', 'Наименование оператора'),
('PROVIDER', 'WWW', 'URL', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Сайт', 'Сайт', 'Официальный сайт'),
('STATIC', 'LAST-DUMP-DATE', 'DATE', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Дата последнего обновления выгрузки из реестра'),
('STATIC', 'LAST-PROC-DATE', 'DATE', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Дата последнего запуска обновления реестра');

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Здравствуйте уважаемые товарищи, у меня есть готовый "продукт" по выгрузке версии 2.0. У нас работает на freebsd. Сегодня подготовлю и завтра утром выложу в архиве. Скрипты на perl. На самом деле я добавил одну строчку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Здравствуйте уважаемые товарищи, у меня есть готовый "продукт" по выгрузке версии 2.0. У нас работает на freebsd. Сегодня подготовлю и завтра утром выложу в архиве. Скрипты на perl. На самом деле я добавил одну строчку.

 

Версия 2.0 ? С блэкджеком и шлю.ами ? Дайте две! :)

Выкладывай!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Версия 2.0 ? С блэкджеком и шлю.ами ? Дайте две! :)

Выкладывай!

С чем?

В общем скидывать не стал архив, тут инструкция где брали до меня

 

Я извиняюсь за то что не смог скрыть ссылку, в скрипте download.pl добавил лишь строчку "2.0"

my @sendresult = $service->sendRequest(
           $xmlreq,
           $xmlreqsig,
           "2.0" #<--Вот тут

и запустил, выгрузилось всё как надо.

Если что отпишите плз заработало или нет.

Изменено пользователем fint07

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я извиняюсь за то что не смог скрыть ссылку, в скрипте download.pl добавил лишь строчку "2.0"

my @sendresult = $service->sendRequest(
           $xmlreq,
           $xmlreqsig,
           "2.0" #<--Вот тут

 

xml-parser.pl сильно надо править? старый прожует новый формат выгрузки ? Или просто добавить новый обработчик

if ($key2 eq хернякакаято)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я не правил его вообще, в перле я не силён. Поправил только то что написал, и выгрузилось, сравнил с примером в памятке, всё точно так как им и надо, я надеюсь что сам ничего не упустил.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Коллеги, а у меня тестовый УРЛ (http://vigruzki.rkn.gov.ru/services/OperatorRequestTest?wsdl) возвращает тестовый файл с formatVersion="2.0", а боевой (http://vigruzki.rkn.gov.ru/services/OperatorRequest?wsdl) - "запрос обрабатывается". Куда копать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Коллеги, а у меня тестовый УРЛ (http://vigruzki.rkn.gov.ru/services/OperatorRequestTest?wsdl) возвращает тестовый файл с formatVersion="2.0", а боевой (http://vigruzki.rkn.gov.ru/services/OperatorRequest?wsdl) - "запрос обрабатывается". Куда копать?

В область увеличения паузы между запросом и началом выгрузки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я не правил его вообще, в перле я не силён. Поправил только то что написал, и выгрузилось, сравнил с примером в памятке, всё точно так как им и надо, я надеюсь что сам ничего не упустил.

А каким парсером пользуетесь, тем, который в ссылке, приведенной вами выше, находится?

Изменено пользователем NeXuSs

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вообще пока ничего не менял. Последняя выгрузка:

Sep  1 15:02 out-2014-09-01T15:02:01.000+08:00.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вообще пока ничего не менял. Последняя выгрузка:

Sep  1 15:02 out-2014-09-01T15:02:01.000+08:00.zip

 

Письмо от Роскомнадзора:

Внимание! 

Напоминаем, что с 11:00 МСК 1.09.2014 будет закрыта возможность получения выгрузки реестра запрещенных сайтов в формате 1.0 как в ручном режиме, так и с использованием веб-сервиса - останется только возможность получения выгрузки в актуальном формате 2.0. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Письмо от Роскомнадзора: ...

Сори, не гулядел в логе:

-------------------------------------
Mon Sep  1 17:01:00 KRAT 2014
got new LastDumpDate version 1409558520000, try send request
error request не указана версия формата
codestring file not found
Import complette.

Добавил в метод GetRequest аттрибут-версию. Вроде бы, работает.

з.ы. парсер старый

Изменено пользователем Dimic

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я не правил его вообще, в перле я не силён. Поправил только то что написал, и выгрузилось, сравнил с примером в памятке, всё точно так как им и надо, я надеюсь что сам ничего не упустил.
А каким парсером пользуетесь, тем, который в ссылке, приведенной вами выше, находится?

Парсер тот что в примере я скинул и не менял его. Вот сейчас старая версия не выгружается, новая всё ок.

Изменено пользователем fint07

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

   try // попытаться произвести запрос на получение РЗС
   {
       // подключиться к веб-службе РЗС по протоколу SOAP
       $rzs = new SoapClient ($wsdl_url);
       // произвести запрос
       $response = $rzs -> sendRequest
       (
            array
            (
               'requestFile'   => $request,    // запрос
               'signatureFile' => $sign,       // подпись
               'dumpFormatVersion' => '2.0',   // версия выгрузки
            )
       );
       // сохранить уникальный код запроса в отдельную переменную
       $request_code = $response -> code;
   }

 

Вот таким запросом я получаю дамп formatVersion="2.0".

Благодарю, все получилось. :)

 

Спасибо, мне тоже помогло :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пролистал свежеполученный dump v2, не нашел ни одного ipSubnet. Кривизна кодировок url сохранилась. Будем ждать ? Они кстати здорово меня купили, я в отпуске, 1-го с утра посмотрел - всё работает, а к вечеру только задумался О... Пришлось в 22 местного кривить скрипты..

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Дайте ссылку на рабочий парсер, я что то не пойму, парсер ip-abuse.txt не создает.

 

Удалось получить вот такую надпись: End tag mismatch (domain != url) [Ln: 1, Col: 507957]

 

XML-битый?

Изменено пользователем Korgoth

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

/home/rzs# ./zapret.pl
Global symbol "@result" requires explicit package name at ./zapret.pl line 232.
Global symbol "@result" requires explicit package name at ./zapret.pl line 232.
Global symbol "@result" requires explicit package name at ./zapret.pl line 234.
Global symbol "@result" requires explicit package name at ./zapret.pl line 237.
Execution of ./zapret.pl aborted due to compilation errors.

 

кто подскажет в чем дело?

 

222 sub getLastDumpDate
223 {
224     eval {
225 	my $soap= SOAP::Lite->service( $api_url );
226 	my @result = $soap->getLastDumpDateEx();
227    };
228    if( $@ ) {
229 	print "Error while getLastDumpDate: ".$@."\n";
230	exit;
231     }
232    if( !defined($result[0]) || $result[0] !~ /^(\d+)$/ ) {
233	print "Can't get lastDumpDateEx!";
234	print Dumper(@result);
235	exit;
236    } else {
237	my $stamp = $result[0] / 1000;
238	return $stamp;
239    }
240}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Объявление массива за скобки вынесите. Скобки ограничивают область видимости переменной.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а можно с примером, не силен в перле....:(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а можно с примером, не силен в перле....:(

Мона. Только завтра. Со смарта это делать - гнусно и печально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

224     eval {
225 	my $soap= SOAP::Lite->service( $api_url );
226 	my @result = $soap->getLastDumpDateEx();
227    };

в результате @result - локальна внутри eval

а вы её как "глобальную" используете

 

как вариант

sub getLastDumpDate
{
my @result;
eval {
  my $soap= SOAP::Lite->service( $api_url );
  @result = $soap->getLastDumpDateEx();
};

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.