Найти в Дзене

Установка PHP 8.1 на IIS 10

Оглавление

Сегодня мы будем с вам устанавливать 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

-2

Переходим на официальный сайт PHP в раздел загрузок, находим PHP 8.1, и тыкаем в ссылку Windows downloads.

https://windows.php.net/download#php-8.1

Попадаем на windows.php.net, можно было и сразу сюда пойти.

-3

Доступны две версии 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 архив, распаковываем.

-4

Создаём папку C:\Program Files\PHP\v8.1, копируем в неё содержимое архива.

-5

Права доступа

В папке C:\Program Files\PHP выше уровнем у вас может находиться несколько версий PHP. На неё нужно дать права IIS. Удобнее вешать права на неё, чтобы они применялись ко всем версиям PHP через наследование.

-6

Не помню каким точно юзерам надо права, напишите уточнение в комментариях, кто знает, я даю двум юзерам IUSR и IIS_IUSRS права:

  • чтение
  • чтение и выполнение
  • чтение списка содержимого директории

Серверные переменные

Настроим серверные переменные. Свойства компьютера или Control Panel → System and Security → System. Advanced System Settings.

-7

Вкладка Advanced, кнопка Environment Variables...

-8

Блок System variables, находим переменную Path, выделяем её. Edit.

-9

Добавляем новый путь:

C:\Program Files\PHP\v8.1

-10

Кнопкой Move Up поднимаем его выше остальных версий PHP, если они у вас есть. OK, OK, OK.

В командной строке проверяем:

php --version

-11

По умолчанию теперь используется PHP 8.1.26.

PHP и IIS

IIS и PHP можно подружить вручную, но мне лень. Использую для этих целей PHP Manager for IIS.

https://github.com/phpmanager/phpmanager/releases

Я уже ставил его ранее, приведу инструкцию для версии 2.4:

Запускаю инсталлятор.

-12

Next.

-13

Принимаем лицензионное соглашение, Next.

-14

Next.

-15

Install.

-16

Ждём.

-17

Finish.

В IIS появляется новая оснастка под названием PHP Manager.

-18

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

Однако, если вы собираетесь обновить версию PHP Manager for IIS, то сначала удаляйте старую, потом устанавливайте новую. Я обновил до версии 2.12.

Выбираем в IIS сайт или сам сервер, запускаем оснастку PHP Manager.

-19

Зарегистрируем новую версию PHP. Register new PHP version.

-20

Указываем путь к php-cgi.exe.

C:\Program Files\PHP\v8.1\php-cgi.exe

OK.

-21

Путь к файлу php.ini и логу ошибок подставляется автоматически.

php.ini

Теперь нужно настроить php.ini я уже не помню что раньше настраивал для прежней версии PHP, поэтому воспользуюсь сравнением файлов с помощью Total Commander.

Сравнить файлы с помощью Total Commander

Расширения можно искать здесь:

http://pecl.php.net/

-22

Источник:

Установка PHP 8.1 на IIS 10 | internet-lab.ru

💰 Поддержать проект

Если вам понравилась статья, то ставьте 👍🏻 каналу. Пишите комментарии, задавайте вопросы, подписывайтесь.