Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Темы - Skif

Страницы: 1 [2] 3 4
16
Perl / ActivePerl и Email::MIME::Attachment::Stripper
« : 13 Июля 2005, 14:13:11 »
Имеется такой вот кусок кода (цифры просто для нумерации строк):


.................

307 print "\\n\\n\\n-------------------------------------\\nMessage is $message:\\n\\n\\n\\n";
308 &logfile($logfile,"Parcing message...");
309 my $stripper Email::MIME::Attachment::Stripper->new($message);
.................


Вывод дает такой вот:

Цитировать

-------------------------------------
Message is Return-Path:
X-Original-To: test@xxx.kiev.ua
Delivered-To: test@xxx.kiev.ua
Received: by xxx.skif.com.ua (Postfix, from userid 106)
        id D824EFDC4; Wed, 13 Jul 2005 11:54:30 +0300 (EEST)
Received: from mersedes.avtoprofit.local (unknown [10.0.43.4])
        by xxx.skif.com.ua (Postfix) with ESMTP id D8281FDBF
        for ; Wed, 13 Jul 2005 11:54:23 +0300 (EEST)
To: test@xxx.kiev.ua
From: test@xxx.kiev.ua
Subject: NAKLAD-KLO: Wed Jul 13 11:54:22 2005
Date: Wed, 13 Jul 2005 11:54:24 +0300
X-Mailer: Perl script "nakladnaya.pl"
        using Mail::Sender 0.8.10 by Jenda Krynicky, Czechlands
        running on mersedes.avtoprofit.local (10.0.43.4)
        under account "skif"
Message-ID: <20050713_085424_099591.test@xxx.kiev.ua>
MIME-Version: 1.0
Content-type: multipart/mixed;
        boundary="Message-Boundary-by-Mail-Sender-1121244862"

This message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.

--Message-Boundary-by-Mail-Sender-1121244862
Content-type: text/plain; charset="US-ASCII"
Content-description: Mail message body
Content-transfer-encoding: 7BIT
Content-disposition: inline

Get URBD exchange file

Wed Jul 13 11:54:22 2005 |------------------------------------------|
Wed Jul 13 11:54:22 2005  Starting Exchange of nakladnaya for 1C...
Wed Jul 13 11:54:22 2005 |------------------------------------------|
Wed Jul 13 11:54:22 2005  Sending exchange file ...
Wed Jul 13 11:54:22 2005 Sending mail...NAKLAD-KLO: Wed Jul 13 11:54:22 2005
--Message-Boundary-by-Mail-Sender-1121244862
Content-type: application/octet-stream; name="exchange.urbd"; type=Unknown;
Content-description: exchange.urbd
Content-transfer-encoding: Base64
Content-disposition: attachment; filename="exchange.urbd"

e1xydGYxXGFuc2lcYW5zaWNwZzEyNTFcZGVmZjBcZGVmbGFuZzEwNDl7XGZvbnR0Ymx7XGYwXGZu
aWxcZmNoYXJzZXQwIDt9fQ0Ke1wqXGdlbmVyYXRvciBNc2Z0ZWRpdCA1LjQxLjIxLjI1MDA7fVx2
aWV3a2luZDRcdWMxXHBhcmRcbGFuZzEwMzNcZjBcZnMyMCBzYWRhc2Rhc2Rhc2Rhc2Rhc2RhXHBh
cg0Kc1xwYXINCmRccGFyDQphc1xwYXINCmRccGFyDQphc1xwYXINCmRccGFyDQphc1xwYXINCmRc
cGFyDQphc1xwYXINCmRccGFyDQphc2RccGFyDQphc2RccGFyDQp9DQoA
--Message-Boundary-by-Mail-Sender-1121244862--

:


Need a message at E:\\scripts\\1c_exch\\bin\\nakladnaya.pl line 309

E:\\scripts\\1c_exch\\bin>


В общем идет ошибка на 309 строку, хотя передаваемое значение $message (смотрите вывод) нормально отформатировано и имеет место быть, а кричит, что нету. Самое интересное, что под фрей этот кусок кода неоднократно использовался и работает без проблем....

Объясните почему такое может быть под виндой...

17
Собственно сабж.
Написан набор скриптов для автообмена распределенных баз 1С. Все работает. За исключением "пустяка" - при запуске из скрипта 1С скрипт продолжает выполняться сразу же дальше, недожидаясь окончания работы запущенного процесса. Пускался system, обратными кавычками и т.д.. Насколько я понимаю все лежит в области fork, точнее того, что он не реализован на Win32.
Можно ли как-то по другому "схватить" PID процесса который стартует из скрипта, а потом просто проверять наличие этого процесса в системе? Средствами Perl, ессно.

Да, сейчас этот вопрос решен при помощи sleep, но ... Скажем так, это кривое решение...
Есть ли альтернатива?

18
PHP / Формы и получение значений.
« : 05 Июля 2005, 12:49:12 »
Вопос абсолютно ламерский, но все же.
Мне поставили сейчас задачу реанимировать чужой вебсервер. Там  все написано на php. В принципе разобрался что как работает и почему народ не может с ним работать.
Одна из загвоздок - получение данных от форм через строку браузера (используются post)


<td valign=top>
<
table width=210 border=0>
<
form action="sPeriod" method=get>
<
tr><td><b>бБЕДХРЕ ЯБНИ кНЦХМ Х оЮПНКЭ</b></td></tr>
<
tr><td>
кНЦХМ:   <input type=text name=UserName size=12 maxlength=10></td></tr>
<
tr><td>оЮПНКЭ: <input type=password name=PassWord size=12 maxlength=10></td></tr>
<
tr><td> </td></tr>
<
tr><td><input type=SUBMIT value=" бНИРХ Б ЯРЮРХЯРХЙС " name="SUBMIT"></td></tr>
</
form>
</
table>
</
td>



Ну тут мне все понятно, пусть я даже не знаю PHP :)

А вот пример того, как следующий скрипт получает данные:


<?php

function  ErrorLogin() {
        echo (
"<!DOCTYPE HTML PUBLIC \\"-//W3C//DTD HTML 4.0 Transitional//EN\\">");
        
echo ("<HTML><HEAD><TITLE>рНОКХБМШЕ ЯЛЮПР-ЙЮПРШ "йкн"</TITLE></HEAD>");
        echo (
"<body bgcolor=#F4C201 text=#000000>");
        echo (
"typa errory i ige s nimi");
        echo (
"<A HREF=index>tipa ssylka na stranitsu</A></BODY></HTML>");
        exit;
}
        include (
"local.php");
        
$SitePath="Location: [url]http://xxx.xxx.xxx.xxx/[/url]";

        if (!isset(
$UserName) || !isset($PassWord)) {
              echo(
"$UserName --- $PassWord");
                
ErrorLogin();
        }



Ввод элементарной проверки ( echo("$UserName --- $PassWord"); ) показал, что проблема именно в получении данных из строки браузера.

Собственно вопрос, как правильно "оформить" получение? В perl это делается досточно просто:

$var = param(\'PARAMETR\');
А как в PHP? В примерах, что я видел, явного указания на то, откуда брать переменную, если она идет в строке запроса - нет...

Или объясните как правильно вообще выловить полностью весь запрос , что-то а-ля

$var = $ENV{\'HTTP_QUERY\'}

????

19
Perl / Email::MIME::Attachment::Stripper
« : 09 Июня 2005, 12:07:03 »
Вот столкнулся с такой вот проблемой:


#!/usr/bin/perl -w

use Mail::Sender;
use 
Mail::POP3Client;
#use Email::MIME;
use Email::MIME::Attachment::Stripper;
open (FF"/tmp/mess");
while (<
FF>){
	
$message .= $_;
}
close (FF);

my $stripper Email::MIME::Attachment::Stripper->new($message);

my Email::MIME $msg $stripper->message;

my @attachments $stripper->attachments
foreach 
my $hash (@attachments) { 
print 
"\\n1\\n";
print 
$hash->{\'filename\'} ;
print "\\n2\\n";
print $hash->{\'content_type\'} ;
     $data_from_file = $hash->{\'payload\'}; 
print $data_from_file;
}
exit(0);




Выводит все нормально. и имя заатаченного файла и его содержимое... Тоесть проблем как бы нет, если бы не одно маленькое НО:

Цитировать

[root@skif.bsd] /usr/local/script/smtp/bin/:./smtp_send.pl
Illegal Content-Type parameter  at /usr/local/lib/perl5/site_perl/5.8.5/Email/MIME.pm line 13
Illegal Content-Type parameter at  /usr/local/lib/perl5/site_perl/5.8.5/Email/MIME/Attachment/Stripper.pm line 115

1
rc.conf
2
application/octet-stream
# -- sysinstall generated deltas -- # Thu May  5 17:03:04 2005
# Created: Thu May  5 17:03:04 2005
# Enable network daemons for user convenience.
# Please make all changes to this file, not to /etc/defaults/rc.conf.
# This file now contains just the overrides from /etc/defaults/rc.conf.
defaultrouter="10.0.43.1"
font8x14="cp866u-8x14"
...................

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

Illegal Content-Type parameter  at /usr/local/lib/perl5/site_perl/5.8.5/Email/MIME.pm line 13
Illegal Content-Type parameter  at /usr/local/lib/perl5/site_perl/5.8.5/Email/MIME/Attachment/Stripper.pm line 115

ВОт только немогу понять почему? Может нужно сначала после считывания из файла данные как-то конвертануть?

20
Perl / Два if - несрабатывают
« : 08 Июня 2005, 14:15:41 »
есть код код который выводит список сообщений в ящике:

#!/usr/bin/perl -w

use Mail::Sender;
use 
Mail::POP3Client;

my $pop = new Mail::POP3ClientUSER => "skif",
	
PASSWORD => "rfn.if",
	
HOST => "10.0.43.27");

for (
$i 1$i <= $pop->Count(); $i++) {
	
my $from = \'\';
	
my $subject = \'\';
	
foreach ( $pop->Head( $i ) ) {
	
	
/^From:\\s+/i and $from = "$_\\n";
	
	
/^Subject:\\s+/i and $subject = "$_\\n";
	
}
	
print "$from$subject\\n";
}

exit(0);


Вот его вывод:
Цитировать

[root@skif.bsd] /usr/local/script/smtp/bin/:./smtp_send.pl
From: skif@xxx.com.ua
Subject: test7

From: skif@xxx.xxx.com.ua

From: root@xxx.xxx.com.ua (Charlie Root)
Subject: skif.center.xxx security run output

From: root@xxx.xxxcom.ua (Charlie Root)
Subject: skif.center.xxx daily run output

From: skif@xxx.kiev.ua
Subject: Here is the file

From: root@xxx.xxx.com.ua (Charlie Root)
Subject: skif.center.xxx security run output

From: root@xxx.xxx.com.ua (Charlie Root)
Subject: skif.center.xxx daily run output

[root@skif.bsd] /usr/local/script/smtp/bin/:



Тут проблем нет.
Возникают, когда пытаюсь из всего списка выделить одно письмо:
Цитировать

From: skif@xxx.kiev.ua
Subject: Here is the file


пишу такой код:

#!/usr/bin/perl -w

use Mail::Sender;
use 
Mail::POP3Client;

my $pop = new Mail::POP3ClientUSER => "skif",
	
PASSWORD => "rfn.if",
	
HOST => "10.0.43.27");

for (
$i 1$i <= $pop->Count(); $i++) {
	
my $from = \'\';
	
my $subject = \'\';
	
foreach ( $pop->Head( $i ) ) {
	
	
/^From:\\s+/i and $from = "$_\\n";
	
	
/^Subject:\\s+/i and $subject = "$_\\n";
	
}
	
$rr =\'Here is the file\';
	
if ($subject=~ m/$rr/gi){
	
	
print "!!!\\n";
	
	
	
print "Message index in server = $i\\n";
	
	
	
if ($from =~ m/skif\\@xxx.xxx.com.ua/gi) {
	
	
	
	
print "$from$subject\\n";
	
	
	
}
	
}
	

}

exit(0);


Вывод же получаю вот такой:
Цитировать

[root@skif.bsd] /usr/local/script/smtp/bin/:./smtp_send.pl
!!!
Message index in server = 5
[root@skif.bsd] /usr/local/script/smtp/bin/:


А вот от кого и тему не печатает... :( Тоесть, по теме сработал, а по from нет... Пытаюсь менять местами, но опять срабатывает по from, а по теме нет...
Можете подсказать, где я напортачил?

21
Perl / заголовки письма
« : 03 Июня 2005, 12:51:58 »
Имеется необходимость отпарсить заголовки письма. Для этого пользую Email::Simple. Но споткнулся вот на чем.
если например имеет место такой вид заголовка(часть его):

Цитировать

CC: Admin USER



my $mail 
Email::Simple->new($text);
@
arr_cc $mail->header("CC");


Вернет такое вот массив
$arr_cc[0] = "Admin"
$arr_cc[1] = ""
$arr_cc[2] = "USER"
$arr_cc[3] = ""

меняем заголовок на:
Цитировать

CC: admin@domain.ua, user@domain.ua


И получаем
$arr_cc[0] = "admin@domain.ua"
$arr_cc[1] = "user@domain.ua"

Я никак не могу запарсить загловки. не могу схватить логику.  Как сделать так что бы для обоих типов заголовком (или недай бог для смешанного) парсило по человечески.
Может другой модуль может сделать это сам?

22
Perl / STDIN/STDOUT
« : 01 Июня 2005, 15:46:43 »
Объясните как правильно с ними работать?
Есть острая необходимость написать скрипт для фильтра в postfix, имеется пример в документации написанный на шел. вывод с smtpd демона в файл там передается так:

Цитировать

cat _> $DIR/$$ || { echo Cannot save mail to file; exit EX_TEMPFILE; }

сам фильтр привязывается таким способом(кусок master.cf)

Цитировать

smtp _ _inet _ _n _ _ _ - _ _ _ n _ _ _ - _ _ _ 10 _ _ _ smtpd
_ _ _ _ _ _ _ _ -o content_filter=mailfilter:dummy
mailfilter unix _- _ _ _ n _ _ _ n _ _ _ - _ _ _ 10 _ _ _ pipe
_ _flags=Rq user=pupkin argv=/usr/local/script/mail/mailfilter.sh -f ${sender}
-- ${recipient}


тоесть исходя из этого ясно, что smtpd просто передает на STDOUT содержимое сообщения в clear-text.
Вот это и нужно словить.
Самый простой способ, который напрашивается - system и кусок из shell скрипта. Но это, по моему не правильно и не красиво.
Может кто, пояснить как "правильно", схватить это сообщение?
пробовал и так:

open STDOUT
, \'>\', "/tmp/foo.out" or die "Can\'t redirect STDOUT: $!";
        print STDOUT $_;
close STDOUT;


и так


open STDOUT
, \'>\', "/tmp/foo.out" or die "Can\'t redirect STDOUT: $!";
        print STDOUT STDIN;
close STDOUT;

и еще парой методов - не получается. Пробовал уазывать в качестве пути к файлу STDOUT/STDIN - тоже ноль.
Подскажите, как словить вывод от программы?

23
Вот код


sub copy_mess_head 
{

my $mail =shift @_;

my $line;

my $result = -1;
my @cc $mail->header("cc");

if (!
undef $cc[-1]) {
	
foreach 
my $str (@cc) {
	
	
if (
undef $str){
	
	
	
if ((
$str ne \'\')or ($str ne \' \')) {
	
	
	
	
$line = "$line$str";
	
	
	
}
	
	
}
	
}
}

@cc = ();

@cc = $mail->header("CC");

if (!undef $cc[-1]) {
	
foreach my $str (@cc) {
	
	
if (undef $str){
	
	
	
if (($str ne \'\')or ($str ne " ")) {
	
	
	
	
$line = "$line$str";
	
	
	
}
	
	
}
	
}
}

if (undef $line) {      ###### это 77 строка . Здесь ругается.
	
$result = $line;
}
elsif ($line eq \'\') {
	
$result = -1;
}
return  $result;
}



в результате работы выдается такое вот сообщение
[root@skif.bsd] /usr/local/script/filters/:chmod 755 ./my_filter.pl && ./my_filter.pl
Use of uninitialized value in string eq at ./my_filter.pl line 77.

Я немогу понять, почему? Ведь это как раз проверка на то, определена переменная или нет. А идет ругань....

24
Собственно сабж. Стоит задача сравнить два документа в текстовом формате на идентичность. В случае совпадения хотя бы на 50 процентов - документы признаются идентичными.

Простой пример. Берем любой текстовый документ. Удаляем из него несколько предложений. Несмотря на их отсутствие, этот и исходный документ все таки одно и тоже.

Как произвести сравнение? Может есть подходящие модули? Буду благодарен за любую помощь.
:beer:

P.S.: Да. Самый тривиальный способ, что напрашивается - создать массив/хеш слов, что встречаются в документе и их количество. И на разнице сыграть. Вот только умозаключения все же подсказывают ненадежность такого решения :( Да и не такое уж оно тривиальное в плане написания.

25
Perl / Модуль Lingua::DetectCharset - проблемы
« : 03 Мая 2005, 03:39:55 »
вот надыбал понравившийся мне модуль, но получил маленький облом.
Модуль Lingua::DetectCharset;
А вот проблемы(покажу на простеньком скрипте):

Цитировать

.....
use Lingua::DetectCharset;
    use LWP::Simple;

$str=get("http://server.com.ua");

my $charset = Lingua::DetectCharset::Detect ($str) ;


По идее проблем быть не должно. Но идея великая вещь:

Цитировать

Use of uninitialized value in addition (+) at /usr/local/lib/perl5/site_perl/5.8.5/Lingua/DetectCharset.pm line 85.
Use of uninitialized value in addition (+) at /usr/local/lib/perl5/site_perl/5.8.5/Lingua/DetectCharset.pm line 85.
Use of uninitialized value in addition (+) at /usr/local/lib/perl5/site_perl/5.8.5/Lingua/DetectCharset.pm line 39.
Use of uninitialized value in addition (+) at /usr/local/lib/perl5/site_perl/5.8.5/Lingua/DetectCharset.pm line 40.
Use of uninitialized value in division (/) at /usr/local/lib/perl5/site_perl/5.8.5/Lingua/DetectCharset.pm line 41.



Это малая часть того, что мне выплевываетсся в консоль при запуске скрипта. :(
Ставил модуль при помощи

perl -CPAN -e \'install Lingua::DetectCharset\'

Сам модуль как бы поставился. То есть ошибок не было. А вот эффект - нулевой. Может я не правильно читаю маны и хелпы? Пните, пожалуйста
P.S.: чуть не забыл - ось FreeBSD, может это актуально

26
Perl / GD и временные файлы.
« : 22 Марта 2005, 10:00:15 »
Возможно немного все же оффтопик, но меня очень интересует...  :insane:
Собственно вопрос, кто что использует для создания временных файлов для работы GD? Я сейчас практикую создание файлика в /tmp -директории, которая находиться за пределами доступности web-сервера с последующим fork-ом для копирования используя sudo. Для обеспечения уникальности имени рисунка - CGI::Session (имя сессии + имя рисунка (а-ля news, about, etc))потом делаю удаление файла в конце скрипта.
Что мне не нравиться в таком подходе - если я в /tmp удаляю при помощи стандартной функции unlink, то при удалении из папки рисунков в области видимости - приходиться использовать rm из системы. Второе - "утяжеление" кода - получается перегружен форками. Вроде бы и не сложно, но все же. Третье, если я делаю не для своего хостинга движок - очень трудно уломать админа "где-то там" добавить в sudo user пользователя, пусть даже с ограниченными  правами и т.д. А иногда и вообще установить sudo. В таких случаях мне приходиться давать на папку временных рисунков права 777... Хотя сие мне не нравиться.
Может кто-то использует альтернативные решения?

27
Всё о Html / perl + html + IE/Konqueror/Opera/etc...
« : 16 Марта 2005, 10:25:28 »
Сейчас мучаюсь с одним сайтиком, и имею кучу проблем. движок к нему я написал, а вот дизайн... Дизайн в принципе то же готов, но вот его отображение желает лучшего. Конечно заказчику я его пихну, но как-то не хорошо недоделку отдавать... :(
Пояснюсь на сайте имеются в табличках рисунки. Под IE все отображается вполне корректно, а вот если я смотрю из под фри, где собственно и разрабатываю все это - тут облом.. Все рисунки смещаются, под каждым появляется зазор на 3-4 пикселя.... В общем не красиво...

Вот пример как сие все может выглядеть в скрипте:

http://owe.united.net.ua/cgi-bin/home/index.pl

Если перенаправить вывод скрипта в файл(test.html) - то все просто песня отображается. Как доктор прописал. Под любым браузером.

http://owe.united.net.ua/testin.html

Листал, статейку
http://www.webscript.ru/stories/05/02/25/0767747
Может конечно и выход, но тут-то в основном  просто таблицы и рисунки... Да прыжки по страничкам... с генерацией скриптов... и прочей отнюдь не сложной фигней...

28
Perl / Модули и значения ими возвращаемые
« : 14 Февраля 2005, 17:49:40 »
Вот дорос(наверное) недавно, до создания своих модулей. И тут же обзавелся рядом вопросов.

Например, раннее мне требовалось написать какой-то sub, который бы возвращал несколько значений, то я писал нечто сродни этому
 
sub myfunc
(???) {
# Здесь что-то делал с переменными
}

Вызывал из скрипта чем-то подобным

&myfunc($val1,$val2,$val3);
Но теперь такой вариант не прокатывает.
Мне нужно в модуле обработать уже имеющуюся функцию и получить несколько значений назад. причем каждое из значений передать строго определенным переменным/массивам.
насколько я понимаю нужно смотреть в сторону return в sub, но вот не понимаю как.

например если я напишу так в модуле

 
sub myfunc 
{
# Здесь что-то делал с переменными
return ($val1,$val2);
}


А вызывать буду на подобе такого:

 
our 
(val1,val2);
&
myfunc;



То в модуль сделает все необходимые операции и вернет именно моим, указанным в скрипте, а не модуле $val1,$val2 переменным значение? А как же их тогда объявлять при наличии use struct в модуле?

29
Собственно сабж. Мне нужно по ходу выполнять несколько процессов не выходя из кода. По соображениям безопасности и красивости кода не охота применять system
Вариант fork + exec, но у меня процессы взаимосвязаны и занимают n-ное время. не всегда одинаковое. то есть просто sleep сказать мало на этот период. Вот и собственно вопрос: альтернатива с точки зрения безопасности?

30
Perl / Ввод параметров с командной строки.
« : 07 Декабря 2004, 16:42:54 »
Собственно интересует как. ибо не вводил, а иногда надо и приходиться править постоянно файл конфига.
Хотелось бы от этого излечиться.
В какую сторону смотреть?

Страницы: 1 [2] 3 4