Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

UPLOAD без использования CGI.PM! (Ant)
Author Message
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6837
Карма: 131
   поощрить/наказать


PostPosted: Mon Aug 11, 2003 12:54 am ()
   Post subject: UPLOAD без использования CGI.PM!
Reply with quote

Помогите, может кто знает как это заделать. Есть код, только нерабочий (достал с сайта Xpoint):
Code (any language): скопировать код в буфер обмена
Наэтом дискуссия заканчивается, а проблема тем не менее не решена!!! Помогите плиз!

Last edited by Ant on Thu Nov 06, 2003 3:33 pm; edited 1 time in total
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Mon Aug 11, 2003 11:45 am (спустя 10 часов 51 минуту)
   Post subject:
Reply with quote

Отлаживать надо.
Не мучайтесь лучше, а воспользуйтесь хотя бы CGI::WebIn-ом, если так не хотите CGI.pm.
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6837
Карма: 131
   поощрить/наказать


PostPosted: Mon Aug 11, 2003 1:54 pm (спустя 2 часа 8 минут)
   Post subject:
Reply with quote

Дело не в том каким модулем надо пользоваться, а в том, что бы вообще БЕЗ них.

Но это уже в прошлом!!! Путь найден. Код выше вообще очень запутан. Вся проблема в том, что бы разобрать входной STDIN при UPLOAD'E. Проблема в том, что стандартный вход идет не просто как пара КЛЮЧ-ЗНАЧЕНИЕ, а как я понял + еще и разделители (через STDIN проходит не только plain/text а еще multipart/form-data).

В общем я поискал на разных сайтах информацию по этому вопросу и объединил ВСЕ что нашел. В итоге вроде работает. :)

Кому надо - пользуйтесь:

В хтмл вставляем следующий код (хотя его опять же можно генерить с помощью перла - кому как нравится)
Code (html): скопировать код в буфер обмена
<form (december.com/html/4/element/form.html) method="post" enctype="multipart/form-data" action="*path_to_cgi_script*"> (december.com/html/4/element/.html)
<input (december.com/html/4/element/input.html) type="file" name="upload_file"> (december.com/html/4/element/.html)
<input (december.com/html/4/element/input.html) type="submit"> (december.com/html/4/element/.html)
</form>
Самое главное, чтобы в форме присутствовал параметр enctype="multipart/form-data". Иначе работать не будет.

Ну и создаем Perl-script:
Code (perl): скопировать код в буфер обмена
#!/usr/bin/perl -w

print (www.perldoc.com/perl5.6/pod/func/print.html) "Content-type: text/html;\n\n";

if  ($ENV{'CONTENT_LENGTH'}){
        $buffer = ''; binmode (www.perldoc.com/perl5.6/pod/func/binmode.html) STDIN;
        read (www.perldoc.com/perl5.6/pod/func/read.html)(STDIN, $input, $ENV{'CONTENT_LENGTH'});
}

$ENV{'CONTENT_TYPE'} =~ /multipart\/form-data; boundary=(.+)$/;
$boundary = '--'.$1;

@list = split (www.perldoc.com/perl5.6/pod/func/split.html)(/$boundary/, $input);

        for ($num=1; $num<$#list;$num++){
                $item = $list[$num]; $test = $item;
                $item =~ /"([^"]+)"/;
                $field_name = $1;
                $field{$field_name} = $';
                $field{$field_name}=~ s/\n|\r//g;
                if ($test =~ /upload_file\d*/oi){ & }
}

sub upload{
        $test=~ /Content-type:/i;$thingy=$`;
        $thingy2=$';$thingy2 =~/\r\n\r\n|\n\n/;$conttype=$`;
        if ($conttype =~ m! (\w+)/!i) {
                $upload_type=$1;
                $conttype =~ s! $upload_type/!!;
        }
        ($not_required,@names) =split(/;/,$thingy);

                $names[1] =~ /"
([^"]+)"/;
                $1 =~ /([^\\]+)$/;
                $filename=$1;
                $filename=~ s (www.perldoc.com/perl5.6/pod/func/s.html)/ /_/g;
                $filename =~ s (www.perldoc.com/perl5.6/pod/func/s.html)/[-']//g;

                $test=~ /\r\n\r\n/;
                $file=$'
;


open (www.perldoc.com/perl5.6/pod/func/open.html)(QQ,">$filename");
binmode (www.perldoc.com/perl5.6/pod/func/binmode.html) QQ;
    print (www.perldoc.com/perl5.6/pod/func/print.html) QQ $file;
close (www.perldoc.com/perl5.6/pod/func/close.html) QQ;

}
В принципе он работает (но без всяких наворотов таких как ограничение по размеру входящего файла, расширению и т.п.). Но я думаю, что это можно легко добавить если кому надо. Вообщем я урезал скрипт до минимма (что бы было понятно).

Если есть какие-то комментарии и добавления - прошу (я сам только вчера занялся этим вопросом - так что самому интересно :)).
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Mon Aug 11, 2003 5:47 pm (спустя 3 часа 53 минуты)
   Post subject:
Reply with quote

Ant wrote:
Дело не в том каким модулем надо пользоваться, а в том, что бы вообще БЕЗ них.
Если не секрет, откуда такое жестокое ограничение?
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6837
Карма: 131
   поощрить/наказать


PostPosted: Mon Aug 11, 2003 7:47 pm (спустя 1 час 59 минут)
   Post subject:
Reply with quote

Ну, во-первых, модули "нагружают" программу (тот же цги сколько весит!!!), а во-вторых есть необходимость пользоваться шифровальными методами для защиты программ. А в этом случае трудно приходится с модулями... :(
Back to top
View user's profile Send private message Send e-mail
Enilatiar
Участник форума



Joined: 09 Jun 2003
Posts: 690
Карма: 24
   поощрить/наказать


PostPosted: Mon Aug 11, 2003 11:31 pm (спустя 3 часа 44 минуты)
   Post subject:
Reply with quote

Ant wrote:
"нагружают" программу (тот же цги сколько весит!!!)
А Вы знаете что запуск модуля вида
Code (perl): скопировать код в буфер обмена
use CGI qw (www.perldoc.com/perl5.6/pod/func/qw.html)(:standard);
Загружает не весь модуль, а лишь избранные функции. Этим же способом можно загрузить отдельные функции, так что общий объем загруженного модуля может быть не больше вашего кода, и уж во всяком случае будет наверняка содержать меньше потенциальных ошибок и, что еще более вероятно, будет более эффективным.
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Tue Aug 12, 2003 12:39 am (спустя 1 час 7 минут)
   Post subject:
Reply with quote

Ant:
Вы бы быстродействие сначала замерили, с модулем и без. А уж потом выводы делали. Могу сказать, что один-единственный модуль почти ничего не нагружает (для сравнения, на dklab.ru их подключается десятка 3, и ничего, работает).
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6837
Карма: 131
   поощрить/наказать


PostPosted: Tue Aug 12, 2003 11:42 am (спустя 11 часов 3 минуты)
   Post subject:
Reply with quote

Возможно, но, согласитесь, со своим набором подпрограмм намного удобнее. Хотя тут уже дело вкуса. Каждый пишет так как ему нравится!!!
Back to top
View user's profile Send private message Send e-mail
Enilatiar
Участник форума



Joined: 09 Jun 2003
Posts: 690
Карма: 24
   поощрить/наказать


PostPosted: Tue Aug 12, 2003 1:48 pm (спустя 2 часа 5 минут)
   Post subject:
Reply with quote

Ant wrote:
но, согласитесь, со своим набором подпрограмм намного удобнее
Вам, батенька, на ассемблере надо рисовать. Если бы каждый писал "как ему нравиться", то никто не стал бы подниматься до языков высокого уровня. Впрочем, я согласен с тем, что каждый тратит свое время по мере своего понимания.
Back to top
View user's profile Send private message
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6837
Карма: 131
   поощрить/наказать


PostPosted: Tue Aug 12, 2003 2:44 pm (спустя 56 минут)
   Post subject:
Reply with quote

Вообще-то КАЖДЫЙ и РИСУЕТ как ему нравится (на то мы и люди что бы отличаться друг от друга). А вот хамить не обязательно. Воистину каждый тратит свое время по мере своего понимания!!! Только не каждый задумывается над этим!
Back to top
View user's profile Send private message Send e-mail
Enilatiar
Участник форума



Joined: 09 Jun 2003
Posts: 690
Карма: 24
   поощрить/наказать


PostPosted: Tue Aug 12, 2003 2:58 pm (спустя 13 минут)
   Post subject:
Reply with quote

Ant wrote:
хамить не обязательно
Что Вы! Боже упаси. Простите великодушно за мои дерзкие слова. Но желания обидеть и хамства в них не было. Я лишь выразил свою точку зрения на "повторно использумый код".

P.S. Справедливости ради надо отметить, что я неосторожно выделил слово "рисовать". Но, исключительно, в целях созерцания слова. Ведь, забавный получается каламбур, рисовать - значит заниматься рисом.
Back to top
View user's profile Send private message
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6837
Карма: 131
   поощрить/наказать


PostPosted: Tue Aug 12, 2003 3:17 pm (спустя 19 минут)
   Post subject:
Reply with quote

Enilatiar wrote:
Что Вы! Боже упаси. Простите великодушно за мои дерзкие слова. Но желания обидеть и хамства в них не было. Я лишь выразил свою точку зрения на "повторно использумый код".

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

P.S. Я думаю тему можно закрыть.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Tue Aug 12, 2003 10:57 pm (спустя 7 часов 39 минут)
   Post subject:
Reply with quote

...только перед этим я скажу, что Perl славен как раз своими огромными библиотеками готового кода — это его главное достоинство. Поэтому не пользоваться библиотеками — все равно, что программировать в кодах CGI-скрипты.
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6837
Карма: 131
   поощрить/наказать


PostPosted: Thu Nov 06, 2003 3:31 pm (спустя 2 месяца 24 дня 16 часов 34 минуты)
   Post subject:
Reply with quote


М

Перенесено из форума: Программирование::Perl::Все в кучу.
Перенесено в форум: Программирование::Perl::Склад готовых решений.
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   This topic is locked: you cannot edit posts or make replies. All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
Здесь вечерние платья на свадьбу, акция.
XML