В данной статье мы научимся устанавливать PHP на Windows Server. Существует несколько способов установки PHP, включая PHP Manager for IIS от Microsoft, но мы остановимся на универсальном способе установки, который позволит установить PHP даже без привязки, например к IIS. Интегрировать PHP и IIS не сложно.
Для каждой версии PHP существует два варианта PHP: Non Thread Safe и Thread Safe
Thread Safe — потоко безопасная. Выбираем этот вариант, если PHP используется как mod_php (модуль Apache). В большинстве случаев, в связке с веб-сервером IIS, для операционной системы Windows Server вариант Thread Safe не подходит.
Non Thread Safe — потоконебезопасная версия PHP. Используется в случаях, когда PHP запускается через CGI и каждый поток, это отдельный, изолированный от других процесс CGI и нет необходимости в потокобезопасноcти. При этом скорость обработки запросов выше. Non Thread Safe также необходимо выбирать, если планируется использовать FastCGI. Как раз этот режим работы рекомендуется использовать в работе IIS + PHP.
Для установки PHP необходимой версии, перейдем на страницу скачивания PHP для Windows и скачаем zip архив VS16 x64 Non Thread Safe необходимой нам версии PHP. В данном примере будем использовать PHP 8.1
Далее, создадим на диске сервера папку, в которую необходимо разархивировать скачанный архив. Например, C:\php
Кроме того, для работы PHP на операционной системе Windows необходим пакет Microsoft Visual Studio.
Так как мы выбрали версию VS16 x64, на этой же странице сайта есть ссылка на скачивание необходимой версии Microsoft Visual Studio, а именно Visual Studio 2015-2019
Скачаем и установим: Во время установки не изменяем предлагаемые настройки и дожидаемся завершения.
Дополнительно рекомендуется прописать путь к PHP в глобальной переменной PATH. Для этого откроем окно Свойств системы: Пуск — Выполнить и выполним команду
control system
Далее откройте окно дополнительных свойств системы (Advanced sysytem setting) — вкладка Дополнительно (Advanced) — нажмите кнопку Переменные среды (Environmant Variables)
Добавьте путь к папке, в которой размещен PHP в значение переменной PATH. В нашем случае, это папка C:\php; (после указанного пути обязательно поставьте точку с запятой)
Сохраните изменения, поочередно нажимая ОК в открытых окнах.
Чтобы узнать установленную версию PHP, в окне командной строки выполним команду
php -v
При этом нет надобновти перехода в каталог С:/php так как ранее путь к исполняемому файлу PHP был добавлен в переменные окружения.
В данной статье мы научились устанавливать PHP необходимой версии на Windows Server.
@echo off REM download .ZIP file of PHP build from http://windows.php.net/downloads/ REM path to directory into which PHP .ZIP file was decompressed (no trailing \) set phppath=c:\php REM Clear current PHP handlers %windir%\system32\inetsrv\appcmd clear config /section:system.webServer/fastCGI REM The following command will generate an error message if PHP is not installed. This can be ignored. %windir%\system32\inetsrv\appcmd set config /section:system.webServer/handlers /-[name='PHP_via_FastCGI'] REM Set up the PHP handler %windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI /+[fullPath='%phppath%\php-cgi.exe'] %windir%\system32\inetsrv\appcmd set config /section:system.webServer/handlers /+[name='PHP_via_FastCGI',path='*.php',verb='*',modules='FastCgiModule',scriptProcessor='%phppath%\php-cgi.exe',resourceType='Unspecified'] %windir%\system32\inetsrv\appcmd set config /section:system.webServer/handlers /accessPolicy:Read,Script REM Configure FastCGI Variables %windir%\system32\inetsrv\appcmd set config -section:system.webServer/fastCgi /[fullPath='%phppath%\php-cgi.exe'].instanceMaxRequests:10000 %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='%phppath%\php-cgi.exe'].environmentVariables.[name='PHP_FCGI_MAX_REQUESTS',value='10000']" %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='%phppath%\php-cgi.exe'].environmentVariables.[name='PHPRC',value='%phppath%\php.ini']"
PHP — широко используемый скриптовый язык программирования общего назначения, который часто применяется для разработки динамических веб-сайтов и веб-приложений. Он является одним из наиболее популярных языков программирования в веб-разработке благодаря своей гибкости, простоте использования и богатому функционалу.
В данном руководстве рассмотрим, как подключить PHP к веб-серверу на IIS. Это может быть необходимо проделать для того, чтобы работающий на IIS веб-сервер смог обрабатывать код, написанный на PHP. В результате у нас появиться возможность создавать веб-страницы с PHP-кодом.
Предварительная настройка сервера
Итак, в нашем распоряжении виртуальный выделенный сервер с Windows Server 2016, на котором установлен веб-сервер IIS. Если вы настраивали свой IIS-сервер в соответствии со статьёй нашего справочника, то сначала вам нужно будет добавить в настройках веб-сервера поддержку протокола CGI.
Для этого запустите Server Manager.
После чего перейдите Manage 🠖 Add Roles and Features.
Затем пройдите окна при помощи кнопки Next не внося изменений до окна Select server roles, где перейдите в Web Server (IIS) 🠖 Web Server 🠖 Application Development. После чего в открывшемся списке активируйте строку CGI. Для продолжения нажмите Next.
Следующие шаги так же пропустите при помощи кнопки Next. И для внесения требуемого изменения в настройку веб-сервера в окне Confirm installation selection нажмите Install.
После завершения установки роли CGI проинсталлируйте в системе распространяемый компонент Microsoft Visual C++ для Visual Studio 2015 — 2022 для 64-х разрядной системы.
После загрузки установщика установите галочку, означающую ваше согласие с условиями лицензионного соглашения, и нажмите Install.
Windows-дистрибутив актуальной версии PHP можно загрузить с официальной страницы PHP. В нашем примере мы загружаем zip-архив версии 8.3.4 для 64-х разрядных систем.
Содержимое архива распакуйте, например, в каталог PHP на диске C:.
После этого информацию о каталоге, содержащем файлы PHP, необходимо добавить в настройку переменных среды окружения. Для чего откройте Server Manager, перейдите в Local Server и нажмите в название вашего сервера в строке Computer name. В открывшемся окне переключитесь на вкладку Advanced и кликните в Environment Variables.
В нижней части открывшегося окна кликните в строку Path и нажмите Edit.
Для добавления новой переменной окружения нажмите New.
В новой строке наберите C:\PHP, затем нажмите ОК.
Чтобы информация о добавленной переменной сохранилась в системе, закройте открытые окна нажатием на ОК.
На следующем шаге откройте проводник, перейдите в каталог C:\PHP, отыщите там файл php.ini-production и переименуйте его в php.ini.
Чтобы убедиться в применении изменений в настройки, запустите командную строку и выполните там команду php -info. Вывод команды не должен содержать ошибок, и при этом на экране должна появиться подробная информация о версии PHP, компиляции, модулях, настройках конфигурации и многое другое.
Изменение настроек веб-сайта
Для того, чтобы соединить IIS и установленный на сервере PHP, необходимо произвести дополнительные настройки на веб-сервере. Чтобы сделать это, откройте Server Manager, перейдите в раздел IIS, нажмите правую кнопку мыши на строке с сервером и в открывшемся меню выберите Internet Information Services (IIS) Manager.
В открывшемся окне менеджера IIS кликните в строку с веб-сервером и перейдите в Handler Mappings.
Далее, в правой части окна кликните в Add Module Mapping.
В открывшемся окне добавления нового модуля заполните следующие поля:
Request path: здесь укажите*.php.Module: в этом поле из выпадающего списка выберитеFastCgiModule.Executable: здесь укажите исполняемый файл модуля —C:\PHP\php-cgi.exe.Name: в данной строке укажите название добавляемого модуля, в нашем примере это —PHP.
По окончании заполнения полей нажмите Request Restrictions.
Здесь из доступных радиокнопок выберите File or folder и нажмите OK.
Окно добавления модуля также закройте кнопкой ОК.
Далее в менеджере IIS откройте Default Document.
Затем в правой части окна кликните Add.
И укажите дефолтное имя PHP-страницы для нашего веб-сайта — index.php, и нажмите ОК.
Чтобы применить все внесённые в настройки сервера IIS изменения, необходимо перезапустить его. Для чего на имени веб-сервера нажмите правую кнопку мыши и кликните Stop. После того, как служба остановится, также нажмите правую кнопку мыши и кликните Start.
В итоге сервер IIS теперь сможет оперировать PHP-файлами. В качестве примера мы выведем информацию о PHP через веб-страницу. Для этого перейдите в каталог веб-сайта, например, C:\inetpub\your-domain.host, и создайте там файл index.php. Затем скопируйте в него следующее содержимое:
<?php phpinfo(); ?>
Затем сохраните созданный файл, откройте браузер и перейдите на свой веб-сайт набрав в строке браузера доменное имя сайта или его IP-адрес.
В нашем примере данная страница выглядит так:
Опубликовано:
Используемые термины: IIS, PHP, MySQL.
Чаще всего, PHP и MySQL устанавливается на серверы с Linux. Однако, при необходимости, можно настроить запуск и обработку PHP скриптов на Windows. Версии последней могут быть разные, например, Server 2008/2012/2016/2019 или не серверные системы, такие как, 7/8/10. Данная инструкция подойдет как для чайника, так и опытного специалиста (в качестве шпаргалки).
Устанавливаем IIS
Публикация сайта для PHP
Работаем с PHP
Устанавливаем
Настраиваем IIS + PHP
PHP Manager для управления
Установка MySQL
Установка IIS
Для установки веб-сервера, открываем Диспетчер серверов — переходим в Управление — Добавить роли и компоненты:
Если откроется окно с приветствием, нажимаем Далее:
При выборе типа установки выбираем Установка ролей или компонентов:
При выборе целевого сервера оставляем локальный сервер (или выбираем удаленный, если установка выполняется из удаленной консоли):
Среди ролей выбираем Веб-сервер (IIS) — во всплывающем окне кликаем по Добавить компоненты:
Также среди ролей в подразделе «Разработка приложений» ставим галочку для установки CGI — этот компонент нам нужен для работы PHP:
При выборе компонентов ничего не меняем — нажимаем Далее:
Откроется окно настройки роли веб-сервера — просто нажимаем Далее:
Выбор служб ролей — нажимаем далее или, при необходимости, выбираем FTP-сервер:
В следующем окне ставим галочку Автоматический перезапуск конечного сервера, если требуется и кликаем по Установить:
Дожидаемся окончания процесса установки.
Сразу после установки IIS запускается автоматически. Но, если что, его можно запустить с помощью команды iisreset:
iisreset /start
* если выполнить данную команду без опций, то она перезапустить веб-сервер.
Также мы можем открыть диспетчер служб (команда services.msc) и перезапустить Службу веб-публикаций:
Открываем браузер и вводим адрес http://localhost — должен открыться стартовый портал:
Развертывание отдельного сайта
Мы можем пропустить данный пункт, если хотим использовать сайт по умолчанию. Однако, в данной инструкции мы разберем пример, когда для сайта на PHP будет создана отдельная настройка.
Открываем Диспетчер серверов — кликаем по Средства — Диспетчер служб IIS:
Находим раздел сайты — кликаем правой кнопкой мыши по Добавить веб-сайт…:
Заполняем данные для нового сайта:
* где:
- Имя сайта — произвольно имя будущего сайта.
- Физический путь — путь до папки на сервере, где будут расположены файлы сайта.
- Тип — тип соединения (http или https). Для первого запуска обойдемся http. При необходимости, его можно всегда поменять или использовать оба типа одновременно.
- IP-адрес — если на сервере много IP-адресов, то мы можем выбрать конкретный, на котором будет работать сайт.
- Порт — сетевой порт, на котором будет работать сайт. Как правило, это 80 для http или 443 для https.
- Имя узла — доменное имя сайта, при обращении по которому должен открываться создаваемый сайт.
После заходим в каталог с сайтом (в нашем примере, это C:\inetpub\wwwroot\php) и создадим в нем файл index.html со следующим содержимым:
<h1>Hello from PHP site</h1>
Открываем браузер и переходим на созданный сайт, например, как в нашей инструкции — http://php.dmosk.ru. Мы должны увидеть страницу с написанным нами текстом:
Тестовый сайт создан.
PHP
Установка PHP
Для установки php на Windows переходим на страницу загрузки PHP — выбираем нужную нам версию, например, последнюю стабильную и переходим по ссылке для загрузки версии для Windows:
Откроется страница с несколькими версиями пакета — там как мы ставим PHP как FastCGI, нам нужна версия «Non Thread Safe» (не потокобезопасная), так как она будет работать быстрее. И так, скачиваем zip-архив на сервер:
Для установка PHP на Windows достаточно просто распаковать содержимое архива в любой каталог, например, C:\Program Files\PHP:
Делаем копию файла php.ini-production и переименовываем его в php.ini:
Открываем на редактирование данный файл и правим следующее:
open_basedir = C:\inetpub\wwwroot
…
cgi.force_redirect = 0
…
short_open_tag = On
* где open_basedir — директория, в которой будут разрешены PHP-скрипты; cgi.force_redirect — указывает будет ли скрипты обрабатываться при прямом запросе или только при запросе от веб-сервера. В IIS запросы контролируются самим веб-сервером, поэтому опция может оказать обратный эффект; short_open_tag — позволяет использовать короткий вид открывающих тегов для PHP.
Проверяем, что PHP работает. Открываем командную строку Windows — переходим в каталог с установленным PHP:
cd «C:\Program Files\PHP»
Запускаем php с параметром -m:
php -m
Мы должны получить список подключенных модулей:
[PHP Modules]
bcmath
calendar
Core
ctype
…
Но если мы получим ошибку, связанную с отсутствием файла VCRUNTIME140.dll:
… необходимо установить Microsoft Visual C++ Redistributable. Переходим на страницу https://www.microsoft.com/ru-RU/download/details.aspx?id=52685 и скачиваем компонент:
После загрузки, устанавливаем его на сервер, после чего, снова пробуем вывести на экран модули php:
php -m
Настройка сайта на IIS для работы с PHP
И так, веб-сервер поднят, PHP установлено, сайт работает. Настроим связку IIS + PHP. Открываем панель управления IIS — переходим к созданному сайту и кликаем по Сопоставления обработчиков:
В меню справа кликаем по Добавить сопоставление модуля:
Заполняем поля:
* где:
- Путь запроса — путь к файлам, при вызове которых действует сопоставление. В данном примере для всех файлов, заканчивающихся на php.
- Модуль — действующий модуль для обработки запроса.
- Исполняемый файл — файл, который будет выполнять обработку запроса. В данном примере мы выбрали файл из скачанного и распакованного нами архива PHP.
- Имя — произвольное имя для сопоставления.
Нажимаем OK и подтверждаем действие. Сопоставление создано.
Теперь заходим в Документ по умолчанию:
… и добавляем новый документ:
* в данном примете мы указываем, что по умолчанию сервер будет искать файл index.php, если таковой не указан явно в запросе.
Открываем в проводнике папку, в которой находятся файлы сайта (в нашем примере, C:\inetpub\wwwroot\php). Создаем файл index.php с содержимым:
Открываем браузер и снова переходим на наш сайт — мы должны увидеть страницу с информацией о php:
PHP Manager в IIS
Для того, чтобы упростить настройку PHP мы можем установить диспетчер PHP для IIS. Для этого переходим по ссылке https://www.iis.net/downloads/community/category/manage и переходим по ссылке для скачивания стабильной версии php-менеджера:
Скачиваем дополнение:
Выполняем установку на сервере, запустив загруженный файл. Открываем диспетчер управления IIS — мы должны увидеть PHP Manager:
Установка MySQL
MySQL для Windows можно скачать бесплатно. Переходим на страницу https://dev.mysql.com/downloads/mysql/ — выбираем операционную систему Microsoft Windows — кликаем по Go to Download Page:
На следующей странице выбираем для скачивания mysql-installer-community:
В открывшемся окне кликаем по No thanks, just start my download:
Начнется загрузка файла для установки MySQL. Дожидаемся скачивания и запускаем установочный файл — в открывшемся окне выбираем Server only:
В следующем окне кликаем по Execute:
… и дожидаемся установки СУБД:
Откроется окно конфигурации MySQL — нажимаем Next:
Выбираем установку одиночного сервера MySQL:
Оставляем все значения по умолчанию для настроек сети:
Требуем сложные пароли:
Вводим дважды пароль для пользователя root:
* также, на данном этапе мы можем сразу добавить новых пользователей.
Устанавливаем СУБД как сервис и стартуем его:
Настройки готовы для применения — нажимаем Execute:
Дожидаемся применения настроек и кликаем по Next:
Настройка завершена:
Установка завершена — нажимаем Finish.
Сервер баз данных готов к использованию.
По умолчанию, PHP поддерживаем mysql — в этом можно убедиться на странице phpinfo, найдя раздел mysqlnd:
Сегодня мы будем с вам устанавливать PHP 8.1 на Windows Server 2016 для web-сервера IIS 10.
Начиная с этой версии PHP установка сильно усложнилась. Microsoft Web Platform Installer (WebPI), которым раньше я пользовался для установки PHP больше не работает, так что устанавливать приходится вручную. Возня с дополнительными расширениями тоже приключение. Очень печально, что для Windows Server 2016 нет нормальных способов установки.
Дистрибутив PHP 8.1
https://www.php.net/downloads
Переходим на официальный сайт PHP в раздел загрузок, находим PHP 8.1, и тыкаем в ссылку Windows downloads.
https://windows.php.net/download#php-8.1
Попадаем на windows.php.net, можно было и сразу сюда пойти.
Доступны две версии PHP:
- Non Thread Safe
- Thread Safe
По какой-то странной причине в большинстве инструкций показывают, что нужно ставить версию Thread Safe, это в корне неверно. Примечательно, что про «TS and NTS» на той же странице загрузок всё написано.
Версию нужно выбирать в зависимости от того, как вы интегрируете PHP c веб-сервером. Когда вы используете mod_php, у вас модуль и PHP всегда загружены в память и каждый запрос обрабатывается в отдельном потоке. Из-за этого mod_php работает быстрее, чем CGI. В данном случае нужно использовать потокобезопасную реализацию (thread-safe) поскольку каждый поток имеет доступ к памяти другого потока. Здесь мы мягко намекаем на Linux.
Когда вы работаете с IIS, здесь мы мягко намекаем на Windows, у вас PHP запускается в виде отдельного процесса посредством CGI. В таком случае потокобезопасность не имеет смысла, поскольку у вас один процесс и один поток созданный этим процессом. Операционная система изолирует память процессов по умолчанию, NTS в этом случае работает быстрее.
В случае модели с FastCGI, потокобезопасность также не имеет смысла, поскольку тот же PHP-FPM держит несколько отдельных процессов PHP в памяти, но не потоков. Тоже имейте в виду.
В нашем случае (Windows, IIS, CGI) нам нужна версия PHP NTS — Non Thread Safe. Скачиваем соответствующий ZIP архив, распаковываем.
Создаём папку C:\Program Files\PHP\v8.1, копируем в неё содержимое архива.
Права доступа
В папке C:\Program Files\PHP выше уровнем у вас может находиться несколько версий PHP. На неё нужно дать права IIS. Удобнее вешать права на неё, чтобы они применялись ко всем версиям PHP через наследование.
Не помню каким точно юзерам надо права, напишите уточнение в комментариях, кто знает, я даю двум юзерам IUSR и IIS_IUSRS права:
- чтение
- чтение и выполнение
- чтение списка содержимого директории
Серверные переменные
Настроим серверные переменные. Свойства компьютера или Control Panel → System and Security → System. Advanced System Settings.
Вкладка Advanced, кнопка Environment Variables…
Блок System variables, находим переменную Path, выделяем её. Edit.
Добавляем новый путь:
C:\Program Files\PHP\v8.1
Кнопкой Move Up поднимаем его выше остальных версий PHP, если они у вас есть. OK, OK, OK.
В командной строке проверяем:
php --version
По умолчанию теперь используется PHP 8.1.26.
PHP и IIS
IIS и PHP можно подружить вручную, но мне лень. Использую для этих целей PHP Manager for IIS.
https://github.com/phpmanager/phpmanager/releases
Я уже ставил его ранее, приведу инструкцию для версии 2.4:
Запускаю инсталлятор.
Next.
Принимаем лицензионное соглашение, Next.
Next.
Install.
Ждём.
Finish.
В IIS появляется новая оснастка под названием PHP Manager.
Для каждого сайта можно выбирать свою PHP версию, регистрировать новые, управлять расширениями и т.д.
Однако, если вы собираетесь обновить версию PHP Manager for IIS, то сначала удаляйте старую, потом устанавливайте новую. Я обновил до версии 2.12.
Выбираем в IIS сайт или сам сервер, запускаем оснастку PHP Manager.
Зарегистрируем новую версию PHP. Register new PHP version.
Указываем путь к php-cgi.exe.
C:\Program Files\PHP\v8.1\php-cgi.exe
OK.
Путь к файлу php.ini и логу ошибок подставляется автоматически.
php.ini
Теперь нужно настроить php.ini я уже не помню что раньше настраивал для прежней версии PHP, поэтому воспользуюсь сравнением файлов с помощью Total Commander.
Сравнить файлы с помощью Total Commander
Расширения можно искать здесь:
http://pecl.php.net/
