Николай Лебедев
Web-мастер учебного центра Микроинформ
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, но сам я этого не проверял.
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 - тоже не бесплатный, бесплатна только версия на неделю.
Итак, залезаем на www.activestate.com, Perl for Win32, скачиваем Pw32i316.exe (примерно 1,5 Мб; 316 - номер версии, в дальнейшем вероятно, появится 317 и т.д. ). Cкачиваем там же PIISi316.exe (примерно 80 Кб; 316 - опять номер версии; он должен быть у обоих файлов одинаков)- это Perl for ISAPI.
а) Выбираем директорию под файлы 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 не
вступят в силу )
Ну например : 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'};
А вот дальше можно читать 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. И так далее; проблема скорее не в том, чтобы найти, а в том, чтобы переварить. Удачи!