|
|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Alexander V. Gaiduk 2:5020/400 04 Jan 2003 17:11:36 To : Alexander Ponomarenko Subject : Hа: Upload -------------------------------------------------------------------------------- > Hарод! Делаю так аплоад. И есть проблема: как из всего этого выделить > сам файл и имя файла. Если делать так, то в юниховской кодировке файлы приходят > нормально, а в виндовой неправильно. Как сделать правильно? вот это одинаково работает и в виндусе и в линухе, заполняется хэш "%in", в нем все данные о файле будут. sub ReadParseMime { binmode(STDIN); my ($boundary,$line,$foo,$name,$rest); $ENV{CONTENT_TYPE} =~ /boundary=(.*)$/; $boundary = $1; <STDIN>; # skip first boundary while(1) { $name = ""; # Read section headers while(1) { $line = <STDIN>; chop($line); chop($line); # lose /r/n if (!$line) { last; } elsif ($line =~ /^Content-Disposition: form-data(.*)/) { $rest = $1; while ($rest =~ /([a-zA-Z]*)=\"([^\"]*)\"(.*)/) { if ($1 eq 'name') { $name = $2; } else { $foo = $name . "_$1"; $in{$foo} = $2; } $rest = $3; } } elsif ($line =~ /^Content-Type: (.*)/) { $foo = $name . "_content_type"; $in{$foo} = $1; } } # Read data $in{$name} .= "\0" if ($in{$name}); while(1) { $line = <STDIN>; if (!$line) { return; } if (index($line,"$boundary") != -1) { last; } $in{$name} .= $line; } chop($in{$name}); chop($in{$name}); if (index($line,"$boundary--") != -1) { last; } } } зы. применяется, когда надо распушить данные с формы "multipart/form-data" ззы. украдено из Webmin. --- ifmail v.2.15dev5 * Origin: LesoBANK (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/1199964b080ab.html, оценка из 5, голосов 10
|