Интеграция PHP в Windows: практическое руководство
Способы настройки PHP в Windows
Как выполнить ручную установку PHP с максимальным контролем?
Ручная установка подходит для серверных окружений, где требуется точная настройка каждой опции. Процесс включает скачивание дистрибутива, настройку php.ini и интеграцию с веб-сервером.
Сначала загружается последняя версия PHP (Thread Safe для Apache, Non Thread Safe для IIS) с официального сайта. Архив распаковывается в папку, например C:\PHP. Затем создаётся копия файла php.ini-development с именем php.ini.
cp php.ini-development php.ini
В php.ini корректируются основные параметры:
extension_dir = "C:\PHP\ext"
date.timezone = Europe/Moscow
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
Для работы веб-сервера Apache необходима директива LoadModule в httpd.conf:
LoadModule php_module "C:/PHP/php8apache2_4.dll"
AddHandler application/x-httpd-php .php
PHPIniDir "C:/PHP"
После перезапуска Apache PHP становится работоспособным. Для проверки создаётся файл info.php с содержимым <?php phpinfo(); ?>.
Типичная ошибка: при запуске php.exe появляется сообщение об отсутствии MSVCR110.dll. Требуется установить распространяемый пакет Visual C++ (соответствующей разрядности).
Другая проблема: расширения не загружаются. Проверяется наличие extension=php_*.dll в php.ini и соответствие версии DLL.
Как быстро развернуть окружение через XAMPP?
XAMPP объединяет Apache, PHP, MySQL и phpMyAdmin в одном пакете. Установщик загружается с официального сайта, после запуска выбираются необходимые компоненты. Для смены порта Apache (если порт 80 занят) изменяется строка Listen 8080 в файле C:\xampp\apache\conf\httpd.conf. XAMPP использует собственную папку PHP (C:\xampp\php), настройки которой редактируются в php.ini внутри этой папки.
# Пример изменения document root
DocumentRoot "C:/xampp/htdocs"
<Directory "C:/xampp/htdocs">
Порой возникает конфликт портов с IIS или Skype. Решение - переназначить порт Apache через конфигурацию или временно остановить другие службы.
Как использовать PHP в среде Linux через WSL?
WSL (Windows Subsystem for Linux) позволяет запускать PHP в полноценной Linux-среде. После установки WSL (команда wsl --install) в дистрибутиве Ubuntu выполняются действия:
sudo apt update
sudo apt install php php-cli php-fpm php-mysql
Файлы Windows доступны через /mnt/c/. Для связи с Windows можно использовать php -S для встроенного сервера:
php -S 0.0.0.0:8000 -t /mnt/c/project
Такой подход удобен для разработки с использованием Linux-специфичных расширений.
Возможная сложность - различие в правах доступа. Для решения файлы размещаются в домашней папке WSL, а не на NTFS-разделе.
Как контейнеризировать PHP с помощью Docker на Windows?
Docker Desktop для Windows позволяет изолировать PHP-приложение вместе с веб-сервером и базой данных. Пример docker-compose.yml:
version: '3.8'
services:
web:
image: php:8.2-apache
ports:
- "8080:80"
volumes:
- ./src:/var/www/html
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
Запуск выполняется командой docker-compose up. Для добавления расширений используется собственный Dockerfile.
FROM php:8.2-apache
RUN docker-php-ext-install pdo_mysql mysqli
Проблема с производительностью ввода-вывода на Windows решается размещением проекта в папке, поддерживающей быстрый доступ (например, внутри контейнера или через WSL2).
Расширенные примеры настройки PHP на Windows
Оптимизация php.ini для производственного окружения
Для высоконагруженного сайта изменяются следующие директивы:
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
realpath_cache_size=4096K
realpath_cache_ttl=600
max_execution_time=30
memory_limit=512M
После перезапуска Apache в phpinfo() видны значения OpCache: Cache hits, Cache misses.
Интеграция PHP с IIS через FastCGI
В диспетчере IIS создаётся пул приложений с включённым 32-битным режимом (если PHP 32-битный). В корне сайта размещается файл web.config:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="PHP-FastCGI" path="*.php" verb="*" modules="FastCgiModule" scriptProcessor="C:\PHP\php-cgi.exe" resourceType="Unspecified" />
</handlers>
</system.webServer>
</configuration>
После сохранения файла и проверки через info.php отображается Server API: CGI/FastCGI.
Контейнеризация с PHP и MySQL через Docker
Создаётся проект, содержащий Dockerfile и docker-compose.yml:
# Dockerfile
FROM php:8.2-fpm
RUN docker-php-ext-install pdo_mysql mysqli gd
# docker-compose.yml
version: '3'
services:
app:
build: .
ports:
- "9000:9000"
volumes:
- ./app:/var/www
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./app:/var/www
- ./nginx.conf:/etc/nginx/conf.d/default.conf
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secret
Команда docker-compose up запускает три контейнера. Сайт доступен на http://localhost:8080.
Использование PHP CLI в планировщике задач Windows
Создаётся скрипт backup.php:
<?php
$source = 'C:\data'; $dest = 'C:\backup\' . date('Ymd');
mkdir($dest, 0777, true);
foreach (glob($source . '\\*') as $file) {
copy($file, $dest . '\\' . basename($file));
}
echo "Backup completed.\n";
Затем в планировщике задач создаётся задача с действием: программа C:\PHP\php.exe, аргументы C:\scripts\backup.php.
Результат - копирование файлов по расписанию, лог выводится в консоль (можно перенаправить в файл).
Настройка Xdebug для отладки через IDE
В php.ini добавляются строки для Xdebug (предварительно расширение загружается):
zend_extension = xdebug-3.2.dll
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.client_host = 127.0.0.1
xdebug.client_port = 9003
После перезагрузки веб-сервера в браузере запускается скрипт с параметром ?XDEBUG_SESSION_START=1. IDE (например, PHPStorm) останавливается на точках останова.