Windows 10: установка PHP для локального веб-сервера из набора IIS

Sep 24, 2022 10:57

Язык PHP

Много слышал про язык PHP, который, в частности, используется для динамического формирования HTML-страниц на веб-сервере в ответ на запросы пользователей. Скрипты на языке PHP пишутся прямо в теле HTML-страниц, а пользователь получает в ответ на свой запрос уже сформированную этими скриптами готовую HTML-страницу. (Сегодня это лишь одно из нескольких применений этого языка, но данный пост касается только способа применения при формировании HTML-страниц.)

Изначально аббревиатура PHP расшифровывалась как «Personal Home Page», так как язык использовался для создания личных интерактивных (для статических HTML-страничек PHP не требуется) HTML-страничек (язык родился в 1995 году). Но с годами применение языка сильно расширилось, поэтому сегодня эта аббревиатура расшифровывается как «PHP: Hypertext Preprocessor».

В интернетах часто пишут про «установку PHP», что может ввести в заблуждение, так как язык программирования - это лишь правила, которые не требуют никакой установки. Фраза про «установку PHP» должна пониматься как «установка интерпретатора PHP», то есть установка программы, которая может интерпретировать (истолковать) скрипт на языке PHP и исполнить его.

Локальный веб-сервер

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

Очень часто при работе с языком PHP используют веб-сервер «Apache» или веб-сервер «Nginx». Мне не хотелось устанавливать на компьютер новые программы, когда в моей операционной системе «Windows 10» уже есть веб-сервер из набора IIS («Internet Information Services»). Набор серверов IIS является частью (компонентой) операционной системы «Windows 10».

В прошлом году я писал про этот веб-сервер пост « JavaScript: локальный веб-сервер из набора IIS». По умолчанию набор IIS в операционной системе отключен. В указанном посте я описывал, как его включить. Это делается довольно просто и быстро.

Схема работы

Насколько я понимаю, схема работы интерпретатора PHP в связке с веб-сервером выглядит примерно так:

1. Пользователь вводит в адресную строку браузера URL-адрес страницы сайта, написанной на языке PHP, например (обработите внимание на расширение .php страницы сайта):

http://localhost/hello.php

2. Браузер формирует HTTP-запрос и отправляет его на веб-сервер (в моем случае - на локальный веб-сервер, это видно по слову localhost в URL-адресе выше);

3. Веб-сервер (в моем случае - из набора IIS) по URL-адресу определяет, что для обработки такой страницы (с расширением .php) требуется интерпретатор PHP и отправляет текст указанной страницы на обработку интерпретатору PHP;

4. Интерпретатор PHP формирует из кода на языке PHP готовую HTML-страницу и передает ее веб-серверу;

5. Веб-сервер формирует HTTP-ответ с готовой HTML-страницей и отправляет этот ответ браузеру;

6. Браузер получает HTTP-ответ от веб-сервера и отображает полученную HTML-страницу в своем окне. Конец.

Получение интерпретатора PHP

Релизы программы-интерпретора PHP для операционных систем «Windows» можно загрузить со следующего адреса:

https://windows.php.net/download/

Я загрузил оттуда архив в формате ZIP (чуть меньше 30 МБ) с файлами интерпретатора версии 8.1.10 (от 30 августа, самая свежая на сегодня):

https://windows.php.net/downloads/releases/php-8.1.10-nts-Win32-vs16-x64.zip

Вообще, по указанной выше ссылке доступно несколько разных вариантов дистрибутива, в том числе два, помеченных аббревиатурами TS (Thread Safe) и NTS (Non Thread Safe). По этому поводу на вышеуказанной странице сказано на английском следующее:

IIS
If you are using PHP as FastCGI with IIS you should use the Non-Thread Safe (NTS) versions of PHP.

TS and NTS
TS refers to multithread capable builds. NTS refers to single thread only builds. Use case for TS binaries involves interaction with a multithreaded SAPI and PHP loaded as a module into a web server. For NTS binaries the widespread use case is interaction with a web server through the FastCGI protocol, utilizing no multithreading (but also for example CLI).

Я выбрал вариант NTS, но не скажу, что четко понимаю, что означают эти аббревиатуры.

Полученные файлы я распаковал из архива и поместил в папку внутри папки «Program Files». В принципе, не имеет значения, где именно размещать на компьютере полученные файлы интерпретатора PHP.

Связываем веб-сервер из набора IIS и интерпретатор PHP

(Все названия пунктов и программ операционной системы «Windows 10» в данном посте даны для варианта операционной системы с интерфейсом на русском языке. В варианте на английском языке эти названия, очевидно, будут на английском языке.)

Локальный веб-сервер из набора IIS у меня уже включен и работает (см. об этом уже упоминавшийся отдельный пост). Я создал небольшой пробный текстовый файл «hello.php» с кодом на языке HTML и с вкраплением скрипта на языке PHP и поместил в папку своего локального сайта, у меня это такая папка:

C:\inetpub\wwwroot\

Веб-сервер отображает ее в уже знакомый нам URL-адрес:

http://localhost/

Я набрал в браузере URL-адрес http://localhost/hello.php, но получил в ответ от веб-сервера страницу с ошибкой «404.3». Там было много текста, но, в частности, было сказано: «Если страница является сценарием, добавьте обработчик.». Это логично, ведь веб-сервер пока что не знает, как обрабатывать страницы с расширением «.php». Ему следует дать нужные указания.

Тут следует отметить, что взаимодействие веб-сервера и интерпретатора PHP будет происходить через так называемый интерфейс CGI (сейчас вместо первоначального CGI используется его более продвинутый потомок FastCGI). Но когда я включал веб-сервер из набора IIS, я просто нажал галку на установку соответствующей компоненты, а более подробных указаний не дал. При таком раскладе по умолчанию компонента с интерфейсом CGI (FastCGI) отключена (по умолчанию изначально веб-сервер из набора IIS работает только со статическими HTML-страницами). Так что компоненту с интерфейсом CGI (FastCGI) сначала следует включить.

Для этого, как и для первоначального включения набора IIS, откроем диалог «Компоненты Windows». Открываю через поиск «Панель управления», выбираю режим просмотра «Крупные значки», выбираю пункт «Программы и компоненты». В открывшемся окне в меню слева выбираю пункт «Включение или отключение компонентов Windows» - открывается искомый диалог:



Как видно на иллюстрации выше, в разделе «Службы IIS - Службы Интернета - Компоненты разработки приложений» включаем галку с названием «CGI». После этого следует нажать на кнопку «OK» внизу и подождать несколько минут, пока операционная система найдет нужные файлы и включит нужную компоненту.

Теперь наш локальный веб-сервер умеет связываться с другими программами по интерфейсу CGI (FastCGI). Осталось только указать ему, где находится интерпретатор PHP и для обработки каких страниц следует вызывать этот интерпретатор через интерфейс CGI (FastCGI).

Настройку веб-сервера из набора IIS можно производить, как просто редактируя соответствующие конфигурационные файлы, так и используя специальную программу-диспетчер. Я предпочитаю второй вариант. Эту программу можно открыть через поиск операционной системы, набрав название «Диспетчер служб IIS». В окне этой программы в меню «Подключения» слева следует в списке найти и выбрать свой сайт (у меня он определен один и название по умолчанию «Default Web Site» я не стал менять). После этого в меню в центре окна будут показаны пункты настройки для выбранного сайта:



Из меню в центре окна следует выбрать пункт «Сопоставления обработчиков». В меню в центре окна откроется список сопоставлений обработчиков. Из меню «Действия» справа следует выбрать пункт «Добавить сопоставление модуля...» и заполнить открывшийся диалог примерно следующим образом:



Диалог на иллюстрации выше несколько отличается от того, который открывается при первоначальном добавлении сопоставления (это я открыл диалог уже добавленного ранее сопоставления), но это не имеет большого значения: тут видно, какие примерно значения следует вписать в поля. Этим сопоставлением мы показываем веб-серверу, что страницы с расширением «.php» следует передать на обработку исполняемому файлу «php-cgi.exe» интерпретатора PHP (у интерпретатора, кстати, есть целый ряд исполняемых файлов, а именно этот указан в рекомендациях по установке) через интерфейс, реализуемый модулем «FastCgiModule» (этот модуль, кстати, был бы недоступен, если бы мы не включили ранее компоненту «CGI» операционной системы).

На этом установка интерпретатора PHP и все нужные настройки закончены.

Тестирование

Поместим в пробный файл «hello.php» следующий код на языке HTML с вкраплением скрипта на языке PHP (пробный код я взял из руководства для начинающих на сайте языка PHP и немного изменил, скрипт на языке PHP выделен синим цветом, после него в коде есть один символ пробела, чтобы в результатном HTML-файле остался символ новой строки в этом месте):

Тест языка PHP

Привет, мир!
'; ?>

Вместо этого файла веб-сервер на URL-адрес http://localhost/hello.php возвращает браузеру следующий файл с кодом на языке HTML:

Тест языка PHP

Привет, мир!

Браузер отображает в своем окне фразу «Привет, мир!».

(Кстати, обычно для русского языка в заголовке HTML-страницы следует для кодировки UTF-8 указывать HTML-элемент , чтобы русские буквы отобразились правильно. Но в данном случае я контролирую веб-сервер и поэтому настроил его так, чтобы веб-сервер возвращал правильные HTTP-заголовки с нужным указанием на кодировку HTML-страницы. Поэтому в примере выше указание не понадобилось.)

Еще один тест. Заменим содержимое файла «hello.php» на следующее:

Функция phpinfo сформирует целую HTML-страницу с подробной информацией об используемом интерпретаторе PHP (номере его версии, настройках и так далее), затем веб-сервер вернет ее браузеру на ввод того же URL-адреса, что вводился для первого примера. У меня это получилось.

Инструмент, Образование, Сайтостроение, Программирование

Previous post Next post
Up