Сегодня мы будем с вам устанавливать PHP 8.1 на Windows Server 2016 для web-сервера IIS 10. Собственно, причина обычная:
🐘 PHP — критическая уязвимость
Соответственно, нам понадобится минимум версия PHP 8.2.35.
Дистрибутив PHP 8.2
Находим PHP 8.2, и тыкаем в ссылку Windows downloads.

Доступны две версии PHP:
- Non Thread Safe
- Thread Safe
Версию нужно выбирать в зависимости от того, как вы интегрируете 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.2, копируем в неё содержимое архива.
Права доступа
В папке 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.2
Кнопкой Move Up поднимаем его выше остальных версий PHP, если они у вас есть.

OK, OK, OK.
В командной строке проверяем:
php --version
По умолчанию теперь используется PHP 8.2.35.
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, то сначала удаляйте старую, потом устанавливайте новую.
Выбираем в IIS сайт или сам сервер, запускаем оснастку PHP Manager.

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

Указываем путь к php-cgi.exe.
C:\Program Files\PHP\v8.2\php-cgi.exe
OK.

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








