Николай Лебедев Web-мастер учебного центра Микроинформ
Почему была написана эта заметка
Кратко о PERL-модулях от Active State
Что скачивать
Как устанавливать
Как проверить
Что дальше
1. Почему была написана эта заметка
Internet Information Server ( IIS ) под Windows NT
является сейчас вторым ( после Apache )
по популярности web-сервером.
Можно привести ряд аргументов в пользу того
или иного выбора - Apache или IIS - это предмет отдельного
разговора, выходящего за рамки данной заметки.
Так или иначе, я столкнулся с задачей установки
PERL для IIS3 под Windows NT. Цель данной операции
вполне понятна: PERL в настоящее время - наиболее
популярный язык автоматизации web-сервера. На
нем написана масса полезных скриптов, всевозможных
счетчиков, программ приема заявок, и многое
другое. Хотелось бы уметь адаптировать все это
под IIS, да и свои скрипты хотелось бы уметь
писать так, чтобы они с минимальными изменениями
годились для любого web-сервера. Значит, их
стоит писать не на BASIC, а скорее на PERL.
Итак, хорошо бы поставить PERL на IIS под NT.
Лезем в Интернет, выясняется - это интересует
многих, и это таки-можно сделать : есть
кампания Active State ( www.activestate.com ),
которая разработала поддержку PERL для IIS; все,
что для этого требуется, можно с ее сервера
бесплатно скачать. А в качестве
руководства к действию - читайте FAQ , который
поддерживает некто Evangelo Prodromou. Замечательно.
Теперь можно обяснить цель появления данной
заметки. Как выяснилость на практике, указанный выше
FAQ от Evangelo Prodromou , на который
много ссылок в разных местах,
весьма мало пригоден как начальное руководство
к действию по установке PERL для IIS. В нем
есть много полезных сведений, тонкостей,
но вот простой и внятной инструкции :
делай раз, делай два, делай три - и твой
первый скрипт типа "Здравствуй, ПЕРЛ"
заработает на IIS- там нет. Что и привело в нашем
случае к изрядной потере времени.Именно попытка
создания такой простой инструкции и
есть предмет данной заметки.
То, о чем дальше будет говориться, проверено уже
не один раз для IIS3. Вероятно, все это верно и для
версий IIS4 и IIS2, но сам я этого не проверял.
2. Кратко о PERL-модулях от Active State
Active State - на сегодняшний день
основной поставщик модулей PERL для IIS.
Для начала вполне достаточно того,
что можно скачать у нее. ( Впрочем, если
вас интересуют именно все возможные варианты
или история вопроса - читайте указанный
выше FAQ ). Кстати, в этом FAQ Active State
называется свом старым именем - Active Ware.
Cушествует
не один, а несколько модулей от Active State
для разных аспектов поддержки PERL для IIS.
Есть модуль "Perl for Win32"
- это exe-файл,буквальный аналог соответствующего
исполняемого perl-модуля под Unix. Однако
специфика архитектуры Windows NT такова, что
написанный специально под нее модуль- DLL, выполняя
то же самое, будет работать быстрее ( не будем
здесь вдаваться в объяснения - почему ).
Этот модуль-DLL носит название "Perl for ISAPI".
Двух указанных модулей - "Perl for Win32" и "Perl for ISAPI" хватает для решения большинства простейших
задач с применением PERL. Их установку и использование
мы и рассмотрим в данной заметке.
( Для многих задач хватило бы
и одного "Perl for ISAPI", но технически его
нельзя установить без "Perl for Win32" ).
А еще есть модуль "PerlScript", который глубже интегрирован
в IIS - модуль для ASP ( Active Server Pages,
особенность IIS начиная с IIS3, использующая
Microsoft Active X.) Еще есть модуль "PerlEx"
для ускорения работы
CGI-скриптов ( еще раз ускорения, но уже за деньги) . И, наконец, графический Perl Debugger
- тоже не бесплатный, бесплатна только версия
на неделю.
3. Что скачивать
Итак, залезаем на www.activestate.com, Perl for Win32,
скачиваем Pw32i316.exe (примерно 1,5 Мб; 316 - номер версии,
в дальнейшем вероятно, появится 317 и т.д. ). Cкачиваем
там же PIISi316.exe (примерно 80 Кб; 316 - опять номер версии; он
должен быть у обоих файлов одинаков)- это Perl for ISAPI.
4. Как устанавливать
а) Выбираем директорию под файлы PERL, например C:PERL
- ни в коем случае не внутри директории web, а то
получим большую дыру в системе безопасности.
в) Разархивируем скачанные архивы в выбранную
директорию ( например, при
помощи WinZip - важно, чтобы длинные имена файлов
сохранились).
c) Устанавливаем модуль "Perl for Win32" : в возникшей директории BIN находим и запускаем
perlw32-install.bat. Соглашаемся со всем, что
предлагается.
d) Устанавливаем модуль "Perl for ISAPI" : в возникшей директории BIN находим и запускаем
perlis-install.bat. Соглашаемся со всем, что
предлагается, НО : расширение под файлы, которые
система будет ассоциировать с perlis.dll
лучше сменить с предлагаемого .PL на .PLX,
или что нибуть в этом роде : по традиции
.PL обычно резервируется под файлы, обрабатываемые
perl.exe - главным файлом "Perl for Win32".
e) Еще одно действие понадобится для тех случаев, когда
желательно непосредственно
применять perl.exe - главный файл "Perl for Win32".
( Напомним, что
теоретически perlis.dll делает все то же самое,
что и perl.exe, но только быстрее. Практически,
однако, нам не удалось заставить его
корректно работать с SSI- Server Side Include.
А это ключевой элемент для счетчиков или , скажем,
вставления часов на страницу. Есть и другие
тонкости. Так что
пожалуй, лучше сразу сделать - ну хотя бы для
того, чтобы реально сравнить по скорости perl.exe
и perlis.dll. )
Итак, нужно добавить в Registry запись, ассоциирующую
файлы с расширением .PL с perl.exe. Любопытно :
то же для perlis.dll инсталляционная программа
сделала автоматически, а для perl.exe - нет.
Вызываем winnt/system32/regedt32 и находим
HKEY_LOCAL_MACHINESystemCurrentControlSetServices
W3SVCParametersScriptMap
Там уже должна быть запись
.plx:REG_SZ: c:perlbinPerlIS.dll
( предполагается, что директория, выбранная в пункте а) - c:perl ).
После этой записи надо добавить
.pl:REG_SZ: c:perlbinPerl.exe %s %s
Любопытно, что вот про эти %s %s - в FAQ от Evangelo Prodromou - ни слова, а без них все как настоящее,
но не работает.
f) Если потребуется SSI ( а наверняка потребуется ),
то ровно в том же месте Registry, прямо под
двумя предыдущими записями делаем еще одну :
.stm:REG_SZ: C:WINNTsystem32inetsrvSsinc.dll
-мы ассоциируем файлы с расширением .stm с
отвечающим за SSI .dll. Это .dll из комплекта
IIS и никак с perl не связан. Расширение можно,
видимо, при желании изменить, но это
не может быть .htm . Разумеется, если вы при инсталляции
выбрали другое название для директории с файлами IIS - его
и проставьте.
g) Теперь кладем наши скрипты в какую-нибуть
директорию внутри web и при помощи
Microsoft Internet Service Manager
( Inetmngr )
прописываем ее как директорию web с правами
Access : Read Execute. Те же права нужны
кстати и для SSI.
h) Все. Перегружаем NT ( именно NT перегружаем,
а не только web - иначе записи в Registry не
вступят в силу )
5. Как проверить
Ну например : test1.pl - работает при помощи
perl.exe и выводит на экран фразу "Hello, Perl !".
print "Content-type: text/htmlnn";
print "<HTML>";
print "<BODY>";
print ("Hello, Perl !");
print "</BODY>";
print "</HTML>";
А вот test2.plx использует perlis.dll и пишет на экране "Здравствуй, ПЕРЛ !".
Обратите внимание : начальная строчка здесь другая, чем
в test1.pl - именно так требуется для perlis.dll.
print "HTTP/1.0 200 OK rn";
print << "END";
Content-Type text/html
<HTML>
<HEAD>
<meta http-equiv="Content-Type"
content="text/html; charset=windows-1251">
</HEAD>
<BODY>
Здравствуй, ПЕРЛ !
</BODY>
</HTML>
END
И наконец, test3.stm выдает на экран ваш IP-адрес используя
скрипт test3.pl и SSI.
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=windows-1251">
</head>
<body bgcolor="#FFFFFF" link="#000080" vlink="#660033">
<center>
<font size=4 color=teal>Ваш IP-адрес</font>
<font size=5 color=navy>
<!-- #exec cgi="test3.pl" --></font>
</center>
</body>
</html>
А соответствующий скрипт test3.pl состоит всего из одной
строки :
print $ENV{'REMOTE_ADDR'};
6. Что дальше
А вот дальше можно читать FAQ от Evangelo Prodromou, который
доступен во многих местах, например, на
www.activestate.com.
Полезно посетить www.4images.com/ntperl- целая директория, посвященная
Perl для Windows NT. А дальше - выходим на оперативный
простор : банк CGI-ресурсовwww.cgi-resources.com; каталог докумнетации по Perl
www.mincom.com/mtr/perl/catalog.html, учебник
по CGI и PERL - например,www.moonbase.com/resources/cgi.html.
И так далее; проблема скорее не в том, чтобы найти, а в том,
чтобы переварить. Удачи!
|