|
|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Stas Vlasov 2:5080/172 13 Feb 2002 21:45:13 To : Andrew Hapanovich Subject : Re: Заголовок ответа -------------------------------------------------------------------------------- Tuesday February 12 2002, Andrew Hapanovich writes to Stas Vlasov: SV>>>> В качестве Content-type подставь свой, я так читаю книги из SV>>>> архивов. AH>>> Попробовал, ничего не меняется. SV>> Странно, странно. А два \n не забыл в конце? AH> Hет, не забыл. AH> А не мог бы ты мне кинуть свой скрипт Мог бы. Сейчас кину. AH> ( лучше на мыло hapanovich@tut.by) Чтоб еще и мои ошибки туда залезли? Вот скрипт (комментарии сейчас вписываю): Да, если встретишь в скрипте неиспользованные переменные - не удивляйся. Это только один такой скрипт. А было их несколько. ========= #!perl use strict; my ($arg, $line, $nofiles, $name, $name2, @file, $file, $size, $basepath, $files, $argorig, $afile, $archive, $buff); $arg = $ARGV[0]; #в $arg - имя.zip:имя_файла_из_zip.расширение. # чтоб нельзя было урл типа ../../../autoexec.bat соорудить. $arg =~ s/\.\.//g; $argorig = $arg; $arg =~ s/^\///g; #$arg =~ s/\//\\/g; #$arg =~ s/\\\\/\\/g; #здесь надо было бы переменными воспользоваться, #но тогда я про них не знал, а сейчас - переделывать лень. $basepath = "c:/Network/Public"; $archive = (split ':', $arg)[0]; $file = (split ':', $arg)[1]; $afile = sprintf "$basepath/$archive"; open INFILE, "/bin/unzip -C -p $afile $file|" || die "$!"; binmode(STDOUT); binmode(INFILE); #тут сделано определение, текстовый-ли это файл. По расширению. if (($file =~ /\.[tT][xX][tT]$/)||($file =~ /\.[aA][sS][cC]$/)|| ($file =~ /\.[dD][iI][zZ]$/)||($file =~ /\.[gG][iI][fF]$/)|| ($file =~ /\.[jJ][pP][gG]$/)||($file =~ /\.[hH][tT][mM][lL]$/)|| ($file =~ /\.[hH][tT][mM]$/)||($file =~ /^[A-Za-z_]+$/)) { printf "Content-type: text/plain Content-Disposition: inline; filename=\"$file\"\n\n"; while ($line = <INFILE>) { #А тут - определение, нужна ли перекодировка. if (($file =~ /\.[tT][xX][tT]$/)||($file =~ /\.[aA][sS][cC]$/)|| ($file =~ /\.[dD][iI][zZ]$/)||($file =~ /^[A-Za-z_]+$/)) { unless (length($file) > 12) { #собственно перекодировка. 866->1251. Кривовато, согласен. #Как-нибудь переделаю $line =~ tr /АБВГДЕЖЗИЙКЛМHОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяЁё/АБВГДЕЖЗИЙК ЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯрстуфхцчшщъыьэюяЁётуфхцчшщъыьэюяиё/; } } printf "$line"; } } else { #А вот тут передаются бинарные файлы. printf STDOUT "Content-type: application/octet-stream Content-Disposition: attachment; filename=\"$file\"\n\n"; while (read(INFILE, $buff, 1)) { print STDOUT $buff; } } close INFILE; ======== Good luck. Stas --- Еще одно "золото" 3.0.1 * Origin: gui is good, but console better (2:5080/172) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/22873c6ad24c.html, оценка из 5, голосов 10
|