Раздел: Админство

IIS+PHP+MySQL

Добрый день, в этом посте я расскажу вам, как поставить вот такую нестандартную связку, как IIS 7 + PHP 5.3.2 +MySQL 5.1.46. Обычно, PHP и MySQL ставят в связке с Apache, а IIS  более ориентирован на работу с чисто майкрософтовскими продуктами вроде ASP, .Net, MSSQL итд. Однако, чего только не может случиться, в нашей жизни. Даже если вы раньше не сталкивались с необходимостью настройки веб-сервера, вы увидите, что это сделать легко в считанные минуты.

Как проинсталлировать IIS7 я покажу вам на примере Windows 2008 R2;  в windows 7 или windows vista всё делается практически аналогично, различия я буду комментировать.

Итак, установим IIS на windows 2008. Для этого откроем ServerManager, выберем пункт Roles (роли) и нажмём Add Roles:

Если вы впервые устанавливаете роли на сервере, то скорее всего вы увидите окно:

Нажимаем Next, и выбираем роль веб-сервера:

Нажимаем «Next». В следующем окне нужно добавить галочку CGI.

Суть технологии CGI в том, что некоторые программы(скрипты), могут не обрабатываться непосредственно самим веб-сервером (как, например, HTML), и эти скрипты отдаются сервером на отработку сторонней программе. IIS не обрабатывает PHP-код, поэтому мы будем отдавать его интерпретатору PHP как сторонней программе. Остальные галочки трогать не нужно, оставим всё по умолчанию.

Нажимаем Next, Затем Install. По окончанию инсталляции, закройте окно мастера установки кнопкой Close. Всё, IIS установлен, в ServerManager’е вы можете видеть, что соответствующая роль добавлена.

Инсталляция на windows 7 или vista немного отличается Для установки IIS в этих операционных системах необходимо открыть окно установки и удаления программ:

Start (Пуск) -> Control Panel (Панель управления) -> Programs and Features (Программы и компоненты)

Появится вот такое окно:

После чего выберите «Turn Windows Features on or off» (Включение и отключение компонентов Windows). В появившемся окне Windows Features (Компоненты Windows) выделите пункт Internet Information Services(службы IIS); при этом выделятся не все подпункты, а только те, которые относятся к базовой установке по умолчанию. Далее, нужно раскрыть пункт Internet Information Services (Службы IIS), в нём раскрыть подпункт World Wide Web Servises (Службы интернета), в нём — раскрыть подпункт Application Development Features (Компоненты разработки приложений), и выделить подпункт CGI и нажать OK.

По завершении инсталляции IIS можно считать установленным.

В windows 2008, IIS можно настраивать (управлять им) двумя способами:

1) Войти в ServerManager, выбрать вункт Roles, в нём — WebServer IIS, в нём - Internet Information services Manager (Диспетчер служб IIS).

В правой части консоли (в панели сведений) отобразится IIS, который сам по себе, как и консоль mmc, состоит из дерева консоли и панели сведений. Такой вид вложенности не очень удобен, поэтому я всегда работаю с IIS непосредственно, а не через Server Manager. Для того чтобы его запустить отдельно, в windows2008 и windows 7 нужно выбрать:
Start(Пуск)->Administrative Tools (Администрирование)-> Internet Information Services (IIS) Manager(Диспетчер служб IIS)


Установка и настройка PHP.

PHP можно скачать с официального сайта (благо, бесплатное ПО) http://www.php.net/

На момент написания статьи последняя версия php была 5.3.2

Настоятельно рекомендую скачивать php в виде инсталлятора, а не в виде архива. Это гораздо удобнее, позднее я покажу почему.

PHP существует в двух вариантах сборки, нам нужна сборка «Non Thread Safe», что означает, что безопасность потоков PHP сервер отрабатывать не будет (в отличие от версии «Thread Safe»). В нашем случае это нужно потому, что IIS сам отвечает за эту функцию.

Скачав инсталлятор, запускаем его.

Жмём Next.

Ставим галочку, Next.

Указываем нужное нам расположение для php.

На этом шаге нужно быть внимательным. Пункт IIS FastCGI означает, что в процессе установки автоматически будет настроен IIS для взаимодействия с PHP. Этот пункт мы выбирать не будем, чтобы настроить всё самим. Мы выберем пункт OtherCGI. Этот пункт означает, что у нас будет установлен cgi-обработчик php-cgi.exe, но не будет произведено никаких настроек (мы выбираем этот вариант, чтобы посмотреть, как всё настраивается вручную на IIS-сервере). Пункт Do not setup a web-server означает, что cgi-обработчика php-cgi.exe у нас не будет. Итак, выбираем второй пункт, Жмём Next.

Здесь всё оставляем по умолчанию: чтобы php не перерегистрировал все файлы .php на себя, нужно чтобы пункт «Register *.php files open automatically with php» был недоступен (Пусть лучше php-файлы открываются вашим браузером или редактором кода).  Так же нужно убедиться, чтобы пункт MySQL были доступен, чтобы php мог работать с СУБД MYSQL.

Жмём Next, затем Install. по окончанию инсталляции нажимаем Finish.

Теперь идём в папку C:PHP

В этой папке должен находиться файл php.ini, содержащий все настройки PHP. В версии PHP 5.3.2, устанавливаемой с помощью инсталлятора, этот файл есть, но в других версиях PHP его может и не быть. Если в вашей версии PHP по умолчанию этого файла нету, то должны быть заготовленные шаблоны этого файла, содержащие различные настройки. Это могут быть файлы с названиями «php.ini-development», «php.ini-production» итп. Если у вас нет файла php.ini, скопируйте один из шаблонов (в эту же директорию), и переименуйте его в php.ini. Сам шаблон лучше не переименовывать, поскольку, если вы испортите файл php.ini у вас всегда будет под рукой шаблон.

Итак, открываем php.ini с помощью текстового редактора и изменяем там некоторые настройки.

1. Находим параметр open_basedir

Строка с этим параметром будет выглядеть так:
;open_basedir =
Обязательно нужно раскомментировать (убрать точку с запятой в начале строки). Значение параметра должно соответствовать директории, в которой будет лежать ваш сайт. Например, у нас это будет директория C:test
open_basedir = C:test

2. Находим в блокноте параметр fastcgi.impersonate

Если перед ним в строке стоит знак комментария ; (точка с запятой):;fastcgi.impersonate = 1;
то его тоже нужно раскомментировать. Значение параметра должно быть равно 1:
fastcgi.impersonate = 1;

Этот параметр нужен, чтобы IIS мог управлять доступом к файлу php.ini (FastCGI под IIS (в ОС на базе WINNT) поддерживает возможность имперсонации прав безопасности вызывающего клиента. Это позволяет IIS определить контекст безопасности, в котором выполняется запрос.)

3. Находим параметр cgi.fix_pathinfo
Если этот параметр закомментирован, мы его тоже должны раскомментировать и присвоить ему значение 1:
cgi.fix_pathinfo=1
Этот параметр нужен для того, чтобы php корректно работал с переменной Pathinfo.

Он тоже должен быть раскомментирован и равен 1.

4. Находим параметр cgi.force_redirect
Он тоже должен быть раскомментирован; его значение должно быть равно нулю:
cgi.force_redirect = 0

Директива cgi.force_redirect необходима для обеспечения безопасности во время работы PHP в качестве CGI под большинством веб-серверов. Если оставить неопределённым, по умолчанию PHP включает эту директиву. Однако, для корректной работы IIS эту функцию советуют выключать.

5. Далее, необходимо найти строку extension=php_mysql.dll и убедиться, что она раскомментирована.

Она отвечает за работу PHP с модулями СУБД MySQL.

Прежде чем устанавливать MySQL, нужно проверить взаимодействие PHP и IIS.

У вас должна быть создана директория, в которой у вас будет лежать ваш сайт (та директория, которую вы указали в параметре  Open_basedir). В нашем случае, это директория C:test

Если вы ещё не создали эту директорию, создайте её.

Затем, откройте IIS:

Start(Пуск)->Administrative Tools (Администрирование)-> Internet Information Services (IIS) Manager(Диспетчер служб IIS)

Нажмите правой кнопкой мыши на раздел Sites(Сайты) и выберите пункт Add Web Site (добавить веб-сайт).

Далее, в открывшемся окне указываем следующие параметры:

Site name(Имя сайта) — любое имя, которым будет в IIS обозначаться ваш сайт. Пусть это будет My test site.
Physical path (физический путь) — папка, в которой будет лежать ваш сайт (в нашем случае, как мы уже договаривались, это будет папка C:test)

Host name(Имя узла) — имя вашего сайта, которое вы будете набирать в адресной строке браузера, чтобы на него попасть. Пусть это будет testsite.

Остальные параметры можно оставить по умолчанию, нажимаем OK. Теперь, как вы можете видеть, в менеджере IIS создался ещё один пункт с вашим именем сайта. Выберем этот пункт (My test site), в правом окне появятся элементы управления вашим сайтом.

Выберем иконку Default Document (Документ по умолчанию), и дважды щёлкнем левой клавишей мыши. Вы войдёте в режим изменения параметром документа по умолчанию (здесь Документ по умолчанию — это тот файл, который веб-сервер обрабатывает, когда пользователь входит на сайт). Как правило, это index.html, index.asp, index.php итд. По умолчанию в IIS вы можете видеть следующие документы:

Очерёдность файлов здесь играет роль: если в директории есть файлы с названиями default.htm и index.html, то веб-сервер будет обрабатывать тот, который в списке стоит выше. Здесь мы должны добавить ещё один документ по умолчанию. Нажмём Кнопку Add(Добавить) в панели Actions(Действия) в правой части менеджера IIS. В появившемся окне введём: index.php и нажмём OK.

После этого в каталоге документов по умолчанию должен появиться пункт index.php

Далее, нам нужно опять нажать на иконку My test site, чтобы попасть в корневое меню управления нашим сайтом. Теперь нам нужно зайти в раздел Handler Mappings (Сопоставления обработчиков). Когда вы зайдёте в этот раздел, вы увидите:

Здесь в правой части менеджера IIS (в разделе Actions(Действия)) нужно нажать Add Module Mapping(Добавить сопоставление модуля). В появившемся окне вводим следующие данные:

Request path(путь запроса) — *php

Module(Модуль) — fastCGIModule

Здесь мы указываем, что файлы php будут отрабатываться по технологии FastCGI

Executable(Исполняемый файл) — С:PHPphp-cgi.exe

Эта программа, которая будет отрабатывать файлы PHP

Name(Имя) — любое имя для этого сопоставления модулей.

Нажимаем ОК.

На данном этапе менеджер IIS нам пока больше не понадобиться.

Теперь нам нужно отредактировать файл hosts, который находится по адресу:

C:WindowsSystem32driversetc

Нужно открыть его блокнотом и добавить в конец строчку:
127.0.0.1 testsite
Здесь testsite Должно соответствовать тому, что вы указали при настройке IIS, когда создавали новый сайт (поле hostname)
Сохраняем файл. Если файл не сохраняется из-за недостатка прав (ошибка Access Denied), попробуйте сохранить его на рабочий стол, а потом оттуда скопировать с заменой в папку C:WindowsSystem32driversetc
Обратите внимание, что файл hosts не должен иметь расширения!

Теперь, заходим в папку C:test и создаём там текстовый документ; переименовываем его в index.php, после чего открываем с помощью текстового редактора, и пишем там:
<?php
phpinfo();
?>

Сохраняем, закрываем. Таким образом мы создали файл, который содержит всего одну функцию на языке php, которая выводит информацию об установленном PHP.
Чтобы проверить, как работает веб-сервер, откройте веб-браузер и наберите в адресной строке test.
Вот как должен выглядеть результат:

Если результат выглядит именно так, то, значит, вы всё настроили верно.
На данный момент в этом списке настроек мы не увидим раздела MySQL, потому что мы его ещё и не поставили.

Далее, нужно скачать MySQL. (http://www.mysql.com/)

Вы можете скачать 64 или 32 битный инсталлятор для вашей операционной системы. После загрузки запускаем инсталлятор.

Нажимаем Next
Выбираем пункт Custom (ручная настройка параметром инсталляции), нажимаем Next.

В этом окне можно всё оставить по умолчанию и нажать Next, затем  Install.

По завершению инсталляции откроется окно:

Next

Next

В этом окне лучше снять галочку Register the mysql server now, ибо пока что мы не озабочены регистрацией, обновлениями и прочими делами. Оставим только первую галочку Configure the MySQL Server now(Настроить MySQL server сейчас). Нажимаем Finish.

Вас приветствует мастер настройки. Нажимайте Next.

В окне выбора типа конфигурации выбирайте Detailed Configuration(детальная конфигурация), чтобы самому вручную настроить все необходимые параметры и нажимайте Next.

На этом этапе мастер настройки спрашивает, как сильно MySQl может отъедать ресурсы вашего компьютера (оперативную память, дисковое пространство и ресурсы процессора). Вариант Developer Machine подразумевает минимальное использование MySQL’ем ресурсов вашего компьютера, вариант Server Machine — среднее использование ресурсов, Dedicated MySQL Server Machine означает, что ваш компьютер выделен полностью под MySQl и MySQL будет использовать все доступные ресурсы.

Здесь выбираем Multifunctional Database и жмём Next

В этом окне настройки предлагается выбрать директорию для хранения файлов данных innodb.Пусть это будет C:data

Innodb — это тип хранения данных. MySQL поддерживает работу с двумя типами хранения данных — MyISAM и Innodb.  По умолчанию MySQL сохраняет данные в виде MyISAM; к сожалению, настройки сохранения этого типа данных отсутствуют в мастере конфигурирования, потом настроим вручную.

Нажимаем Next.

В этом окошке выбираем количество возможных одновременных подключений к серверу. Первый вариант — не более 20 одновременных соединений, второй вариант — не более пятисот, третий — для установки нужного количества вручную. Выбирайте, что вам будет лучше.

Параметр Enable TCPIP Networking разрешает работу с MySQL из сети. В нашем случае, это не нужно. Если вы собираетесь работать с базами данных удалённо, то включите эту опцию. Так же можно указать порт, через который вы будете работать, и установка галочки Add firewall exception for this port создаст исключающее правило для этого порта.

Enable Strict Mode

В данном окне настройки требуется установить набор поддерживаемых символов. Настоятельно рекомендую выбрать параметр Best Support For Multilingualism, потому что в этом случае система будет использовать кодировку UTF-8  по умолчанию, что гарантирует наиболее полную поддержку всех языковых символов. Нажимаем Next.

В этом окне первый чекбокс отвечает за тип программы, которой будет являться MySQL-сервер. Если вы поставите галочку, программа будет являться службой Windows, что я и рекомендую сделать.

Launch MySQL server automatically отвечает за автоматический запуск службы при запуске Windows.

Чекбокс Include Bin Directory in Windows Path отвечает за то, чтобы добавить в переменную окружения Path директорию bin, которая содержит исполняемые файлы для работы с MySQL сервером (Директория bin находится в директории с установленным MySQL сервером. У меня эта директория находится в C:Program FilesMySQLMySQL Server 5.1bin). Таким образом, если вы поставите галочку, то после завершения настройки вы сможете работать с MySQL из командной строки, находясь в любой директории. Рекомендую отметить этот чекбокс. Нажимаем Next.

На данном этапе необходимо указать пароль администратора.

Enable root access from remote machines включает удалённый доступ суперпользователю root. В нашем случае это не обязательно.

Create an anonymous account создаёт анонимный аккаунт для использования баз данных, что может привести к небезопасному использованию СУБД. Этот пункт в данном случае нам тоже не нужен.

Нажимаем Next.

Всё, нажимаем Execute и дожидаемся окончания настройки. Когда настройка завершится, откройте вновь страницу testsite в браузере. На этот раз помимо всего прочего страница информации должна содержать всебе рездел с информацией о СУБД MySQL:

Когда мы в прошлый раз открывали эту страницу, то этого раздела не было. Теперь же, если вы всё сделали правильно, он должен появиться среди прочих разделов на странице.

Теперь, немного о том, где MySQL хранит Базы данных. Нам нужно открыть файл конфигурации MySQL-сервера my.ini, который хранится в директории, в которую вы проинсталлировали MySQL. У меня это C:Program FilesMySQLMySQL Server 5.1
Итак, открываем текстовым редактором файл my.ini и находим следующие строки:

#Path to the database root
datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/"

В этой директории MySQL будет сохранять свои базы MyISAM;

А в этой директории будут храниться базы Innodb (как видите, это именно та директория, которую мы выбрали при настройке MySQL):
innodb_data_home_dir="C:/Data/"
По желанию, вы можете здесь изменить эти пути сохранения баз.

Поздравляю, вы успешно настроили связку IIS+PHP+MySQL!

Теперь, небольшое послесловие.

Когда мы устанавливали PHP, в одном из этапов настройки мы выбрали установку CGI без настройки IIS-сервера. Если мы выберем пункт IIS FastCGI, то тем самым, упростим себе всю настройку IIS. К концу инсталляции IIS уже будет настроен на работу с PHP, т.е. в разделе Handler Mappings (Сопоставления обработчиков) уже будет добавлено сопоставление php-файлов обработчику, и в раздел Default Document (Документ по умолчанию) в конец списка(обратите на это внимание) добавлен пункт index.php. Эти настройки будут установлены на весь сервер, т.е. они будут наследоваться всеми вашими сайтами. Поэтому, если вы не хотите, чтобы все ваши сайты работали с PHP, или хотите произвести разные настройки для них, то, возможно, этот вариант выбирать не стоит.

Комментировать

Комментарии

13 − 11 =

  1. подскажите, пожалуйста, если у меня физический диск разбит на два С: и Н: и я хочу, чтобы один сайт хранился на диске С:, а другой на Н:. как нужно в таком случае произвести настройку? так как при доступе из локальной сети у меня загружается только тот что на диске с:, а при попытке загрузить тот, что на Н: дает ошибку 404.
    спасибо.

  2. @Olga
    По всей видимости, у вас некорректно настроен IIS.
    Когда вы добавляете новый сайт (Add Web Site) вы должны указать корневой каталог сайта, где лежит index.

  3. Страницы php, где используется соединение с mysql, начинают открываться где-то через 2 секунды, не меньше. Проверял — задержка всегда одинаковая, именно на строке соединения с бд. Страницы php, не использующие mysql, открываются быстро. Сервер mysql локальный, находится на той же машине где IIS.
    С чем это может быть связано?

  4. @HarpyWar
    Выяснил, что это время уходит на ресолвинг адреса localhost, на который php скрипты соединялись с mysql :)
    В hosts почему-то была закомментирована строка с локалхостом на свежеустановленной Windows Server 2008 R2.

  5. HarpyWar,
    хорошо, что разобрались, теперь и я буду знать )
    А почему локалхост оказался закомментированным — не известно?