Николай Лебедев
- Почему была написана эта заметка
- Кратко о 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_MACHINE\System\CurrentControlSet\Services \W3SVC\Parameters\ScriptMap
Там уже должна быть запись .plx:REG_SZ: c:\perl\bin\PerlIS.dll
( предполагается, что директория, выбранная в пункте а) -
c:\perl ). После этой записи надо добавить .pl:REG_SZ: c:\perl\bin\Perl.exe %s %s
Любопытно, что вот про эти %s %s - в FAQ от Evangelo Prodromou
- ни слова, а без них все как настоящее, но не работает.
f) Если потребуется SSI ( а наверняка потребуется ), то ровно в
том же месте Registry, прямо под двумя предыдущими записями делаем еще одну : .stm:REG_SZ: C:\WINNT\system32\inetsrv\Ssinc.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/html\n\n";
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 \r\n";
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.
И так далее; проблема скорее не в том, чтобы найти, а в том, чтобы переварить.
Удачи!
Литераура по IIS серверу
|