Установка підтримки PERL для IIS3 під Windows NT
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.
Існує не один, а декілька модулів від 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. Що викачувати
Отже, заходимо на http://www.activestate.com/, Perl for Win32, викачуємо Pw32i316.exe (приблизно 1,5 Мб; 316 - номер версії, надалі ймовірно, з’явиться 317 і так далі ). Завантажуємо там же 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 ““;
print “
print (”Hello, Perl !”);
print ““;
print ““;
А ось test2.plx використовує perlis.dll і пише на екрані “Здрастуйте, ПЕРЛ !”. Зверніть увагу : початковий рядок тут інший, ніж в test1.pl - саме так потрібний для perlis.dll.
print “HTTP/1.0 200 OK \r\n”;
print << "END";
Content-Type text/html
content="text/html; charset=windows-1251">
Здрастуйте, ПЕРЛ !
END
І нарешті, test3.stm видає на екран вашу IP-адресу використовуючи скрипт test3.pl і SSI.
content="text/html; charset=windows-1251">
Ваш IP-адрес
А відповідний скрипт test3.pl складається всього з одного рядка :
print $ENV{’REMOTE_ADDR’};
6. Що далі
А ось далі можна читати 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. І так далі; проблема швидше не в тому, щоб знайти, а в тому, щоб переварити. Успіхи!