Интеграция PHP в Windows: практическое руководство

Раздел: -> Настройка PHP

Способы настройки 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) останавливается на точках останова.

PHP на Windows - comments

En
Php windows (php)