Кирилл Сухов
WIMP – Windows, IIS, MySQL, PHP
Установка PHP-приложения ISS/Windows 2008 Server
PHP всегда работал на Windows.
Проблема в том, что никогда достаточно продуктивно.
Энди Гатманс (Andi Gutmans),
сооснователь и технический директор компании Zend
Появившийся в седьмой версии Internet Information Services модуль FastCGI позволяет эффективно использовать все возможности препроцессора PHP на платформе Microsoft Windows. Сегодня мы попробуем установить необходимые компоненты и развернуть PHP-приложение на базе ISS 7/Windows 2008 Server.
Несмотря на то что язык программирования PHP пришёл из мира UNIX/Linux, на платформе Microsoft Windows он утвердился почти со дня своего появления. Сначала такое сочетание использовалось исключительно как площадка для разработки, затем стало активно использоваться для внутрикорпоративных интранет-сайтов. Возможность установки препроцессора PHP на Internet Information Server/Services была уже начиная с третьей версии последнего, и она не осталась невостребованной.
Но полноценный интернет-сайт на связке ISS/PHP был скорее экзотикой. Причина проста – PHP на IIS устанавливался в качестве ISAPI-модуля или простого бинарного cgi-обработчика. Первый вариант урезал некоторые возможности интерпретатора, а второй существенно снижал производительность.
С выходом ISS 7 положение может радикально измениться. Новый модуль – FastCGI вполне способен довести производительность до приемлемого «промышленного» уровня. Это касается, разумеется, не только PHP, FastCGI позволяет работать с любым интерпретатором, как то Perl, Python, Ruby. Но именно разработчики ядра PHP из компании Zend Technologies Ltd тесно сотрудничали с программистами Microsoft в процессе создания последними нового модуля. Была даже выпущена специальная сборка PHP, но об этом чуть позже.
Сейчас мы попытаемся установить препроцессор PHP на Internet Information Services, работающий на платформе Windows 2008.
Установка модуля FastCGI
Прежде всего запустим IIS и убедимся, что он работает. Для этого раскрываем «Start -> Administrator Tools -> Server Manager». Раскроется окно консоли MMS Server Manager. В левой его части раскроем ветку (обвязку) Roles и выберем там Web Server(IIS) (см. рис. 1).
Рисунок 1. Консоль Server Manager. ISS найден и работает
Если там его нет, значит, IIS не добавлен в роли вашего сервера и следует воспользоваться командой Add Roles.
Отсюда, из графического интерфейса, можно запускать, останавливать, перезапускать сервер, управлять связанными с ним системными службами и ролями.
Работоспособность IIS можно проверить, раскрыв браузер и набрав адрес http://localhost. Если всё в порядке, мы увидим стартовую страничку ISS .
На той же панели смотрим раздел Role Services и ищем сервис CGI (который подразумевает возможность использования как CGI, так и FastCGI-модулей).
Если таковой не установлен, воспользуемся командой Add Role Services и выберем CGI («Web Server -> Application Development -> CGI») из предложенного списка ролей .
Установка PHP
Теперь приступим к установке PHP. Скачиваем последнею версию препроцессора для платформы Windows. В данном случае это PHP 5.2.8, причём желательно выбрать PHP 5.2.8 Non-thread-safe, так как контроль безопасности потоков совершенно не нужен при однопоточном выполнении скриптов CGI-модулем. Эта версия была специально разработана для функционирования под управлением FastCGI IIS, и разработчики компании Zend серьезно поработали над оптимизацией производительности PHP под Windows.
Если вы выбрали installer, то всё, что нужно после скачивания – это запустить инсталлятор, уточнить месторасположение PHP (я выбрал C:\PHP), уточнить сервер (обратите внимание на варианты на рис. 2: выбираем, разумеется, IIS FastCGI) и выбрать список желаемых расширений. После завершения установки проведём небольшую проверку на работоспособность интерпретатора.
Рисунок 2. Выбираем веб-сервер для установки PHP
Для этого создадим в папке C:\PHP файл start.php со следующим содержимым:
<?php
echo "test php 5.2";
?>
Затем, открыв консоль, выполним команду:
C:\PHP>php start.php
Как видите, всё работает.
Теперь выполним некоторые настройки интерпретатора PHP, влияющие на его работу в составе FastCGI-модуля.
Директива cgi.fix_pathinfo обеспечивает поддержку правильных переменных PATH_INFO/PATH_TRANSLATED для CGI. По умолчанию отключена, мы включаем (устанавливаем значение равным 1).
Директива cgi.force_redirect необходима для обеспечения безопасности во время работы PHP в качестве CGI под большинством веб-серверов и по умолчанию включена. В нашем случае её не только можно, но и нужно выключить.
Директива cgi.redirect_status_env – выключаем во избежание путаницы с переменными окружения.
Директива fastcgi.impersonate – поддерживает под ISS возможность имперсонации прав безопасности вызывающего клиента. Включаем.
Остальные директивы, такие как error_reporting, open_base_dir и т. д., устанавливаем как обычно, как это соответствует нашим задачам.
Настройка Internet Information Services
Снова откроем Server Manager и перейдём в Internet Information Services (IIS) Manager («Server Manager -> Roles -> Web Server -> Internet Information Services (IIS) Manager»). Здесь мы выберем сервер, для которого необходимо добавить поддержку PHP (у меня это mysite, при необходимости можно там же создать свой узел).
Далее выбираем пункт Handler Mappings, а там команду Add Module Mapping. Заполняем получившуюся форму следующим образом, как показано на рис. 3. Я думаю, что тут ничего не нуждается в комментариях. После подтверждения формы появится запрос о регистрации нового FastCGI-обработчика, на который следует ответить согласием.
Рисунок 3. Добавляем обработчик сценариев PHP
Теперь в корне нашего сайта (если мы использовали каталог по умолчанию, то это будет C:\inetpub\wwwroot) создадим файл test.php следующего содержания:
<?php
phpinfo();
?>
Запустим его, набрав в браузере адрес http://localhost/test.php. Если всё было сделано правильно, результат должен быть аналогичным страничке, показанной на рис. 4.
Рисунок 4. PHP работает!
Вот и всё, PHP установлен и можно размещать на IIS необходимые нам веб-приложения. Правда, эти приложения наверняка используют какую-либо СУБД, и весьма вероятно, что это MySQL.
Конечно, в идеале хорошо бы их заставить работать с MSSQL-сервером, но здесь мы сталкиваемся с проблемами, причём стоимость СУБД от Microsoft не является главной из них. Дело в том, что диалект SQL, используемый MySQL, довольно сильно отличается от TSQL, и скрипты, работающие с СУБД, придется существенно модифицировать. Это отдельная большая тема, а пока просто установим на Windows 2008 Server СУБД MySQL.
Установка MySQL
Тут не должно возникнуть трудностей. Качаем дистрибутив MySQL со страницы – http://dev.mysql.com/downloads, и запускаем инсталлятор. После нескольких уточняющих вопросов СУБД будет установлена, и поступит предложение о редактировании начальной конфигурации. Согласимся.
На первом шаге выберем пункт Detailed Configuration, затем последует вопрос о типе сервера, выбираем Server Machine (для разработки, в общем-то, больше подходит вариант Developer Machine с минимальным использованием памяти, но в любом случае эти настройки можно исправить и после установки).
На следующем этапе выберем тип использования СУБД (Multifunctional Database), затем уточняем диск и место для хранения файлов данных таблиц InnoDB (если, конечно, не устраивает размещение по умолчанию, меня – вполне).
Далее задаём примерное число одновременно обслуживаемых соединений и уточняем способы их обработки, потом сетевые опции и порт соединения и, наконец, кодировку по умолчанию (везде, кроме кодировки, оставляем предлагаемые значения, кодировку, если нет других соображений, ставим utf-8).
Следующим этапом уточняем способ запуска MySQL (если нет других весомых соображений, выбираем Install As Windows Service), задаём пароль пользователя root. После этого применяем настройки.
Для проверки раскрываем запущенные службы («Start -> Administrative Tools -> Services») и находим MySQL в списке служб (должна запускаться автоматически).
Теперь займёмся установкой одного из самых популярных PHP-приложений системы управления контентом (CMS – Content Management System) Joomla!. Сначала скачаем последний стабильный релиз системы со страницы загрузки (http://www.joomla.org/download.html). На сегодняшний момент это версия 1.5.9.
В панели IIS Manager командой Add Site (доступной в контекстном меню) создадим новый сайт myjoomla (см. рис. 5), задав его физическое расположение как C:\inetpub\wwwroot\myjoomla, распакуем туда скачанный архив.
Рисунок 5. Добавляем новый сайт
Теперь в панели IIS Manager раскроем сайт myJoomla, выберем пункт Default Document и добавим в раскрывшийся список index.php.
Теперь в браузере набираем адрес http://localhost/myjoomla/installation/index.php и попадаем в программу-инсталлятор Joomla!. После выбора языка будет произведена детальная проверка системы, результат которой виден на рис. 6. Как мы видим, препятствий к установке CMS нет.
Рисунок 6. Всё в порядке. Можно начинать
Далее ознакомимся с лицензионным соглашением (GPL) и установим параметры базы данных. Один нюанс – до этого в MySQL должен быть создан пользователь, от которого joomla будет общаться с БД (в моём случае это Geol), обладающий соответствующими правами. Можно, конечно, поставить параметры пользователя root, но сами понимаете, это не лучшее с точки зрения безопасности решение.
Следующим этапом установки станет конфигурация ftp-акаунта (опускаем), затем будет предложено ввести некоторые параметры будущего сайта. Если вы никогда раньше не имели дела с движком Joomla!, настоятельно рекомендую установить флажок в пункте «Установить демо-данные» и установить их, так будет значительно легче разобраться. Остальные настройки не должны вызвать вопросов.
Теперь всё готово к установке. Нажимаем «Далее» и… Вот тут сервер порадовал меня 500-й ошибкой. Вообще это был единственный сбой и довольно легко устранимый. После несложного расследования было установлено, что файлы и папки дистрибутива joomla записаны у меня на сервере с атрибутом read only. Что делать – надо привыкать к законам Windows. После исправления и повторной процедуры инсталляции всё сработало.
Теперь удаляем или переименовываем папку C:\inetpub\wwwroot\myjoomla\myjoomla\instalation, заходим на только что созданный портал по адресу http://localhost/myjoomla/ и наслаждаемся полученным результатом (см. рис. 7).
Рисунок 7. Наш портал работает!
Я не собираюсь тут излагать основы работы с CMS Joomla!, в конце концов, на эту тему написана не одна книга (на всякий случай администрировать портал вы можете, зайдя по адресу http://localhost/myjoomla/administrator/ и постаравшись вспомнить логин и пароль администратора, созданный вами при установке), да и цель этой небольшой статьи была не эта. Мне хотелось показать допустимость и жизнеспособность PHP-решений средней тяжести на платформе Windows 2008 Server/ISS, и, по-моему, это удалось. За кадром осталась работа PHP с MSSQL Server, такой интересный инструмент, как Web Platform Installer, но я надеюсь исправить эту несправедливость в ближайшее время.