Русские документы
Ежедневные компьютерные новости RSS rusdoc.ru  Найти :
Новости
Последние поступления
Книжный магазин
  Hardware:
Видеоустройства
Системные платы
Процессоры
Мобильные устройства
Аудиосистема
Охлаждение системы
Накопители информации
КПК и ноутбуки
Телефоны и связь
Периферия
Система
Сети
Разные устройства
 
  Programming:
Web-разработка
Языки программирования
Технологии и теория
Разработка игр
Программная инженерия
 
  Software:
Операционные системы
Windows 7
Базы данных
Обзоры программ
Графика и дизайн
   
  Life:
Компьютерная жизнь
Разные материалы
   
Партнеры
Публикация
Правовая информация
Реклама на сайте
Обратная связь
Экспорт в RSS Экспорт в RSS2.0
    Читать в Яндекс.Ленте



PHP на Windows и IIS7

Раздел: Programming / PHP @ 27.07.2008 | Ключевые слова: php iis7 windows версия для печати

Автор: Гайдар Магдануров
Источник: radiag.livejournal.com

На PHP написано много хороших приложений. Даже нет, очень много и некоторые из них очень хорошие, так почему бы не использовать эти приложения на Windows? Особенно, если внутренний портал работает на Windows, а на Unix машине крутиться внешний сайт компании - тогда можно сэкономить на инфраструктуре и разместить на Windows сервере еще и внешний сайт. Либо, если есть желание стандартизировать инфраструктуру и размещать сайты на Windows платформе, поскольку разработчики и пользователи работают на Windows платформе.

На сайте www.iis.net можно найти список популярных PHP приложений с инструкциями по установке на IIS. Для их запуска на IIS  не требуется изменения PHP кода.

Установка и настройка PHP для использования с модулем FastCGI.

Для начала, чтобы успешно использовать PHP на Windows, неплохо было бы PHP установить.

Шаг 1. Скачать PHP

На сайте PHP.net нужно скачать последную версию PHP для Windows. Для использования с FastCGI рекомендуется устанавливать версию PHP без контроля безопасности потоков, поскольку сам модуль FastCGI гарантирует, что выполнение происходит в одном потоке и поддержка контроля безопасности потоков в самом PHP привносит лишние проверки и блокировки, приводящие к значительному падению производительности. Поэтому выбираем Non-thread-safe Win32 binaries (версия 5.2.6 актуальна на момент написания этого сообщения).

Стоит отметить, что веряим Non-thread-safe была разработана специально для работы с FastCGI на IIS (первый релиз был в версии 5.2.1) и использовать в других средах не рекомендуется. Кстати, начиная с версии 5.2.2 Zend серьезно работает над оптимизацией производительности PHP под Windows, что не может не радовать. Если сравнить версии 5.2.1 и 5.2.2, то разницу в скорости обработки запросов можно легко увидеть с помощью простого нагрузочного теста.

Шаг 2. Установка PHP

Установка осуществляется совсем просто: поскольку мы скачали архив с исполнимыми файлами, достаточно развернуть этот архив, например, в директорию C:\Web\PHP.

В качестве базовой конфигурации воспользуемся рекомендованными установками: cделаем копию файла php.ini-recommended в php.ini в этой же директории и откроем его для редактирования, после чего пройдем файл сверху расскоментируя следующие строки, дабы обеспечить безопасность и совместимость с большинством PHP приложений:

  • open_basedir = директория, где размещены PHP приложения.
    Указание директории ограничит права доступа к файлам PHP приложений только этой директорией. Удобно переопределять эту настройку в файлах конфиграции непосредственно для каждого приложения, однако не помешает установить эту настройку и указать корневую директорию всех PHP приложений. Например, C:\inetpub\PhpSites.
  • cgi.force_redirect = 0
    По умолчанию установлено 1, но необходимо установить в 0, поскольку IIS контролирует безопасность выполнения PHP и в этой настройке нет необходимости. Более того, включение может привести к неожиданным результатам. При использовании с другими web-серверами на Windows эту настройку необходимо включить.
  • cgi.fix_pathinfo = 1
    PHP будет устанавливать имя файла в переменной SCRIPT_FILENAME, если установить значение 0, то имя файла будет в переменной PATH_TRANSLATED, что может нарушить совместимость с большинством приложений.
  • fastcgi.impersonate = 1;
    FastCGI позволяет процессу имперсонироваться используя контекст клиента, вызывающего процесс. Этот механизм работает только под FastCGI/IIS, например на Apache на Windows это работать не будет.
  • short_open_tag = On
    Большинство приложений используют короткие теги , поэтому будет не лишним включить их поддержку.
  • display_errors = On
    На время проверки и отладки PHP приложений на FastCGI стоит включить вывод сообщений об ошибках.

Шаг 3. Проверка работоспособности PHP

Пока мы не сконфигурировали IIS, проверить работоспособность интерпретатора можно просто, например, выполнив команду c:\web\php\php.exe -info > c:\test.txt

Установка и настройка модуля FastCGI на IIS7.

Если у вас у IIS7, то что-то мне подсказывает о названии вашей операционной системы - Windows Vista? Не угадал, тогда Windows Server 2008! Либо вы хакер и поставили IIS7 еще-куда-то, но это нестандартное решение и мы его не поддерживаем ;).

Шаг 1. Установка FastCGI

Хочу обрадовать сразу - в IIS7, идущем с Windows Server 2008 и Windows Vista Service Pack 1 модуль FastCGI уже включен. Его необходимо лишь подключить в настройках. Для этого на Vista нужно открыть Control Panel -> Programs и выбрать "Turn Windows Features On or Off":

ControlPanel - Programs

После этого необходимо установить фичу в IIS: Internet Information Services -> World Wide Web Services -> Application Development Features -> CGI. При этом будет установлена поддержка и CGI и FastCGI.

IIS_CGI_Feature

На Windows Server 2008 процесс аналогичен: Server Manager -> Roles -> Add Role Services -> Web Server -> Application Development -> CGI.

Собственно все, что требуется для включения модуля FastCGI.

Шаг 2. Конфигурация IIS7

1. Открыть IIS Manager, выбрать узел (сервер) для которого нужно настроить поддержку PHP. И далее выбрать Handler Mappings.

HandlerMappings HandlerMappingsOpened

2. Выбираем на странице Handler Mappings ссылку Add Module Mapping и заполняем окно следующими значениями:

Request path: *.php (обработка всех файлов с расширением .php)
Module: FastCgiModule (модуль FastCGI)
Executable: C:\Web\PHP\php-cgi.exe (путь к PHP)
Name: PHP (имя для удобства)

PHPHandler

После добавления этой настройки появится окно с вопросом о регистрации FastCGI приложения для этого обработчика. Подтверждаем.

Описанные выше действия привели к созданию в директории PhpSites следующего web.config файла:

xml version="1.0" encoding="UTF-8"?>
    <
configuration>
        <
system.webServer>
            <
handlers>
                <
add name="PHP" path="*.php" verb="*"
                    modules
="FastCgiModule" scriptProcessor="C:\Web\PHP\php-cgi.exe"
                    resourceType
="Unspecified" />
            handlers>
        system.webServer>
    configuration>
* This source code was highlighted with Source Code Highlighter.

Теперь можно переходить к проверке работоспособности PHP.

Шаг 3. Проверяем корректность настройки

В директории узла для которого мы сконфигурировали PHP создаем файл index.php:

    phpinfo();
?>

И обращаемся к этому файлу через HTTP запрос. В результате, если все хорошо и наша карма не испорчена, запрос будет корректно обработан:

phpinfo

Рекомендации по настройке PHP на IIS7

Разумеется, при использовании PHP на IIS7 могут возникать подводные камни, с которыми нужно бороться, чтобы достичь ожидаемого результата (замечательной работы PHP приложений на Windows). Молотки для разбивания часто встречающихся камней приведены ниже.

Частота перезапуска процессов PHP

Поскольку при использовании PHP на IIS7 с использованием FastCGI модуля, сам модуль FastCGI берет на себя управление процессами и ресурсами, необходимо убедится, что механизм перезапуска процессов (recycling) в PHP не будет мешать FastCGI. Это легко сделать, если настроить FastCGI так, чтобы он всегда перезапускал процессы раньше, чем это сделает PHP.

В настройках FastCGI существует настройка instanceMaxRequests, определяющая после обработки какого количества запросов, процесс будет перезапущен. В PHP аналогичный параметр задается значением переменной PHP_FCGI_MAX_REQUESTS. Очевидно, чтобы дать возможность FastCGI рулить процессом, достаточно установить instanceMaxRequests <= PHP_FCGI_MAX_REQUEST. Это удобно сделать, отредактировав файл applicationHost.config (прячется в директории C:\windows\system32\inetsrv\config\).

В конфигурации должна быть следующая информация:

<fastCgi>
    <
application fullPath="C:\inetpub\php\php-cgi.exe"
       
maxInstances="4" instanceMaxRequests="10000">
    <
environmentVariables>
    <
environmentVariable name="PHP_FCGI_MAX_REQUESTS" value="10000">
    environmentVariables>
    application>
fastCgi>

* This source code was highlighted with Source Code Highlighter.

Использование нескольких версий PHP

Поскольку разные версии PHP могут использоваться в приложениях, которые размещаются на сервере, то хорошо бы было дать возможность использовать разные версии для разных сайтов.

В файле конфигурации applicationHost.config достаточно определить секции для разных версий PHP:

<fastCgi>
    <
application fullPath="C:\inetpub\php\php-cgi.exe">
   
   ...
    application>
    <
application fullPath="C:\inetpub\php4\php4.exe">
   
   ...
    application>
    <
application fullPath="C:\inetpub\php41\php41.exe">
   
   ...
    application>
fastCgi>

* This source code was highlighted with Source Code Highlighter.

А уже для каждого из сайтов конфигурируется модуль, использующий ту или иную версию (можно использовать интерфейс, который описан выше, а можно отредактировать конфигурацию в тексте):

<handlers>
    <
add name="PHP4" path="*.php" verb="*" modules="FastCgiModule"
       
scriptProcessor="C:\inetpub\php\php41.exe"
        resourceType
="Unspecified" />
handlers>

* This source code was highlighted with Source Code Highlighter.

Использование разных наборов настроек PHP

Если есть желание настраивать PHP по-разному для разных сайтов, то опять же все это можно описать через настройки конфигурации в applicationHost.config.

<fastCgi>
   <application fullPath="C:\inetpub\php\php-cgi.exe"
      arguments="-d my.website=wordpress">
     <environmentVariables>
       <environmentVariable name="PHPRC" value="C:\inetpub\wordpress" />
     environmentVariables>
   application>
   <application fullPath="C:\inetpub\php\php-cgi.exe"
      arguments="-d my.website=phpsite">
     <environmentVariables>
       <environmentVariable name="PHPRC" value="C:\inetpub\phpsite" />
     environmentVariables>
   application>
 fastCgi>
 * This source code was highlighted with Source Code Highlighter.

После этого, настройки связываются с соответствующими сайтами в web.config:

<system.webServer>
   <handlers accessPolicy="Read, Script">
     <add name="PHP" path="*.php" verb="*" modules="FastCgiModule"
         scriptProcessor="C:\inetpub\php\php-cgi.exe|-d my.website=wordpress"
       resourceType="Unspecified" requireAccess="Script" />
   handlers>
 system.webServer>
 * This source code was highlighted with Source Code Highlighter.

В соответствии с приведенной конфигурацией, php.ini нужно разместить в директории каждого из сайтов.

При редактировании настроек, стоит строго соблюдать совпадение путей к соответствующей версии PHP и с applicationHost.config и в web.config, чтобы избежать неожиданных результатов, если пути будут перепутаны.

На первый взгляд редактирование конфигурации может показаться сложным и неудобным процессом, но как только вы привыкните к конфигурации в XML и распространению настроек методом Ctrl+C, Ctrl+V, вы будете удивляться наличию других способов конфигурации :)

Настройки безопасности PHP

В php.ini мноо разных настроек, многие из которых влияют на безопасность использования PHP. Настроить все подходящим образом, достойное дело.

Set allow_url_fopen=Off        ; использование URL для операций с файлами
Set allow_url_include=Off
register_globals=Off        ; отмена регистрации глобальных переменных
open_basedir="c:\inetpub\"    ; ограничение на директорию, в которой работает PHP
max_execution_time=30     ; ограничение времени выполнения скриптов
max_input_time=60
memory_limit=16M         ; ограничение на размер используемой памяти
upload_max_filesize=2M
post_max_size=8M
max_input_nesting_levels=64
display_errors=Off         ; отключение сообщений об ошибках
log_errors=On
error_log="C:\error.log"
expose_php=Off         ; скрыть присутствие PHP

Заключение

PHP на Windows - это не просто интересно и удобно, главное, что это работает. А команда IIS работает над тем, чтобы PHP работал на Windows не хуже, чем на Unix/Linux (конечно, стараются сделать лучше).

Поскольку это новая тема для Microsoft, то мы можем сделать какие-то ошибки, можем чего-то не замечать и не понимать, поэтому нам очень важно получать комментарии от вас - разработчиков и администраторов. Пишите в комментариях ваши пожелания и проблемы, которые вы видите сейчас в PHP на Windows, а мы будем стараться проблемы решать, а пожелания реализовывать.

Это интересно:








версия для печатиРаспечатать статью


Вернуться в раздел: Programming / PHP


Реклама:
Читать наc на:

Add to Google
Читать в Яндекс.Ленте






Rambler's Top100
© Copyright 1998-2012 Александр Томов. All rights reserved.