Почему была написана эта заметка
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, но сам я этого не проверял.
Кратко о PERL-модулях от Active State
Кратко о PERL-модулях от Active StateActive 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 - тоже не бесплатный, бесплатна только версия на неделю.
Что скачивать
Итак, залезаем на http://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 - важно, чтобы длинные имена файлов сохранились).
Устанавливаем модуль "Perl for Win32" : в возникшей директории BIN находим и запускаем perlw32-install.bat. Соглашаемся со всем, что предлагается.
Устанавливаем модуль "Perl for ISAPI" : в возникшей директории BIN находим и запускаем perlis-install.bat. Соглашаемся со всем, что предлагается, НО : расширение под файлы, которые система будет ассоциировать с perlis.dll лучше сменить с предлагаемого .PL на .PLX, или что нибуть в этом роде : по традиции .PL обычно резервируется под файлы, обрабатываемые perl.exe - главным файлом "Perl for Win32".
Еще одно действие понадобится для тех случаев, когда желательно непосредственно применять 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 - ни слова, а без них все как настоящее, но не работает.
Если потребуется SSI ( а наверняка потребуется ), то ровно в том же месте Registry, прямо под двумя предыдущими записями делаем еще одну :
.stm:REG_SZ: C:\WINNT\system32\inetsrv\Ssinc.dll
-мы ассоциируем файлы с расширением .stm с отвечающим за SSI .dll. Это .dll из комплекта IIS и никак с perl не связан. Расширение можно, видимо, при желании изменить, но это не может быть .htm . Разумеется, если вы при инсталляции выбрали другое название для директории с файлами IIS - его и проставьте.
Теперь кладем наши скрипты в какую-нибуть директорию внутри web и при помощи Microsoft Internet Service Manager ( Inetmngr ) прописываем ее как директорию web с правами Access : Read Execute. Те же права нужны кстати и для SSI.
Все. Перегружаем 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, который доступен во многих местах, например, на http://www.activestate.com/. Полезно посетить http://www.4images.com/ntperl/- целая директория, посвященная Perl для Windows NT. А дальше - выходим на оперативный простор : банк CGI-ресурсов http://www.cgi-resources.com/; каталог документации по Perl www.mincom.com/mtr/perl/catalog.html, учебник по CGI и PERL - например, www.moonbase.com/resources/cgi.html. И так далее; проблема скорее не в том, чтобы найти, а в том, чтобы переварить. Удачи!
8 8 8
| |