Автор Тема: Помогите найти ошибку... устал...  (Прочитано 3364 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Skif

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 187
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Помогите найти ошибку... устал...
« : 07 Сентября 2005, 11:01:46 »
Устал искать уже который день ошибку.
Вот код на чтение конфига:

Цитировать


# ============================================================
#       SUBS   
# ============================================================
sub read_conf {

my $conf = shift @_;
my $var = shift @_;
if ($var =~\'pathtosave_folder\') {
   print "PATH TO SAVE !!!!";
}
my $result;
my $logfile = \'E:\\logfile.log\';
open (CONF, "<$conf") || &logfile($logfile, "Can not open config file ( $conf ). File unaviable or you haven\'t permissions!\\n");
my $line;
while ($line = ) {
   if (($line!~ m/^[\\s\\t++]\\#/g) and ($line!~ m/^#/g) and ($line!~ m/^[\\s\\t++]\\n/g) and ($line!~ m/^[\\s\\t++]#/g) and ($line!~ m/^\\n/g)) {
      $line =~ s/[\\s\\t++]//g;
      chomp $line;
      ($param,$arg) = split (/=/,$line);
      $result = $arg if $param eq $var;
   }
}
close (CONF);
return $result;
}



Вот содержимое самого конфига:
Цитировать

####################################################
#
# Общие конфигурационные настройки для соединения и т.д.
#
####################################################
#
# CONFIG FONDU
#
# адресс SMTP сервера
smtpserver = 10.0.43.1
# порт SMTP сервера
smtpport = 25
# адрес POP3 сервера
pop3server = 10.0.43.1
# порт POP3 сервера
pop3port = 110
# имя пользователя для забора почты с POP3 сервера
pop3user = urbd.fishka
# пароль пользователя для забора почты с POP3 сервера
pop3pass = olk
# забор писем только от пользователя где в поле FROM стоит
# указааный адрес и отправка ответных писем только на этот адрес
# Внимание! Обратите внимание на соответствие адресов откуда
# получается и куда отправляется почта с их заговками (тема письма)
# наче могут быть конфликты при обмене!
from = urbd.fondu@xxx.com
# отправлять почту с обменом c адреса на адрес
mailfrom = urbd.fishka@xxx2.com
# ошибки и отчеты отправлять на адрес
mailtoreport = skif@xxx.ua
# Подстрока, которая должна присутствовать в поле Subject письма,
# забираемого с POP3 сервера
subject = URBD-FONDU
# Папка куда будут сохраняться получаемые вложения (с указанием имени файла)
pathtosave_folder = D:\\1c_dbs\\Buch\\1sbukr\\pc\\
pathtosave_files = FONF.zip
# Папка откуда будут браться отправляемые вложения (в имени файла не должно
# быть запятых!!!)
pathtosend_folder = D:\\1c_dbs\\Buch\\1sbukr\\cp\\
pathtosend_files = FONE.zip
#################################################
# Настройки непосредственно для 1С
# ================= for 1C ====================
#
# Путь к исполняемому файлу 1С
pathto1c = C:\\Progra~1\\1Cv77adm\\bin\\1cv7sa.exe
# Имя базы 1С
name1cbase = FONDU-FISHKA
# Расположение базы 1С (путь)
path1cbase = D:\\1c_dbs\\Buch\\1sbukr
# Путь к временной папке
pathtotmp = E:\\scripts\\1c_exch\\TMP
# расположение PRM файла для пакетного режима 1С
prmfile = E:\\scripts\\1c_exch\\tmp\\fishka_fondu.prm
# Расположение файла отчета о работе пакетного режима
logfile = E:\\scripts\\1c_exch\\log\\fishka_fondu.log
# Имя пользователя на базу 1С
user1c = URBD
# пароль пользователя на базу 1С
pass1c = urbd


А вот что дает вывод с чтения всех переменных(у меня ложиться в лог и шлеться по почте отчет):

Цитировать

Result of autoexchange in the attache. Date Wed Sep _7 09:31:34 2005

Wed Sep _7 09:31:24 2005 Variable for URBD script:

________________CONFIG : e:\\scripts\\1c_exch\\etc\\urbd.conf.fondu
________________POP3 state : 1
________________SMTP state: 1



________________POP3 Server : 10.0.43.1
________________SMTP Server : 10.0.43.1
________________POP3 PORT : 110
________________SMTP port : 25
________________POP3 User urbd.fishka
________________POP3 Password olk
________________POP3 Authentificate mode : _PASS
________________MAIL recive From : urbd.fondu@xxx.com
________________Mail From : urbd.fishka@xxx2.com
________________MAIL to report : skif@xxx.ua
________________MAIL Subject : URBD-FONDU
________________Path to save (folder) : /tmp
________________Parg to send(folder): /var
________________FILES to send : tmp.zip
________________FILES to save : tmp.zip
________________PATH to 1C : C:\\Progra~1\\1Cv77adm\\bin\\1cv7sa.exe
________________Name 1C base : !Autoprofit
________________Path to 1C base : D:\\1c_dbs\\Buch\\1sbukr
________________Path to TEMP folder: E:\\scripts\\1c_exch\\TMP
________________Path to PRM file : E:\\scripts\\1c_exch\\tmp\\fishka_fondu.prm
________________Path to logfile : E:\\scripts\\1c_exch\\log\\fishka_fondu.log
________________USER 1C : URBD
________________Password to 1C : urbd
________________Path to logfile 1C : E:\\scripts\\1c_exch\\log\\fishka_fondu.log.exch.log

Wed Sep _7 09:31:24 2005 All main variables checked!


Самые интересные параметры: pathtosend_folder, pathtosave_folder есть еще парочка, но понять хотя бы их.
Как видно из конфига они имеет следующий вид(чтение в коде)

my $pathtosave = &read_conf($conf,\'pathtosave_folder\') || \'/tmp\';
$conf_var = "$conf_var\\t\\tPath to save (folder) : $pathtosave\\n";

my $pathtosend = &read_conf($conf,\'pathtosend_folder\') ||\'/var\';
$conf_var = "$conf_var\\t\\tParg to send(folder): $pathtosend\\n";

В теории они должны были бы принять значения
D:\\1c_dbs\\Buch\\1sbukr\\pc\\
D:\\1c_dbs\\Buch\\1sbukr\\cp\\
Как прописано в конфиге:

pathtosave_folder = D:\\1c_dbs\\Buch\\1sbukr\\pc\\
pathtosend_folder = D:\\1c_dbs\\Buch\\1sbukr\\cp\\

Но шиш. Они принимают дефолтные значения, пото му что во всех случаях кроме данного $read_conf возвращает параметр, а в этом нет :( Не могу понять почему.
Пните, что упускаю из виду...
Всё будет хорошо - я договорился!

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Помогите найти ошибку... устал...
« Ответ #1 : 07 Сентября 2005, 11:37:22 »
Намудрили Вы немного с чтением конфига. :) на мой взгляд. он сам просится в хэш.
попробуйте нечто вроде этого:my %conf=();
print header();
open (INDEX,"<","../data/conf.txt") or die "невозможно прочесть conf.txt: $!";
flock(INDEX,LOCK_SH); while($line=){
    next if ($line=~ m!^#!g);
    my ($k,$v)  = split(/ = /,$line);
    $conf{$k}=$v;
    } flock(INDEX,LOCK_UN); close(INDEX);

хэш честно отображает все параметры. только что попробовала. ;)
пока-пока. :)

Оффлайн Skif

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 187
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Помогите найти ошибку... устал...
« Ответ #2 : 07 Сентября 2005, 19:03:54 »
Сори, что задержался с ответом - гонял по городу и ругался.

Проблема решилась, оказалось (о стыдно то как...) при вызове скрипты указывалось чтение другого конфига, тобишь:
server.pl -conf=e:\\script\\1c_exch\\etc\\urbd.conf
а надо было, где определены были эти параметры и которые я так увлеченно правил:
server.pl -conf=e:\\script\\1c_exch\\etc\\urbd.server.conf

Насчет чтения конфига - вообще-то он, как по мне, очень прост и не первый раз уже использую сию функцию, она даже входит в набор моих модулей дефолтных. Хотя про хеш... в принципе тоже можно, наверное это даже разумнее: проще передать весь хеш с параметрами функции, чем выбирать необходимое и загонять длинные строки. Так что спасибо, обдумаю.
Всё будет хорошо - я договорился!

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28