"Быстрый
<br />
Скачай WAMP с официального сайта wampserver.com или XAMPP с apachefriends.org. Установи с правами администратора. Перед запуском освободи порт 80 — останови IIS или Skype. Запусти, проверь что иконка зелёная, открой localhost в браузере.<br />
<h2>1. Диагноз: поставил, не работает</h2>
<p>Поднял WAMP. Иконка оранжевая или красная. Apache не стартует. Localhost выдаёт ошибку 403 или вообще не открывается. Знакомо?</p>
<p>Или установил XAMPP, нажал Start у Apache — строчка мигнула и погасла. Control Panel пишет что-то про порты. <a class="wpil_keyword_link" href="https://it-apteka.com/tag/mysql/" target="_blank" rel="noopener" title="MySQL" data-wpil-keyword-link="linked" data-wpil-monitor-id="2001">MySQL</a> тоже молчит.</p>
<p>Это решается за 15-30 минут. Нужны: <a class="wpil_keyword_link" href="https://it-apteka.com/category/windows-server/" target="_blank" rel="noopener" title="Windows Server" data-wpil-keyword-link="linked" data-wpil-monitor-id="2005">Windows</a> 10 или 11, права администратора, 10 минут терпения. На выходе получишь рабочий localhost с Apache, PHP и MySQL — всё что нужно для локальной разработки.</p>
<p>Что разберём в статье:</p>
<ul>
<li>Установка WAMP и XAMPP по шагам</li>
<li>Почему не запускается и как чинить</li>
<li>Разбор 7 самых частых ошибок с командами</li>
<li>Сравнение WAMP vs XAMPP — когда что выбирать</li>
<li>5 практических <a href="https://it-apteka.com/rukovodstvo-po-optimizacii-postgresql-i-mysql-5-realnyh-primerov-s-gotovymi-skriptami/" title="Руководство по оптимизации PostgreSQL и MySQL: 5 реальных примеров с готовыми скриптами" target="_blank" rel="noopener" data-wpil-monitor-id="1993">примеров из реальной</a> работы</li>
<li>Установка WordPress на localhost</li>
<li>Безопасность и профилактика</li>
</ul>
<h3>Схема диагностики: с чего начать</h3>
<pre class="mermaid">
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart TD
A["Иконка красная или оранжевая"] --> B{"Apache запустился?"}
B -->|"Нет"| C["Проверь порт 80"]
B -->|"Да"| D{"MySQL запустился?"}
C --> E["netstat -ano | findstr :80"]
E --> F{"Порт занят?"}
F -->|"Да"| G["Останови IIS или другой сервис"]
F -->|"Нет"| H["Проверь VC++ Redistributable"]
G --> I["Перезапусти Apache"]
H --> I
D -->|"Нет"| J["Проверь порт 3306"]
D -->|"Да"| K["Открой localhost в браузере"]
J --> L["netstat -ano | findstr :3306"]
K --> M{"Открылось?"}
M -->|"403"| N["Проверь htdocs и конфиг Directory"]
M -->|"Да"| O["Сервер работает"]
style A fill:#f8fafc,stroke:#ef4444,stroke-width:2px,color:#991b1b
style O fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style G fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#9a3412
style H fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#9a3412
style N fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#9a3412
</pre>
<h2>2. Причины — почему ломается сразу после установки</h2>
<p>Перед тем как лезть в настройки, пойми откуда растут ноги. 90% проблем с WAMP и XAMPP — это одни и те же грабли.</p>
<h3>Порт 80 занят</h3>
<p>Самая частая причина. Apache хочет слушать порт 80, но там уже сидит IIS (встроенный веб-сервер Windows), Skype, nginx или ещё какой-нибудь сервис. Apache пытается занять порт, получает отказ, падает. Иконка WAMP становится оранжевой — Apache не запустился, MySQL запустился.</p>
<h3>Не установлен Visual C++ Redistributable</h3>
<p>WAMP особенно капризен на этот счёт. Если не хватает нужной версии VC++ Runtime — Apache или PHP просто не запустятся. Никакого внятного сообщения об ошибке при этом не будет. Просто ничего не работает.</p>
<h3>Порт 3306 занят</h3>
<p>MySQL не стартует если порт уже занят другим экземпляром MySQL или MariaDB. Особенно актуально если до этого что-то уже ставил и не почистил.</p>
<h3>Антивирус блокирует Apache</h3>
<p>Windows Defender или сторонний антивирус может блокировать httpd.exe при первом запуске. Apache пробует запуститься, антивирус хватает процесс за горло, Apache падает. В логах — тишина.</p>
<h3>Неправильный путь установки</h3>
<p>WAMP нельзя ставить в путь с пробелами или кириллицей. «C:\Program Files\wamp» — уже проблема. «C:\Users\Андрей\wamp» — вообще беда. Только C:\wamp или D:\wamp.</p>
<h3>Конфликт PHP и расширений</h3>
<p>Если вручную копировал dll-файлы или менял php.ini до запуска — PHP может не подняться. Apache стартует, PHP падает, сайты не работают.</p>
<h2>3. Установка WAMP Server</h2>
<h3>3.1 Системные требования</h3>
<table>
<thead>
<tr>
<th>Компонент</th>
<th>Минимум</th>
<th>Рекомендуется</th>
</tr>
</thead>
<tbody>
<tr>
<td>ОС</td>
<td>Windows 7 x64</td>
<td>Windows 10/11 x64</td>
</tr>
<tr>
<td>RAM</td>
<td>512 МБ</td>
<td>2 ГБ и больше</td>
</tr>
<tr>
<td>Диск</td>
<td>500 МБ</td>
<td>2 ГБ (под проекты)</td>
</tr>
<tr>
<td>VC++ Runtime</td>
<td>x64 2012-2022</td>
<td>Все версии x64</td>
</tr>
<tr>
<td>Права</td>
<td>Администратор</td>
<td>Администратор</td>
</tr>
</tbody>
</table>
<p>На момент публикации актуальна версия WampServer 3.3.x с Apache 2.4, PHP 8.2/8.1/7.4, MariaDB 10.11. Перед установкой проверь свежие релизы на <a href="https://www.wampserver.com" target="_blank" rel="noopener">wampserver.com</a>.</p>
<h3>3.2 Подготовка: Visual C++ Redistributable</h3>
<p>Без этого шага WAMP не запустится. Скачай и установи все версии <a href="https://it-apteka.com/zapusk-skripta-ustanovki-microsoft-directx-net-framework-i-vc-v-steam-chto-jeto-i-kak-ispravit-zavisanie/" title="Запуск скрипта установки Microsoft DirectX, .NET Framework и VC++ в Steam — что это и как исправить зависание" target="_blank" rel="noopener" data-wpil-monitor-id="1997">VC++ Redistributable x64 с сайта Microsoft</a> — от 2012 до 2022. WAMP требует именно x64, даже если у тебя 32-битное приложение.</p>
<p>Ссылка для скачивания всех версий сразу: <a href="https://support.microsoft.com/en-us/topic/the-latest-supported-visual-c-downloads-2647da03-1eea-4433-9aff-95f26a218cc0" target="_blank" rel="noopener">Microsoft Visual C++ Redistributable Downloads</a>.</p>
"Проверь
<br />
Если пропустишь установку VC++ Runtime — WAMP установится, но Apache не запустится. Никакой явной ошибки при этом не увидишь. Это самый частый вопрос на форумах: "Установил WAMP, иконка красная, что делать?" — ответ в 60% случаев именно здесь.<br />
<h3>3.3 Скачивание и установка WAMP</h3>
<p>Скачай актуальную версию с официального сайта <a href="https://www.wampserver.com/en/#download-wrapper" target="_blank" rel="noopener">wampserver.com</a>. Берёшь версию x64. Файл весит около 300-400 МБ.</p>
<p>Запусти установщик от имени администратора. Правая кнопка мыши по файлу — «Запуск от имени администратора».</p>
<p>Выбери путь установки. Только латиница, только без пробелов:</p>
<pre><code class="language-text">
C:\wamp64
</code></pre>
<p>Установщик спросит про браузер по умолчанию и текстовый редактор. Можешь оставить что предлагает или выбрать своё. На работу сервера не влияет.</p>
<p>После <a href="https://it-apteka.com/ustanovka-joomla-poshagovyj-recept-ot-nulja-do-rabochego-sajta/" title="Установка Joomla: пошаговый рецепт от нуля до рабочего сайта" target="_blank" rel="noopener" data-wpil-monitor-id="1994">установки запусти WAMP через иконку на рабочем</a> столе или из меню Пуск. Запускай от имени администратора.</p>
<p>Смотри на иконку в системном трее (правый нижний угол):</p>
<ul>
<li>Красная — ничего не запустилось</li>
<li>Оранжевая — что-то запустилось, что-то нет (обычно Apache упал)</li>
<li>Зелёная — всё работает, можно открывать localhost</li>
</ul>
<h3>3.4 Установка XAMPP</h3>
<p>Скачай XAMPP с официального сайта <a href="https://www.apachefriends.org/ru/download.html" target="_blank" rel="noopener">apachefriends.org</a>. Выбери версию с нужным PHP. Файл весит 150-160 МБ.</p>
<p>Запусти установщик от администратора. Выбери компоненты — для базовой работы достаточно Apache, MySQL, PHP и phpMyAdmin. FileZilla и Mercury обычно не нужны.</p>
<p>Путь установки — без пробелов и кириллицы:</p>
<pre><code class="language-text">
C:\xampp
</code></pre>
<p>После установки запусти XAMPP Control Panel. Нажми Start у Apache и MySQL. Если всё хорошо — строки подсветятся зелёным, в логах появятся сообщения о запуске.</p>
"Антивирус
<br />
При первом <a href="https://it-apteka.com/zapusk-bash-skriptov-v-linux-cherez-terminal-cron-python-windows-i-raspberry-pi/" title="Запуск bash скриптов в Linux: через терминал, cron, Python, Windows и Raspberry Pi" target="_blank" rel="noopener" data-wpil-monitor-id="1995">запуске Apache Windows</a> Firewall спросит разрешения для httpd.exe. Разреши доступ в частных сетях. Если пропустить или нажать Отмена — Apache будет работать, но могут быть проблемы с доступом с других устройств в локальной <a class="wpil_keyword_link" href="https://it-apteka.com/category/networks/" target="_blank" rel="noopener" title="Сети" data-wpil-keyword-link="linked" data-wpil-monitor-id="1999">сети</a>.<br />
<h3>3.5 Архитектура: как работает стек</h3>
<pre class="mermaid">
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart TD
A["Браузер (Chrome, Firefox)"] --> B["Apache httpd (порт 80/443)"]
B --> C["PHP-CGI / PHP модуль"]
C --> D["Твой PHP-скрипт"]
D --> E["MySQL / MariaDB (порт 3306)"]
B --> F["Статические файлы (HTML, CSS, JS)"]
style A fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style B fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#9a3412
style C fill:#f8fafc,stroke:#8b5cf6,stroke-width:2px,color:#5b21b6
style D fill:#f8fafc,stroke:#64748b,stroke-width:2px,color:#1e293b
style E fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style F fill:#f8fafc,stroke:#64748b,stroke-width:2px,color:#1e293b
</pre>
<p>Браузер отправляет запрос на localhost. Apache получает запрос на порту 80. Если запрошен PHP-файл — передаёт его PHP-модулю. PHP выполняет <a class="wpil_keyword_link" href="https://it-apteka.com/category/scripts/" target="_blank" rel="noopener" title="Скрипты" data-wpil-keyword-link="linked" data-wpil-monitor-id="2002">скрипт</a>, при необходимости обращается к MySQL на порту 3306. Результат идёт обратно через Apache в браузер.</p>
<h3>3.6 Таблица портов</h3>
<table>
<thead>
<tr>
<th>Сервис</th>
<th>Порт по умолчанию</th>
<th>Протокол</th>
<th>Альтернативный порт</th>
</tr>
</thead>
<tbody>
<tr>
<td>Apache HTTP</td>
<td>80</td>
<td>TCP</td>
<td>8080, 8888</td>
</tr>
<tr>
<td>Apache HTTPS</td>
<td>443</td>
<td>TCP</td>
<td>8443</td>
</tr>
<tr>
<td>MySQL / MariaDB</td>
<td>3306</td>
<td>TCP</td>
<td>3307</td>
</tr>
<tr>
<td>phpMyAdmin</td>
<td>80 (через Apache)</td>
<td>HTTP</td>
<td>—</td>
</tr>
</tbody>
</table>
<h2>4. Проверка работы</h2>
<h3>4.1 Открой localhost</h3>
<p>Открой браузер и перейди по адресу:</p>
<pre><code class="language-text">
http://localhost
</code></pre>
<p>WAMP покажет страницу с информацией о сервере. XAMPP — свою приветственную страницу. Если открылось — Apache работает.</p>
<h3>4.2 Проверь phpMyAdmin</h3>
<pre><code class="language-text">
http://localhost/phpmyadmin
</code></pre>
<p>Если открылась страница входа — MySQL и phpMyAdmin работают. По умолчанию логин root, пароль пустой.</p>
<h3>4.3 Проверь PHP через phpinfo()</h3>
<p>Создай файл test.php в папке проектов. Для WAMP это C:\wamp64\www\, для XAMPP это C:\xampp\htdocs\.</p>
<pre><code class="language-php">
<?php
phpinfo();
?>
</code></pre>
<p>Открой в браузере:</p>
<pre><code class="language-text">
http://localhost/test.php
</code></pre>
<p>Должна появиться страница с подробной информацией о версии PHP, подключённых модулях и настройках. Видишь эту страницу — PHP работает.</p>
<h3>4.4 Проверь порты через командную строку</h3>
<p>Открой командную строку от администратора и выполни:</p>
<pre><code class="language-bash">
netstat -ano | findstr ":80 "
</code></pre>
<p>Должен увидеть строки с состоянием LISTENING на порту 80. Это Apache слушает входящие подключения.</p>
<pre><code class="language-bash">
netstat -ano | findstr ":3306"
</code></pre>
<p>Аналогично для MySQL — строки LISTENING на порту 3306.</p>
<h2>5. Практические примеры из жизни</h2>
<h3>Пример 1: Освобождение порта 80</h3>
<p>Apache не запускается. Открываем командную строку от администратора и смотрим кто занял порт:</p>
<pre><code class="language-bash">
netstat -ano | findstr ":80 "
</code></pre>
<p>Получишь что-то вроде:</p>
<pre><code class="language-text">
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 1234
</code></pre>
<p>Число в конце — PID процесса. Узнаём что это за процесс:</p>
<pre><code class="language-bash">
tasklist | findstr "1234"
</code></pre>
<p>Если это IIS — останови его:</p>
<pre><code class="language-bash">
net stop w3svc
</code></pre>
<p>Если это не нужный сервис — убей процесс:</p>
<pre><code class="language-bash">
taskkill /PID 1234 /F
</code></pre>
<p>После этого запускай Apache снова.</p>
"IIS
<br />
IIS (Internet Information Services) — встроенный веб-сервер Windows. Он запускается автоматически на некоторых версиях Windows. Если нужен WAMP или XAMPP — IIS лучше отключить совсем. Через "Включение или отключение компонентов Windows" убери галку с "Службы IIS".<br />
<h3>Пример 2: Смена версии PHP в WAMP</h3>
<p>WAMP поставляется с несколькими версиями PHP. Переключаться между ними легко прямо из интерфейса.</p>
<p>Кликни левой кнопкой на иконку WAMP в трее. Найди раздел «PHP» — там будет подменю со списком установленных версий. Выбери нужную версию.</p>
<p>WAMP автоматически перезапустит Apache с выбранной версией PHP. Проверь через phpinfo() что версия переключилась.</p>
<p>Если нужно добавить версию PHP которой нет в стандартной поставке — скачай Add-on с официального сайта WAMP. Это отдельные установщики для конкретных версий PHP.</p>
<h3>Пример 3: Создание виртуального хоста</h3>
<p>Вместо localhost/myproject удобнее работать с myproject.local. Для этого нужен виртуальный хост.</p>
<p>Шаг 1. Открой файл hosts от имени администратора. Он находится по пути:</p>
<pre><code class="language-text">
C:\Windows\System32\drivers\etc\hosts
</code></pre>
<p>Добавь строку в конец файла:</p>
<pre><code class="language-text">
127.0.0.1 myproject.local
</code></pre>
<p>Шаг 2. Для XAMPP открой файл конфигурации виртуальных хостов:</p>
<pre><code class="language-text">
C:\xampp\apache\conf\extra\httpd-vhosts.conf
</code></pre>
<p>Добавь блок виртуального хоста:</p>
<pre><code class="language-text">
<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs/myproject"
ServerName myproject.local
<Directory "C:/xampp/htdocs/myproject">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
</code></pre>
<p>Шаг 3. Убедись что в httpd.conf раскомментирована строка подключения vhosts:</p>
<pre><code class="language-text">
Include conf/extra/httpd-vhosts.conf
</code></pre>
<p>Шаг 4. Перезапусти Apache. Открой myproject.local в браузере.</p>
<p>Для WAMP процесс аналогичный, но файлы конфигурации лежат в C:\wamp64\bin\apache\apache2.4.x\conf\.</p>
<h3>Пример 4: Создание базы данных и подключение из PHP</h3>
<p>Открой phpMyAdmin по адресу http://localhost/phpmyadmin. Войди под root с пустым паролем.</p>
<p>Создай новую базу данных. Нажми «Создать БД», введи имя (например, mydb), выбери сортировку utf8mb4_unicode_ci.</p>
<p>Создай пользователя для этой базы. Зайди в «Привилегии» — «Добавить пользователя». Заполни имя, хост (localhost), пароль. Дай все права на базу mydb.</p>
<p>Подключение из PHP:</p>
<pre><code class="language-php">
<?php
$host = 'localhost';
$dbname = 'mydb';
$user = 'myuser';
$password = 'mypassword';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $user, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Подключение успешно";
} catch (PDOException $e) {
echo "Ошибка: " . $e->getMessage();
}
?>
</code></pre>
<h3>Пример 5: Запуск phpinfo() и диагностика конфигурации</h3>
<p>phpinfo() — это рентген твоего PHP. Смотри на что обращать внимание:</p>
<ul>
<li>PHP Version — версия PHP</li>
<li>Loaded Configuration File — путь к активному php.ini</li>
<li>extension_dir — директория расширений PHP</li>
<li>Секция mysql или mysqli — если нет, модуль не подключён</li>
<li>display_errors — должно быть On на локальной разработке</li>
<li>max_execution_time, memory_limit, upload_max_filesize — часто нужно менять под задачу</li>
</ul>
<p>Путь к php.ini берёшь из «Loaded Configuration File». Открываешь этот файл, правишь нужные параметры, перезапускаешь Apache.</p>
<h2>6. Осложнения: разбор ошибок</h2>
<p>Вот тут начинается самое интересное. Сервер установлен, но что-то идёт не так. Разбираем по симптомам.</p>
<h3>Как читать логи — это первое что нужно уметь</h3>
<p>Перед тем как гуглить ошибку — открой лог. Там написано всё. Прямым текстом. На английском, но понятно.</p>
<p>Логи Apache в XAMPP:</p>
<pre><code class="language-text">
C:\xampp\apache\logs\error.log
C:\xampp\apache\logs\access.log
</code></pre>
<p>Логи MySQL в XAMPP:</p>
<pre><code class="language-text">
C:\xampp\mysql\data\имя_компьютера.err
</code></pre>
<p>Логи WAMP доступны из трея: левый клик по иконке — Apache — Apache error log.</p>
<p>Смотришь последние строки в логе:</p>
<pre><code class="language-bash">
powershell -command "Get-Content C:\xampp\apache\logs\error.log -Tail 30"
</code></pre>
<p>Ищи строки с [error] или [crit]. Там написано что именно сломалось и почему.</p>
<h3>Ошибка: Apache не запускается, иконка красная или оранжевая</h3>
<p>Причина в 80% случаев — порт 80 занят. Проверяй так:</p>
<pre><code class="language-bash">
netstat -ano | findstr ":80 "
</code></pre>
<p>Нашёл чужой процесс — смотри PID, останови сервис. Самые частые виновники: IIS, Skype (старые версии используют порт 80), nginx, другой Apache.</p>
<p>Останови IIS полностью:</p>
<pre><code class="language-bash">
net stop w3svc
net stop was
</code></pre>
<p>Если хочешь чтобы IIS не запускался автоматически:</p>
<pre><code class="language-bash">
sc config w3svc start= disabled
sc config was start= disabled
</code></pre>
<p>После этого запусти Apache снова.</p>
<p>Второй вариант — изменить порт Apache на 8080 чтобы не конфликтовать с IIS. В httpd.conf найди строку:</p>
<pre><code class="language-text">
Listen 80
</code></pre>
<p>Измени на:</p>
<pre><code class="language-text">
Listen 8080
</code></pre>
<p>Тогда localhost перестанет работать, но http://localhost:8080 будет открываться. Это менее удобно, но решает конфликт если IIS нужен параллельно.</p>
<h3>Ошибка: Apache стартует на секунду и падает</h3>
<p>Смотри лог Apache. В XAMPP это C:\xampp\apache\logs\error.log. В WAMP это C:\wamp64\logs\apache_error.log.</p>
<pre><code class="language-bash">
type C:\xampp\apache\logs\error.log
</code></pre>
<p>Ищи строки с «Error» или «Fatal». Часто там написано прямым текстом: «no listening sockets available» означает порт занят, «Invalid Mutex» означает проблему с правами на директорию.</p>
<p>Если в логе видишь «AH00526: Syntax error on line N of httpd.conf» — ты сломал конфиг. Открой httpd.conf и проверь строку N на опечатки, непарные кавычки или скобки.</p>
<p>Быстрая проверка синтаксиса конфига Apache:</p>
<pre><code class="language-bash">
C:\xampp\apache\bin\httpd.exe -t
</code></pre>
<p>Если конфиг правильный — напишет «Syntax OK». Если нет — покажет где ошибка.</p>
<h3>Ошибка: MySQL не запускается</h3>
<p>Проверяем порт 3306:</p>
<pre><code class="language-bash">
netstat -ano | findstr ":3306"
</code></pre>
<p>Если порт занят другим процессом MySQL — возможно, уже есть установленный MySQL как системный сервис. Останови его:</p>
<pre><code class="language-bash">
net stop mysql
</code></pre>
<p>Или найди через диспетчер задач службу MySQL и останови её.</p>
<p>Смотри лог MySQL. В XAMPP это C:\xampp\mysql\data\имя_компьютера.err. Там будет подробно написано почему не стартует.</p>
<p>Одна из частых причин — повреждённый файл mysql.pid или ib_logfile. Это случается если MySQL был жёстко завершён. В логе будет что-то про «InnoDB: Error: log file».</p>
"Осторожно
<br />
Никогда не удаляй файлы ib_logfile0, ib_logfile1 и ibdata1 пока не убедился что понимаешь что делаешь. Это файлы данных InnoDB. Удалишь — потеряешь все данные в таблицах InnoDB. Сделай бэкап через mysqldump перед любыми манипуляциями с этими файлами.<br />
<p>Если MySQL не запускается после сбоя питания или жёсткого выключения компьютера — попробуй такой порядок действий:</p>
<ol>
<li>Сделай копию папки C:\xampp\mysql\data\ на всякий случай</li>
<li>Удали файл C:\xampp\mysql\data\mysql.pid если он существует</li>
<li>Попробуй запустить MySQL снова</li>
<li>Если не помогло — смотри лог, там будет конкретная причина</li>
</ol>
<h3>Ошибка: localhost открывается, но показывает 403 Forbidden</h3>
<p>403 — это Apache запустился, но нет прав на чтение директории или нет индексного файла.</p>
<p>Проверь содержимое директории www (WAMP) или htdocs (XAMPP). Там должен быть хотя бы index.php или index.html. Если папка пустая — Apache выдаёт 403 когда листинг директорий отключён.</p>
<p>Проверь httpd.conf — ищи блок Directory для корневой папки:</p>
<pre><code class="language-text">
<Directory "C:/xampp/htdocs">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
</Directory>
</code></pre>
<p>Строка «Require all granted» должна быть именно такой. Если там «Require all denied» — Apache намеренно запрещает доступ.</p>
<p>Если 403 появляется на конкретном проекте а не на localhost вообще — проверь .htaccess в папке проекта. Возможно там есть директива deny или неправильно настроены правила mod_rewrite.</p>
<h3>Ошибка: PHP не работает, браузер скачивает .php файл</h3>
<p>Браузер скачивает PHP-файл вместо его выполнения — PHP-модуль не подключён к Apache.</p>
<p>В XAMPP открой httpd.conf и найди строку:</p>
<pre><code class="language-text">
LoadModule php_module "C:/xampp/php/php8apache2_4.dll"
</code></pre>
<p>Если строка закомментирована (начинается с #) — убери #. Если строки нет совсем — версия PHP несовместима с Apache, нужно переустановить XAMPP.</p>
<p>Также проверь что в httpd.conf есть строки для обработки PHP-файлов:</p>
<pre><code class="language-text">
AddType application/x-httpd-php .php
</code></pre>
<h3>Ошибка: phpMyAdmin не открывается или пишет «Access denied»</h3>
<p>Access denied при входе в phpMyAdmin — неправильный пароль или конфигурация.</p>
<p>Найди файл конфигурации phpMyAdmin:</p>
<pre><code class="language-text">
C:\xampp\phpMyAdmin\config.inc.php
</code></pre>
<p>Проверь строку:</p>
<pre><code class="language-text">
$cfg['Servers'][$i]['password'] = '';
</code></pre>
<p>Если у root пустой пароль — должна быть пустая строка. Если ты уже менял пароль root в MySQL — укажи его здесь.</p>
<p>Если phpMyAdmin вообще не открывается и выдаёт 404 — проверь что папка phpmyadmin существует по пути C:\xampp\phpMyAdmin\ и что в httpd.conf есть Alias для phpMyAdmin. В XAMPP это обычно в файле C:\xampp\apache\conf\extra\httpd-xampp.conf:</p>
<pre><code class="language-text">
Alias /phpmyadmin "C:/xampp/phpMyAdmin/"
</code></pre>
<h3>Ошибка: WordPress или другой движок выдаёт «500 Internal Server Error»</h3>
<p>500 ошибка означает что PHP скрипт упал с фатальной ошибкой. Первым делом смотри лог Apache — там будет написано что именно упало.</p>
<p>Вторая частая причина — .htaccess с директивами которые Apache не понимает. Переименуй .htaccess в .htaccess.bak и обнови страницу. Если 500 пропала — дело в .htaccess.</p>
<p>Для WordPress частая причина — отключён mod_rewrite. Убедись что в httpd.conf строка LoadModule rewrite_module не закомментирована и что для директории htdocs установлен AllowOverride All.</p>
<h2>7. Сравнение WAMP vs XAMPP</h2>
<p>Это отдельный вопрос который гуглят постоянно. Отвечу без воды.</p>
<table>
<thead>
<tr>
<th>Параметр</th>
<th>WAMP</th>
<th>XAMPP</th>
</tr>
</thead>
<tbody>
<tr>
<td>Платформа</td>
<td>Только Windows</td>
<td>Windows, <a class="wpil_keyword_link" href="https://it-apteka.com/category/linux/" target="_blank" rel="noopener" title="Linux" data-wpil-keyword-link="linked" data-wpil-monitor-id="2000">Linux</a>, macOS</td>
</tr>
<tr>
<td>База данных</td>
<td>MariaDB (последние версии)</td>
<td>MariaDB</td>
</tr>
<tr>
<td>Переключение PHP</td>
<td>Из трея, очень удобно</td>
<td>Вручную через конфиги</td>
</tr>
<tr>
<td>Несколько PHP</td>
<td>Да, встроено</td>
<td>Требует ручной настройки</td>
</tr>
<tr>
<td>Дополнительные сервисы</td>
<td>Только Apache+PHP+MySQL</td>
<td>FTP, Mercury <a class="wpil_keyword_link" href="https://it-apteka.com/tag/mail/" target="_blank" rel="noopener" title="mail" data-wpil-keyword-link="linked" data-wpil-monitor-id="2003">Mail</a>, Tomcat</td>
</tr>
<tr>
<td>Интерфейс управления</td>
<td>Иконка в трее</td>
<td>Control Panel</td>
</tr>
<tr>
<td>Размер установки</td>
<td>~300 МБ</td>
<td>~160 МБ</td>
</tr>
<tr>
<td>Требования VC++</td>
<td>Нужно ставить вручную</td>
<td>Встроено в установщик</td>
</tr>
<tr>
<td>Установка плагинов</td>
<td>Add-on через сайт</td>
<td>Ручная установка</td>
</tr>
<tr>
<td>SSL из коробки</td>
<td>Да</td>
<td>Да</td>
</tr>
<tr>
<td>Для новичков</td>
<td>Чуть сложнее старт</td>
<td>Проще начать</td>
</tr>
<tr>
<td>Поддержка</td>
<td>Форум wampserver.com</td>
<td>Активное сообщество</td>
</tr>
</tbody>
</table>
<p>Если работаешь только на Windows и тебе нужно часто переключаться между версиями PHP — бери WAMP. Это его главное преимущество. Из трея выбрал PHP 7.4 — Apache перезапустился с нужной версией. Удобно когда ведёшь несколько проектов под разные версии PHP.</p>
<p>Если начинаешь с нуля, нужно что попроще или работаешь на разных ОС — бери XAMPP. Установка без геморроя с VC++, Control Panel понятна с первого взгляда, сообщество больше.</p>
<h3>Альтернативы: когда WAMP и XAMPP не подходят</h3>
<p><strong>OpenServer Panel</strong> — российский проект, <a href="https://ospanel.io" target="_blank" rel="noopener">ospanel.io</a>. Интерфейс на русском, много версий PHP, встроенные менеджеры доменов. Хорошая альтернатива если WAMP кажется сложным.</p>
<p><strong>Laragon</strong> — <a href="https://laragon.org" target="_blank" rel="noopener">laragon.org</a>. Лёгкий, быстро стартует, хорошо работает с Laravel. Если пишешь на Laravel — смотри в эту сторону.</p>
<p><strong><a class="wpil_keyword_link" href="https://it-apteka.com/tag/docker/" target="_blank" rel="noopener" title="Docker" data-wpil-keyword-link="linked" data-wpil-monitor-id="2004">Docker</a></strong> — когда нужна среда максимально близкая к продакшну. Поднимаешь docker-compose с нужными версиями PHP, MySQL, nginx — и работаешь в контейнере. Настройка занимает больше времени, зато конфиг можно положить в репозиторий и у всей команды будет одинаковая среда. Это отдельная тема на отдельную статью. Одна строка в crontab без комментария убивает весь отдел — одна строка в docker-compose без документации работает ровно до следующего разработчика.</p>
<h2>8. Безопасность локального сервера</h2>
<p>Да, это localhost. Да, это только для разработки. Но привычки формируются на локалке и переносятся в продакшн.</p>
<h3>Ограничь доступ к phpMyAdmin</h3>
<p>По умолчанию phpMyAdmin доступен только с localhost — это хорошо. Убедись что так и есть. В конфиге phpMyAdmin:</p>
<pre><code class="language-text">
$cfg['Servers'][$i]['host'] = '127.0.0.1';
</code></pre>
<p>Никогда не открывай phpMyAdmin на внешний интерфейс если работаешь не только на локальной машине.</p>
<h3>Поставь пароль на root в MySQL</h3>
<p>По умолчанию root без пароля — это норма для локальной разработки. Но если твоя машина в корпоративной сети — поставь пароль.</p>
<p>Открой phpMyAdmin, зайди под root. Перейди в «Привилегии» — «root» — «Изменить привилегии». Установи пароль.</p>
<p>После этого обнови конфиг phpMyAdmin и все конфиги своих приложений где прописан пустой пароль.</p>
<h3>Не открывай Apache на все интерфейсы</h3>
<p>По умолчанию <a href="https://it-apteka.com/apache-guacamole-odin-portal-dlja-vseh-udalennyh-podkljuchenij/" title="Apache Guacamole: Один портал для всех удаленных подключений" target="_blank" rel="noopener" data-wpil-monitor-id="2013">Apache</a> слушает на 0.0.0.0:80 — это значит на всех сетевых интерфейсах. Если ты в офисной сети — коллеги могут зайти на твой localhost.</p>
<p>Если это нежелательно — в httpd.conf замени:</p>
<pre><code class="language-text">
Listen 80
</code></pre>
<p>на:</p>
<pre><code class="language-text">
Listen 127.0.0.1:80
</code></pre>
<p>После этого сервер будет доступен только с твоей машины.</p>
<h3>Брандмауэр Windows</h3>
<p>Убедись что в правилах брандмауэра Apache (httpd.exe) разрешён только для частных сетей, не для публичных. Проверь через «Брандмауэр Windows» — «Дополнительные параметры» — «Правила для входящих подключений». Найди правило для httpd.exe и проверь галки.</p>
<h2>8.5 Дополнительные настройки Apache и PHP</h2>
<h3>Настройка php.ini для разработки</h3>
<p>Дефолтный php.ini в WAMP и XAMPP заточен под продакшн — ошибки скрыты, лимиты маленькие. Для локальной разработки нужно другое.</p>
<p>Найди путь к активному php.ini через phpinfo() — смотри строку «Loaded Configuration File». Открой этот файл в текстовом редакторе от имени администратора.</p>
<p>Включи отображение ошибок. Найди и измени эти строки:</p>
<pre><code class="language-text">
display_errors = On
display_startup_errors = On
error_reporting = E_ALL
log_errors = On
</code></pre>
<p>Увеличь лимиты для работы с большими файлами и скриптами:</p>
<pre><code class="language-text">
max_execution_time = 300
max_input_time = 300
memory_limit = 512M
post_max_size = 128M
upload_max_filesize = 128M
</code></pre>
<p>Для работы с базами данных убедись что включены нужные расширения. Найди строки и убери # в начале:</p>
<pre><code class="language-text">
extension=mysqli
extension=pdo_mysql
extension=mbstring
extension=curl
extension=gd
extension=zip
</code></pre>
<p>После изменений в php.ini — обязательно перезапусти Apache. Изменения не применятся пока Apache работает со старой конфигурацией.</p>
<h3>Настройка httpd.conf — основные параметры</h3>
<p>httpd.conf — главный конфиг Apache. В XAMPP лежит по пути C:\xampp\apache\conf\httpd.conf. В WAMP — C:\wamp64\bin\apache\apache2.4.x\conf\httpd.conf.</p>
<p>Важные параметры которые часто нужно менять:</p>
<p>Корневая директория сервера:</p>
<pre><code class="language-text">
DocumentRoot "C:/xampp/htdocs"
</code></pre>
<p>Если хочешь хранить проекты в другом месте — меняй здесь.</p>
<p>Разрешение .htaccess файлов (нужно для WordPress, Laravel и большинства фреймворков):</p>
<pre><code class="language-text">
<Directory "C:/xampp/htdocs">
AllowOverride All
</Directory>
</code></pre>
<p>AllowOverride None отключает .htaccess полностью — тогда перенаправления и красивые URL не работают. AllowOverride All разрешает все директивы в .htaccess.</p>
<p>Включение модуля mod_rewrite (нужен для большинства PHP-фреймворков):</p>
<pre><code class="language-text">
LoadModule rewrite_module modules/mod_rewrite.so
</code></pre>
<p>Убедись что строка не закомментирована. После изменений — перезапусти Apache.</p>
<h3>Настройка MySQL через my.ini</h3>
<p>Конфиг MySQL в XAMPP: C:\xampp\mysql\bin\my.ini. В WAMP: C:\wamp64\bin\mysql\mysql8.1.0\my.ini.</p>
<p>Параметры которые часто нужно трогать:</p>
<pre><code class="language-text">
[mysqld]
max_allowed_packet = 64M
innodb_buffer_pool_size = 256M
max_connections = 100
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
</code></pre>
<p>max_allowed_packet влияет на максимальный размер запроса к базе. Если импортируешь большой дамп базы и получаешь ошибку «Packet too large» — увеличь это значение.</p>
<p>innodb_buffer_pool_size — сколько RAM выделить MySQL под кэш. На машинах с 8 ГБ RAM можно поставить 1G. На 4 ГБ — 256M-512M.</p>
<h3>SSL на localhost — настройка HTTPS</h3>
<p>Некоторые приложения требуют HTTPS даже на локалке. Особенно актуально если тестируешь Service Workers, cookies с флагом Secure или Progressive Web Apps.</p>
<p>В XAMPP SSL поддерживается из коробки. Есть готовый самоподписанный сертификат. Включи SSL в httpd.conf:</p>
<pre><code class="language-text">
Include conf/extra/httpd-ssl.conf
</code></pre>
<p>И раскомментируй загрузку модуля SSL:</p>
<pre><code class="language-text">
LoadModule ssl_module modules/mod_ssl.so
</code></pre>
<p>После этого https://localhost будет работать, но браузер покажет предупреждение о недоверенном сертификате — это нормально для самоподписанного сертификата.</p>
<p>Чтобы убрать предупреждение в Chrome — добавь сертификат в доверенные. Файл сертификата: C:\xampp\apache\conf\ssl.crt\server.crt. Открой его двойным кликом, нажми «Установить сертификат», выбери «Локальный компьютер» — «Доверенные корневые центры сертификации».</p>
<h2>9. Резервное копирование</h2>
<p>Это про данные. Без шуток.</p>
<h3>Что бэкапить</h3>
<ul>
<li>Папка с проектами: C:\wamp64\www\ или C:\xampp\htdocs\</li>
<li>Базы данных MySQL</li>
<li>Файлы конфигурации: php.ini, httpd.conf, my.ini</li>
<li>Конфиги виртуальных хостов</li>
</ul>
<h3>Бэкап баз данных через mysqldump</h3>
<p>Открой командную строку и выполни:</p>
<pre><code class="language-bash">
C:\xampp\mysql\bin\mysqldump.exe -u root -p mydb > C:\backup\mydb_backup.sql
</code></pre>
<p>Для WAMP путь к mysqldump будет другим:</p>
<pre><code class="language-bash">
C:\wamp64\bin\mysql\mysql8.1.0\bin\mysqldump.exe -u root -p mydb > C:\backup\mydb_backup.sql
</code></pre>
<p>Для автоматического бэкапа всех <a href="https://it-apteka.com/nastrojka-wifi-v-windows-10-i-11-polnoe-rukovodstvo-ot-podkljuchenija-do-ustranenija-nepoladok/" target="_blank" rel="noopener" data-wpil-monitor-id="2099">баз</a> — добавь в планировщик задач Windows скрипт который запускает mysqldump для каждой базы.</p>
<h3>Восстановление базы из бэкапа</h3>
<pre><code class="language-bash">
C:\xampp\mysql\bin\mysql.exe -u root -p mydb < C:\backup\mydb_backup.sql
</code></pre>
<h2>10. Профилактика: как не сломать снова</h2>
<p>Несколько правил которые избавят от большинства проблем.</p>
<ul>
<li>Не устанавливай IIS параллельно с WAMP или XAMPP. Либо одно, либо другое.</li>
<li>Фиксируй версии PHP в конфигах проектов. Если проект работает на PHP 8.1 - запиши это в README.</li>
<li>Перед обновлением WAMP или XAMPP - сделай бэкап баз данных и конфигов.</li>
<li>Не правь файлы в C:\wamp64\bin\ или C:\xampp\ напрямую без понимания что делаешь. Обновление перезапишет твои изменения.</li>
<li>Логи Apache и MySQL читай регулярно. Там видно предупреждения до того как что-то сломается.</li>
<li>Делай бэкап баз данных перед каждым серьёзным изменением схемы.</li>
</ul>
<h3>Мониторинг: смотри что происходит</h3>
<p>Логи Apache в XAMPP: C:\xampp\apache\logs\error.log</p>
<p>Логи MySQL в XAMPP: C:\xampp\mysql\data\имя_компьютера.err</p>
<pre><code class="language-bash">
type C:\xampp\apache\logs\error.log | more
</code></pre>
<p>Для WAMP логи доступны прямо из меню иконки в трее - "Apache" - "Apache error log".</p>
<h3>Обновление</h3>
<p>Перед обновлением WAMP или XAMPP:</p>
<ol>
<li>Сделай бэкап всех баз данных через mysqldump</li>
<li>Скопируй папку с проектами</li>
<li>Запиши текущие версии PHP, Apache, MySQL</li>
<li>Сохрани php.ini и httpd.conf</li>
</ol>
<p>После обновления:</p>
<ol>
<li>Проверь что Apache и MySQL запустились</li>
<li>Проверь версии через phpinfo()</li>
<li>Проверь что все проекты работают</li>
<li>Восстанови кастомные настройки из сохранённых конфигов</li>
</ol>
<p>Если что-то сломалось после обновления - не паникуй. Установщик старой версии обычно доступен на сайте. Удали новую версию, установи старую, восстанови бэкап баз данных.</p>
<h2>11. FAQ</h2>
<h3>Почему иконка WAMP не зелёная после установки?</h3>
<p>Оранжевая иконка означает что запустился только один из сервисов - обычно MySQL, а Apache упал. Красная - не запустился никто.</p>
<p>Первым делом проверяй порт 80. Откры командную строку от администратора:</p>
<pre><code class="language-bash">
netstat -ano | findstr ":80 "
</code></pre>
<p>Если порт занят - останови чужой сервис. Потом проверь что установлены все версии Visual C++ Redistributable x64. Скачай их с сайта Microsoft и установи. После этого перезапусти WAMP.</p>
<h3>Как сменить версию PHP в WAMP?</h3>
<p>Кликни левой кнопкой по зелёной иконке WAMP в системном трее. В меню найди раздел "PHP" или "PHP version". Там список всех установленных версий - выбери нужную. WAMP автоматически перезапустит Apache с новой версией PHP.</p>
<p>Если нужной версии нет в списке - скачай Add-on с сайта wampserver.com. Там есть отдельные установщики для PHP 7.4, 8.0, 8.1, 8.2 и других версий.</p>
<h3>Что лучше - WAMP или XAMPP?</h3>
<p>Зависит от задачи. WAMP удобнее когда нужно часто переключаться между версиями PHP - это делается в два клика без редактирования конфигов. XAMPP проще при первой установке - не нужно отдельно устанавливать Visual C++, установщик всё включает. XAMPP также работает на <a href="https://it-apteka.com/ssh-kljuchi-podkljuchaemsja-bez-parolja-i-ne-panikuem/" title="SSH-ключи: подключение без пароля — полный гайд для Linux, Windows и macOS" target="_blank" rel="noopener" data-wpil-monitor-id="1996">Linux и macOS</a> - важно если команда работает на разных ОС. Для новичка - XAMPP. Для работы с несколькими PHP-версиями - WAMP.</p>
<h3>Как проверить что PHP работает правильно?</h3>
<p>Создай файл phpinfo.php в папке проектов с содержимым <?php phpinfo(); ?> и открой его по адресу http://localhost/phpinfo.php. Если видишь большую страницу с информацией о PHP - всё работает. Если браузер скачивает файл или показывает текст PHP-кода - PHP не подключён к Apache, нужно проверить конфигурацию.</p>
<h3>Что делать если localhost показывает 403 Forbidden?</h3>
<p>403 означает что Apache запустился, но нет прав на доступ к директории. Проверь что в папке www (WAMP) или htdocs (XAMPP) есть хотя бы один файл index.php или index.html. Также проверь httpd.conf - блок Directory для корневой папки должен содержать строку "Require all granted". Ещё одна причина - .htaccess файл в папке проекта с неправильными директивами.</p>
<h3>MySQL запускается но phpMyAdmin не открывается?</h3>
<p>Проверь что Apache тоже запущен - phpMyAdmin работает через Apache, не напрямую. Если Apache запущен - открой http://localhost/phpmyadmin (не https). Проверь что папка phpmyadmin существует в корневой директории проектов. В XAMPP это C:\xampp\phpMyAdmin\ - она должна быть доступна как C:\xampp\htdocs\phpmyadmin\ или через Alias в конфигурации Apache.</p>
<h2>12. Итог</h2>
<h3>Бонус: установка WordPress на localhost за 10 минут</h3>
<p>Раз уж всё работает - покажу как поднять WordPress локально. Это стандартная задача для всех кто разрабатывает или тестирует <a href="https://it-apteka.com/kak-uskorit-sajt-na-wordpress-cherez-keshirovanie-v-nginx-recept-dlja-teh-kto-ustal-zhdat/" title="Как ускорить сайт на WordPress через кеширование в Nginx: рецепт для тех, кто устал ждать" target="_blank" rel="noopener" data-wpil-monitor-id="2011">сайты на WordPress</a>.</p>
<p>Шаг 1. Скачай свежую версию WordPress с официального сайта <a href="https://wordpress.org/download/" target="_blank" rel="noopener">wordpress.org</a>. Распакуй архив в папку проектов.</p>
<p>Для XAMPP распакуй в C:\xampp\htdocs\wordpress\. Для WAMP - в C:\wamp64\www\wordpress\.</p>
<p>Шаг 2. Создай базу данных для WordPress. Открой phpMyAdmin по адресу http://localhost/phpmyadmin. Нажми "Создать базу данных". Введи имя wordpress, выбери кодировку utf8mb4_unicode_ci. Нажми "Создать".</p>
<p>Шаг 3. Открой в браузере http://localhost/wordpress. <a href="https://it-apteka.com/avtomaticheskaja-ustanovka-wordpress-na-vps-za-5-minut-skript-pod-kljuch/" title="Установка WordPress на Ubuntu VPS: bash-скрипт, Nginx, SSL и WP-CLI за 10 минут" target="_blank" rel="noopener" data-wpil-monitor-id="1991">WordPress запустит мастер установки</a>. Укажи данные базы данных:</p>
<pre><code class="language-text">
Database Name: wordpress
Username: root
Password: (пустое поле)
Database Host: localhost
Table Prefix: wp_
</code></pre>
<p>Шаг 4. WordPress проверит подключение и предложит создать wp-config.php автоматически или скопировать текст вручную. Если автоматически не получается - скопируй предложенный текст, создай файл wp-config.php в папке wordpress вручную и вставь туда.</p>
<p>Шаг 5. Нажми "Установить WordPress". Заполни название сайта, имя пользователя администратора, пароль и email. Нажми "Установить WordPress".</p>
<p>Всё. WordPress установлен. Панель управления доступна по адресу http://localhost/wordpress/wp-admin.</p>
<p>Если получаешь ошибку "Error establishing a <a href="https://it-apteka.com/category/database/" title="Базы данных" target="_blank" rel="noopener" data-wpil-monitor-id="1990">database</a> connection" - проверь что MySQL запущен и что данные в wp-config.php правильные.</p>
<h2>13. Работа с несколькими проектами: организация рабочего пространства</h2>
<p>Один проект в htdocs - это просто. Но когда проектов пять, десять, двадцать - нужна система. Иначе через месяц не вспомнишь что где лежит.</p>
<h3>Структура папок</h3>
<p>Стандартная практика - каждый проект в отдельной папке внутри htdocs или www:</p>
<pre><code class="language-text">
C:\xampp\htdocs\
project1\
index.php
.htaccess
project2\
public\
index.php
src\
wordpress-site\
wp-config.php
wp-content\
</code></pre>
<p>Доступ: http://localhost/project1/, http://localhost/project2/. Просто и без лишних настроек.</p>
<p>Для серьёзной разработки удобнее виртуальные хосты - тогда project1.local и project2.local работают как отдельные сайты. Инструкцию по <a href="https://it-apteka.com/dhcp-options-v-cisco-i-mikrotik-option-12-42-43-60-66-67-82-primery-nastrojki/" title="DHCP Options в Cisco и MikroTik: Option 12, 42, 43, 60, 66, 67, 82 — примеры настройки" target="_blank" rel="noopener" data-wpil-monitor-id="1992">настройке смотри выше в разделе "Пример</a> 3: Создание виртуального хоста.</p>
<h3>Разные версии PHP для разных проектов в WAMP</h3>
<p>WAMP поддерживает переключение PHP на уровне виртуального хоста. Это значит что project1 может работать на PHP 8.2, а project2 - на PHP 7.4. Без переустановки сервера.</p>
<p>Для этого в конфиге виртуального хоста добавь директиву PHPVersion:</p>
<pre><code class="language-text">
<VirtualHost *:80>
DocumentRoot "C:/wamp64/www/project1"
ServerName project1.local
php_admin_value extension_dir "C:/wamp64/bin/php/php8.2.12/ext/"
php_admin_value extension "C:/wamp64/bin/php/php8.2.12/php8apache2_4.dll"
</VirtualHost>
</code></pre>
<p>В WAMP это делается через меню в трее: левый клик по иконке - Apache - httpd-vhosts.conf - выбрать виртуальный хост - PHP version.</p>
<h3>Composer на localhost</h3>
<p>Если работаешь с современным PHP-кодом - рано или поздно понадобится Composer. Скачай установщик с <a href="https://getcomposer.org/download/" target="_blank" rel="noopener">getcomposer.org</a>.</p>
<p>При установке Composer укажи путь к PHP. Для XAMPP это:</p>
<pre><code class="language-text">
C:\xampp\php\php.exe
</code></pre>
<p>Для WAMP путь зависит от версии PHP:</p>
<pre><code class="language-text">
C:\wamp64\bin\php\php8.2.12\php.exe
</code></pre>
<p>После установки проверь что Composer работает:</p>
<pre><code class="language-bash">
composer --version
</code></pre>
<p>Если выдаёт версию - всё хорошо. Если "команда не найдена" - Composer не добавился в PATH. Добавь C:\ProgramData\ComposerSetup\bin\ в переменную PATH через "Свойства системы" - "Переменные среды".</p>
<h2>14. Автозапуск и запуск как служба Windows</h2>
<p>По умолчанию WAMP и XAMPP не запускаются автоматически при загрузке Windows. Каждый раз нужно запускать вручную. Это нормально если сервер нужен иногда. Если работаешь с ним постоянно - настрой автозапуск.</p>
<h3>Автозапуск XAMPP</h3>
<p>В XAMPP Control Panel есть галочки "Svc" напротив каждого сервиса. Поставь галку у Apache и MySQL - они установятся как службы Windows и будут запускаться автоматически.</p>
<p>Нажимать нужно с правами администратора. Если не получается - запусти XAMPP Control Panel от администратора.</p>
<p>Проверь что службы установлены:</p>
<pre><code class="language-bash">
sc query apache2.4
sc query mysql
</code></pre>
<p>Должны показать STATE: RUNNING.</p>
<p>Чтобы убрать автозапуск - убери галки Svc в XAMPP Control Panel.</p>
<h3>Автозапуск WAMP</h3>
<p>WAMP можно добавить в автозагрузку Windows через ярлык в папке автозагрузки:</p>
<pre><code class="language-text">
C:\Users\ИмяПользователя\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
</code></pre>
<p>Скопируй туда ярлык wampmanager.exe. При следующей загрузке Windows WAMP запустится автоматически.</p>
<p>Или через реестр - но это уже лишнее для большинства случаев.</p>
<h3>Запуск Apache и MySQL как отдельных служб Windows</h3>
<p>Если нужен полный контроль без WAMP/XAMPP Control Panel - Apache и MySQL можно установить как системные службы напрямую.</p>
<p>Установка Apache как службы (из командной строки администратора):</p>
<pre><code class="language-bash">
C:\xampp\apache\bin\httpd.exe -k install -n "Apache2.4"
</code></pre>
<p>Запуск и остановка через командную строку:</p>
<pre><code class="language-bash">
net start Apache2.4
net stop Apache2.4
</code></pre>
<p>Установка MySQL как службы:</p>
<pre><code class="language-bash">
C:\xampp\mysql\bin\mysqld.exe --install MySQL --defaults-file="C:\xampp\mysql\bin\my.ini"
</code></pre>
<p>Запуск и остановка:</p>
<pre><code class="language-bash">
net start MySQL
net stop MySQL
</code></pre>
<p>После установки как служб они появятся в "Службы Windows" (services.msc) и будут <a href="https://it-apteka.com/install-asterisk-full-manual/" title="Asterisk с нуля: установка, настройка и запуск IP-телефонии на сервере" target="_blank" rel="noopener" data-wpil-monitor-id="2012">запускаться автоматически согласно настройкам</a> типа запуска.</p>
<h2>15. Диагностика производительности: когда всё работает, но медленно</h2>
<p>Иногда локальный сервер работает, но медленно. Страницы грузятся долго, запросы к базе тормозят. Это тоже лечится.</p>
<h3>PHP OPcache - ускорение PHP без усилий</h3>
<p>OPcache кэширует скомпилированный PHP-код в памяти. Страницы загружаются быстрее потому что PHP не компилирует каждый файл заново при каждом запросе.</p>
<p>Включи OPcache в php.ini:</p>
<pre><code class="language-text">
[opcache]
zend_extension=opcache
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
</code></pre>
<p>Перезапусти Apache. Проверь через phpinfo() что OPcache включён - ищи раздел "opcache" или "Zend OPcache".</p>
<p>На локалке opcache.revalidate_freq=0 может быть удобнее - тогда OPcache каждый раз проверяет изменился ли файл. Это чуть медленнее чем production, но зато при изменении PHP-файла сразу видишь результат без сброса кэша.</p>
<h3>Медленные запросы к MySQL - включи slow query log</h3>
<p>Если сайт работает медленно из-за базы данных - включи лог медленных запросов в MySQL. Это покажет какие запросы тормозят.</p>
<p>В my.ini добавь:</p>
<pre><code class="language-text">
[mysqld]
slow_query_log = 1
slow_query_log_file = C:/xampp/mysql/data/slow-queries.log
long_query_time = 1
</code></pre>
<p>long_query_time = 1 означает что в лог попадут все запросы которые выполняются дольше 1 секунды. Перезапусти MySQL. Теперь тормозящие запросы будут записываться в лог-файл.</p>
<p>Открой лог и посмотри что там:</p>
<pre><code class="language-bash">
type C:\xampp\mysql\data\slow-queries.log
</code></pre>
<p>Там будут запросы с временем выполнения. Эти запросы нужно оптимизировать - добавить индексы, переписать JOIN-ы, или просто убрать N+1 проблемы в коде.</p>
<h3>Xdebug для отладки PHP</h3>
<p>Xdebug - расширение PHP для отладки. Позволяет ставить точки останова в коде, смотреть значения переменных, трассировать выполнение. Незаменимо при серьёзной разработке.</p>
<p>Скачай Xdebug с официального сайта <a href="https://xdebug.org/wizard" target="_blank" rel="noopener">xdebug.org/wizard</a>. Вставь туда вывод phpinfo() - сайт сам скажет какую версию Xdebug скачать под твой PHP.</p>
<p>Скопируй скачанный .dll файл в папку расширений PHP. Путь к папке расширений смотри в phpinfo() - строка extension_dir.</p>
<p>Добавь в php.ini:</p>
<pre><code class="language-text">
[xdebug]
zend_extension=xdebug
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=127.0.0.1
xdebug.client_port=9003
</code></pre>
<p>Перезапусти Apache. Проверь через phpinfo() что Xdebug появился.</p>
<p>Для использования в VS Code установи расширение "PHP Debug". В PhpStorm Xdebug поддерживается из коробки. Настрой IDE на прослушивание порта 9003.</p>
<h2>16. Типичные сценарии использования</h2>
<h3>Разработка WordPress тем и плагинов</h3>
<p>Стандартная задача. Установи WordPress на localhost как описано выше. Для разработки тем - создай папку в C:\xampp\htdocs\wordpress\wp-content\themes\mytheme\.</p>
<p>Включи режим отладки WordPress. Открой wp-config.php и найди строку:</p>
<pre><code class="language-php">
define( 'WP_DEBUG', false );
</code></pre>
<p>Замени на:</p>
<pre><code class="language-php">
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', true );
define( 'SCRIPT_DEBUG', true );
</code></pre>
<p>Теперь WordPress будет показывать PHP-ошибки и записывать их в wp-content/debug.log.</p>
<h3>Тестирование PHP-приложений перед деплоем</h3>
<p>Если деплоишь на Linux-сервер с PHP 8.1 - локально тоже ставь PHP 8.1. Несоответствие версий PHP между локалкой и продакшном - источник половины "у меня работало" историй.</p>
<p>Проверь что на локалке и продакшне совпадают:</p>
<ul>
<li>Версия PHP</li>
<li>Включённые расширения PHP</li>
<li>Версия MySQL</li>
<li>Настройки php.ini которые влияют на поведение: short_open_tag, error_reporting, date.timezone</li>
</ul>
<p>Посмотри включённые расширения на локалке:</p>
<pre><code class="language-php">
<?php
print_r(get_loaded_extensions());
?>
</code></pre>
<p>Сравни с тем что установлено на сервере. Если есть расширение на сервере которого нет у тебя - включи его в php.ini.</p>
<h3>Импорт большой базы данных</h3>
<p>Типичная ситуация: надо поднять копию продакшн-базы на локалке. База весит 500 МБ или больше. phpMyAdmin не справляется - таймаут.</p>
<p>Используй командную строку напрямую:</p>
<pre><code class="language-bash">
C:\xampp\mysql\bin\mysql.exe -u root mydb < C:\backup\production_dump.sql
</code></pre>
<p>Это работает для любого размера файла. phpMyAdmin имеет ограничения на размер загружаемого файла - они в php.ini (upload_max_filesize и post_max_size). Через CLI таких ограничений нет.</p>
<p>Если база очень большая и импорт идёт долго - добавь флаги для ускорения:</p>
<pre><code class="language-bash">
C:\xampp\mysql\bin\mysql.exe -u root --max_allowed_packet=512M mydb < C:\backup\production_dump.sql
</code></pre>
<p>Прогресс можно отслеживать через размер файла - MySQL читает дамп последовательно.</p>
<h2>17. Итог</h2>
<p>Ты поднял локальный сервер. Apache отвечает на localhost, MySQL принимает подключения на 3306, PHP выполняет скрипты. phpMyAdmin открывается и даёт доступ к базам данных.</p>
<p>Теперь у тебя есть рабочее окружение для разработки PHP-приложений на Windows. Можешь создавать виртуальные хосты для разных проектов, переключаться между версиями PHP, тестировать SQL-запросы через phpMyAdmin. Всё локально, без удалённых серверов и лишних расходов.</p>
"Не
<br />
Если после всех шагов что-то всё равно не работает — пиши в комментарии. Укажи: ОС и версию Windows, какой сервер ставил (WAMP или XAMPP) и какую версию, что конкретно не работает (иконка красная / 403 / PHP не выполняется / MySQL падает), и что показывает лог ошибок. Разберёмся.<br />
Быстрый ответ
Скачай WAMP с официального сайта wampserver.com или XAMPP с apachefriends.org. Установи с правами администратора. Перед запуском освободи порт 80 — останови IIS или Skype. Запусти, проверь что иконка зелёная, открой localhost в браузере.
1. Диагноз: поставил, не работает
Поднял WAMP. Иконка оранжевая или красная. Apache не стартует. Localhost выдаёт ошибку 403 или вообще не открывается. Знакомо?
Или установил XAMPP, нажал Start у Apache — строчка мигнула и погасла. Control Panel пишет что-то про порты. MySQL тоже молчит.
Это решается за 15-30 минут. Нужны: Windows 10 или 11, права администратора, 10 минут терпения. На выходе получишь рабочий localhost с Apache, PHP и MySQL — всё что нужно для локальной разработки.
Что разберём в статье:
- Установка WAMP и XAMPP по шагам
- Почему не запускается и как чинить
- Разбор 7 самых частых ошибок с командами
- Сравнение WAMP vs XAMPP — когда что выбирать
- 5 практических примеров из реальной работы
- Установка WordPress на localhost
- Безопасность и профилактика
Схема диагностики: с чего начать
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart TD
A["Иконка красная или оранжевая"] --> B{"Apache запустился?"}
B -->|"Нет"| C["Проверь порт 80"]
B -->|"Да"| D{"MySQL запустился?"}
C --> E["netstat -ano | findstr :80"]
E --> F{"Порт занят?"}
F -->|"Да"| G["Останови IIS или другой сервис"]
F -->|"Нет"| H["Проверь VC++ Redistributable"]
G --> I["Перезапусти Apache"]
H --> I
D -->|"Нет"| J["Проверь порт 3306"]
D -->|"Да"| K["Открой localhost в браузере"]
J --> L["netstat -ano | findstr :3306"]
K --> M{"Открылось?"}
M -->|"403"| N["Проверь htdocs и конфиг Directory"]
M -->|"Да"| O["Сервер работает"]
style A fill:#f8fafc,stroke:#ef4444,stroke-width:2px,color:#991b1b
style O fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style G fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#9a3412
style H fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#9a3412
style N fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#9a3412
2. Причины — почему ломается сразу после установки
Перед тем как лезть в настройки, пойми откуда растут ноги. 90% проблем с WAMP и XAMPP — это одни и те же грабли.
Порт 80 занят
Самая частая причина. Apache хочет слушать порт 80, но там уже сидит IIS (встроенный веб-сервер Windows), Skype, nginx или ещё какой-нибудь сервис. Apache пытается занять порт, получает отказ, падает. Иконка WAMP становится оранжевой — Apache не запустился, MySQL запустился.
Не установлен Visual C++ Redistributable
WAMP особенно капризен на этот счёт. Если не хватает нужной версии VC++ Runtime — Apache или PHP просто не запустятся. Никакого внятного сообщения об ошибке при этом не будет. Просто ничего не работает.
Порт 3306 занят
MySQL не стартует если порт уже занят другим экземпляром MySQL или MariaDB. Особенно актуально если до этого что-то уже ставил и не почистил.
Антивирус блокирует Apache
Windows Defender или сторонний антивирус может блокировать httpd.exe при первом запуске. Apache пробует запуститься, антивирус хватает процесс за горло, Apache падает. В логах — тишина.
Неправильный путь установки
WAMP нельзя ставить в путь с пробелами или кириллицей. «C:\Program Files\wamp» — уже проблема. «C:\Users\Андрей\wamp» — вообще беда. Только C:\wamp или D:\wamp.
Конфликт PHP и расширений
Если вручную копировал dll-файлы или менял php.ini до запуска — PHP может не подняться. Apache стартует, PHP падает, сайты не работают.
3. Установка WAMP Server
3.1 Системные требования
| Компонент |
Минимум |
Рекомендуется |
| ОС |
Windows 7 x64 |
Windows 10/11 x64 |
| RAM |
512 МБ |
2 ГБ и больше |
| Диск |
500 МБ |
2 ГБ (под проекты) |
| VC++ Runtime |
x64 2012-2022 |
Все версии x64 |
| Права |
Администратор |
Администратор |
На момент публикации актуальна версия WampServer 3.3.x с Apache 2.4, PHP 8.2/8.1/7.4, MariaDB 10.11. Перед установкой проверь свежие релизы на wampserver.com.
3.2 Подготовка: Visual C++ Redistributable
Без этого шага WAMP не запустится. Скачай и установи все версии VC++ Redistributable x64 с сайта Microsoft — от 2012 до 2022. WAMP требует именно x64, даже если у тебя 32-битное приложение.
Ссылка для скачивания всех версий сразу: Microsoft Visual C++ Redistributable Downloads.
Проверь VC++ перед установкой WAMP
Если пропустишь установку VC++ Runtime — WAMP установится, но Apache не запустится. Никакой явной ошибки при этом не увидишь. Это самый частый вопрос на форумах: «Установил WAMP, иконка красная, что делать?» — ответ в 60% случаев именно здесь.
3.3 Скачивание и установка WAMP
Скачай актуальную версию с официального сайта wampserver.com. Берёшь версию x64. Файл весит около 300-400 МБ.
Запусти установщик от имени администратора. Правая кнопка мыши по файлу — «Запуск от имени администратора».
Выбери путь установки. Только латиница, только без пробелов:
C:\wamp64
Установщик спросит про браузер по умолчанию и текстовый редактор. Можешь оставить что предлагает или выбрать своё. На работу сервера не влияет.
После установки запусти WAMP через иконку на рабочем столе или из меню Пуск. Запускай от имени администратора.
Смотри на иконку в системном трее (правый нижний угол):
- Красная — ничего не запустилось
- Оранжевая — что-то запустилось, что-то нет (обычно Apache упал)
- Зелёная — всё работает, можно открывать localhost
3.4 Установка XAMPP
Скачай XAMPP с официального сайта apachefriends.org. Выбери версию с нужным PHP. Файл весит 150-160 МБ.
Запусти установщик от администратора. Выбери компоненты — для базовой работы достаточно Apache, MySQL, PHP и phpMyAdmin. FileZilla и Mercury обычно не нужны.
Путь установки — без пробелов и кириллицы:
C:\xampp
После установки запусти XAMPP Control Panel. Нажми Start у Apache и MySQL. Если всё хорошо — строки подсветятся зелёным, в логах появятся сообщения о запуске.
Антивирус и брандмауэр при первом запуске
При первом
запуске Apache Windows Firewall спросит разрешения для httpd.exe. Разреши доступ в частных сетях. Если пропустить или нажать Отмена — Apache будет работать, но могут быть проблемы с доступом с других устройств в локальной
сети.
3.5 Архитектура: как работает стек
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart TD
A["Браузер (Chrome, Firefox)"] --> B["Apache httpd (порт 80/443)"]
B --> C["PHP-CGI / PHP модуль"]
C --> D["Твой PHP-скрипт"]
D --> E["MySQL / MariaDB (порт 3306)"]
B --> F["Статические файлы (HTML, CSS, JS)"]
style A fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style B fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#9a3412
style C fill:#f8fafc,stroke:#8b5cf6,stroke-width:2px,color:#5b21b6
style D fill:#f8fafc,stroke:#64748b,stroke-width:2px,color:#1e293b
style E fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style F fill:#f8fafc,stroke:#64748b,stroke-width:2px,color:#1e293b
Браузер отправляет запрос на localhost. Apache получает запрос на порту 80. Если запрошен PHP-файл — передаёт его PHP-модулю. PHP выполняет скрипт, при необходимости обращается к MySQL на порту 3306. Результат идёт обратно через Apache в браузер.
3.6 Таблица портов
| Сервис |
Порт по умолчанию |
Протокол |
Альтернативный порт |
| Apache HTTP |
80 |
TCP |
8080, 8888 |
| Apache HTTPS |
443 |
TCP |
8443 |
| MySQL / MariaDB |
3306 |
TCP |
3307 |
| phpMyAdmin |
80 (через Apache) |
HTTP |
— |
4. Проверка работы
4.1 Открой localhost
Открой браузер и перейди по адресу:
http://localhost
WAMP покажет страницу с информацией о сервере. XAMPP — свою приветственную страницу. Если открылось — Apache работает.
4.2 Проверь phpMyAdmin
http://localhost/phpmyadmin
Если открылась страница входа — MySQL и phpMyAdmin работают. По умолчанию логин root, пароль пустой.
4.3 Проверь PHP через phpinfo()
Создай файл test.php в папке проектов. Для WAMP это C:\wamp64\www\, для XAMPP это C:\xampp\htdocs\.
<?php
phpinfo();
?>
Открой в браузере:
http://localhost/test.php
Должна появиться страница с подробной информацией о версии PHP, подключённых модулях и настройках. Видишь эту страницу — PHP работает.
4.4 Проверь порты через командную строку
Открой командную строку от администратора и выполни:
netstat -ano | findstr ":80 "
Должен увидеть строки с состоянием LISTENING на порту 80. Это Apache слушает входящие подключения.
netstat -ano | findstr ":3306"
Аналогично для MySQL — строки LISTENING на порту 3306.
5. Практические примеры из жизни
Пример 1: Освобождение порта 80
Apache не запускается. Открываем командную строку от администратора и смотрим кто занял порт:
netstat -ano | findstr ":80 "
Получишь что-то вроде:
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 1234
Число в конце — PID процесса. Узнаём что это за процесс:
tasklist | findstr "1234"
Если это IIS — останови его:
net stop w3svc
Если это не нужный сервис — убей процесс:
taskkill /PID 1234 /F
После этого запускай Apache снова.
IIS и WAMP/XAMPP - не дружат
IIS (Internet Information Services) — встроенный веб-сервер Windows. Он запускается автоматически на некоторых версиях Windows. Если нужен WAMP или XAMPP — IIS лучше отключить совсем. Через «Включение или отключение компонентов Windows» убери галку с «Службы IIS».
Пример 2: Смена версии PHP в WAMP
WAMP поставляется с несколькими версиями PHP. Переключаться между ними легко прямо из интерфейса.
Кликни левой кнопкой на иконку WAMP в трее. Найди раздел «PHP» — там будет подменю со списком установленных версий. Выбери нужную версию.
WAMP автоматически перезапустит Apache с выбранной версией PHP. Проверь через phpinfo() что версия переключилась.
Если нужно добавить версию PHP которой нет в стандартной поставке — скачай Add-on с официального сайта WAMP. Это отдельные установщики для конкретных версий PHP.
Пример 3: Создание виртуального хоста
Вместо localhost/myproject удобнее работать с myproject.local. Для этого нужен виртуальный хост.
Шаг 1. Открой файл hosts от имени администратора. Он находится по пути:
C:\Windows\System32\drivers\etc\hosts
Добавь строку в конец файла:
127.0.0.1 myproject.local
Шаг 2. Для XAMPP открой файл конфигурации виртуальных хостов:
C:\xampp\apache\conf\extra\httpd-vhosts.conf
Добавь блок виртуального хоста:
<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs/myproject"
ServerName myproject.local
<Directory "C:/xampp/htdocs/myproject">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Шаг 3. Убедись что в httpd.conf раскомментирована строка подключения vhosts:
Include conf/extra/httpd-vhosts.conf
Шаг 4. Перезапусти Apache. Открой myproject.local в браузере.
Для WAMP процесс аналогичный, но файлы конфигурации лежат в C:\wamp64\bin\apache\apache2.4.x\conf\.
Пример 4: Создание базы данных и подключение из PHP
Открой phpMyAdmin по адресу http://localhost/phpmyadmin. Войди под root с пустым паролем.
Создай новую базу данных. Нажми «Создать БД», введи имя (например, mydb), выбери сортировку utf8mb4_unicode_ci.
Создай пользователя для этой базы. Зайди в «Привилегии» — «Добавить пользователя». Заполни имя, хост (localhost), пароль. Дай все права на базу mydb.
Подключение из PHP:
<?php
$host = 'localhost';
$dbname = 'mydb';
$user = 'myuser';
$password = 'mypassword';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $user, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Подключение успешно";
} catch (PDOException $e) {
echo "Ошибка: " . $e->getMessage();
}
?>
Пример 5: Запуск phpinfo() и диагностика конфигурации
phpinfo() — это рентген твоего PHP. Смотри на что обращать внимание:
- PHP Version — версия PHP
- Loaded Configuration File — путь к активному php.ini
- extension_dir — директория расширений PHP
- Секция mysql или mysqli — если нет, модуль не подключён
- display_errors — должно быть On на локальной разработке
- max_execution_time, memory_limit, upload_max_filesize — часто нужно менять под задачу
Путь к php.ini берёшь из «Loaded Configuration File». Открываешь этот файл, правишь нужные параметры, перезапускаешь Apache.
6. Осложнения: разбор ошибок
Вот тут начинается самое интересное. Сервер установлен, но что-то идёт не так. Разбираем по симптомам.
Как читать логи — это первое что нужно уметь
Перед тем как гуглить ошибку — открой лог. Там написано всё. Прямым текстом. На английском, но понятно.
Логи Apache в XAMPP:
C:\xampp\apache\logs\error.log
C:\xampp\apache\logs\access.log
Логи MySQL в XAMPP:
C:\xampp\mysql\data\имя_компьютера.err
Логи WAMP доступны из трея: левый клик по иконке — Apache — Apache error log.
Смотришь последние строки в логе:
powershell -command "Get-Content C:\xampp\apache\logs\error.log -Tail 30"
Ищи строки с [error] или [crit]. Там написано что именно сломалось и почему.
Ошибка: Apache не запускается, иконка красная или оранжевая
Причина в 80% случаев — порт 80 занят. Проверяй так:
netstat -ano | findstr ":80 "
Нашёл чужой процесс — смотри PID, останови сервис. Самые частые виновники: IIS, Skype (старые версии используют порт 80), nginx, другой Apache.
Останови IIS полностью:
net stop w3svc
net stop was
Если хочешь чтобы IIS не запускался автоматически:
sc config w3svc start= disabled
sc config was start= disabled
После этого запусти Apache снова.
Второй вариант — изменить порт Apache на 8080 чтобы не конфликтовать с IIS. В httpd.conf найди строку:
Listen 80
Измени на:
Listen 8080
Тогда localhost перестанет работать, но http://localhost:8080 будет открываться. Это менее удобно, но решает конфликт если IIS нужен параллельно.
Ошибка: Apache стартует на секунду и падает
Смотри лог Apache. В XAMPP это C:\xampp\apache\logs\error.log. В WAMP это C:\wamp64\logs\apache_error.log.
type C:\xampp\apache\logs\error.log
Ищи строки с «Error» или «Fatal». Часто там написано прямым текстом: «no listening sockets available» означает порт занят, «Invalid Mutex» означает проблему с правами на директорию.
Если в логе видишь «AH00526: Syntax error on line N of httpd.conf» — ты сломал конфиг. Открой httpd.conf и проверь строку N на опечатки, непарные кавычки или скобки.
Быстрая проверка синтаксиса конфига Apache:
C:\xampp\apache\bin\httpd.exe -t
Если конфиг правильный — напишет «Syntax OK». Если нет — покажет где ошибка.
Ошибка: MySQL не запускается
Проверяем порт 3306:
netstat -ano | findstr ":3306"
Если порт занят другим процессом MySQL — возможно, уже есть установленный MySQL как системный сервис. Останови его:
net stop mysql
Или найди через диспетчер задач службу MySQL и останови её.
Смотри лог MySQL. В XAMPP это C:\xampp\mysql\data\имя_компьютера.err. Там будет подробно написано почему не стартует.
Одна из частых причин — повреждённый файл mysql.pid или ib_logfile. Это случается если MySQL был жёстко завершён. В логе будет что-то про «InnoDB: Error: log file».
Осторожно с файлами InnoDB
Никогда не удаляй файлы ib_logfile0, ib_logfile1 и ibdata1 пока не убедился что понимаешь что делаешь. Это файлы данных InnoDB. Удалишь — потеряешь все данные в таблицах InnoDB. Сделай бэкап через mysqldump перед любыми манипуляциями с этими файлами.
Если MySQL не запускается после сбоя питания или жёсткого выключения компьютера — попробуй такой порядок действий:
- Сделай копию папки C:\xampp\mysql\data\ на всякий случай
- Удали файл C:\xampp\mysql\data\mysql.pid если он существует
- Попробуй запустить MySQL снова
- Если не помогло — смотри лог, там будет конкретная причина
Ошибка: localhost открывается, но показывает 403 Forbidden
403 — это Apache запустился, но нет прав на чтение директории или нет индексного файла.
Проверь содержимое директории www (WAMP) или htdocs (XAMPP). Там должен быть хотя бы index.php или index.html. Если папка пустая — Apache выдаёт 403 когда листинг директорий отключён.
Проверь httpd.conf — ищи блок Directory для корневой папки:
<Directory "C:/xampp/htdocs">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
</Directory>
Строка «Require all granted» должна быть именно такой. Если там «Require all denied» — Apache намеренно запрещает доступ.
Если 403 появляется на конкретном проекте а не на localhost вообще — проверь .htaccess в папке проекта. Возможно там есть директива deny или неправильно настроены правила mod_rewrite.
Ошибка: PHP не работает, браузер скачивает .php файл
Браузер скачивает PHP-файл вместо его выполнения — PHP-модуль не подключён к Apache.
В XAMPP открой httpd.conf и найди строку:
LoadModule php_module "C:/xampp/php/php8apache2_4.dll"
Если строка закомментирована (начинается с #) — убери #. Если строки нет совсем — версия PHP несовместима с Apache, нужно переустановить XAMPP.
Также проверь что в httpd.conf есть строки для обработки PHP-файлов:
AddType application/x-httpd-php .php
Ошибка: phpMyAdmin не открывается или пишет «Access denied»
Access denied при входе в phpMyAdmin — неправильный пароль или конфигурация.
Найди файл конфигурации phpMyAdmin:
C:\xampp\phpMyAdmin\config.inc.php
Проверь строку:
$cfg['Servers'][$i]['password'] = '';
Если у root пустой пароль — должна быть пустая строка. Если ты уже менял пароль root в MySQL — укажи его здесь.
Если phpMyAdmin вообще не открывается и выдаёт 404 — проверь что папка phpmyadmin существует по пути C:\xampp\phpMyAdmin\ и что в httpd.conf есть Alias для phpMyAdmin. В XAMPP это обычно в файле C:\xampp\apache\conf\extra\httpd-xampp.conf:
Alias /phpmyadmin "C:/xampp/phpMyAdmin/"
Ошибка: WordPress или другой движок выдаёт «500 Internal Server Error»
500 ошибка означает что PHP скрипт упал с фатальной ошибкой. Первым делом смотри лог Apache — там будет написано что именно упало.
Вторая частая причина — .htaccess с директивами которые Apache не понимает. Переименуй .htaccess в .htaccess.bak и обнови страницу. Если 500 пропала — дело в .htaccess.
Для WordPress частая причина — отключён mod_rewrite. Убедись что в httpd.conf строка LoadModule rewrite_module не закомментирована и что для директории htdocs установлен AllowOverride All.
7. Сравнение WAMP vs XAMPP
Это отдельный вопрос который гуглят постоянно. Отвечу без воды.
| Параметр |
WAMP |
XAMPP |
| Платформа |
Только Windows |
Windows, Linux, macOS |
| База данных |
MariaDB (последние версии) |
MariaDB |
| Переключение PHP |
Из трея, очень удобно |
Вручную через конфиги |
| Несколько PHP |
Да, встроено |
Требует ручной настройки |
| Дополнительные сервисы |
Только Apache+PHP+MySQL |
FTP, Mercury Mail, Tomcat |
| Интерфейс управления |
Иконка в трее |
Control Panel |
| Размер установки |
~300 МБ |
~160 МБ |
| Требования VC++ |
Нужно ставить вручную |
Встроено в установщик |
| Установка плагинов |
Add-on через сайт |
Ручная установка |
| SSL из коробки |
Да |
Да |
| Для новичков |
Чуть сложнее старт |
Проще начать |
| Поддержка |
Форум wampserver.com |
Активное сообщество |
Если работаешь только на Windows и тебе нужно часто переключаться между версиями PHP — бери WAMP. Это его главное преимущество. Из трея выбрал PHP 7.4 — Apache перезапустился с нужной версией. Удобно когда ведёшь несколько проектов под разные версии PHP.
Если начинаешь с нуля, нужно что попроще или работаешь на разных ОС — бери XAMPP. Установка без геморроя с VC++, Control Panel понятна с первого взгляда, сообщество больше.
Альтернативы: когда WAMP и XAMPP не подходят
OpenServer Panel — российский проект, ospanel.io. Интерфейс на русском, много версий PHP, встроенные менеджеры доменов. Хорошая альтернатива если WAMP кажется сложным.
Laragon — laragon.org. Лёгкий, быстро стартует, хорошо работает с Laravel. Если пишешь на Laravel — смотри в эту сторону.
Docker — когда нужна среда максимально близкая к продакшну. Поднимаешь docker-compose с нужными версиями PHP, MySQL, nginx — и работаешь в контейнере. Настройка занимает больше времени, зато конфиг можно положить в репозиторий и у всей команды будет одинаковая среда. Это отдельная тема на отдельную статью. Одна строка в crontab без комментария убивает весь отдел — одна строка в docker-compose без документации работает ровно до следующего разработчика.
8. Безопасность локального сервера
Да, это localhost. Да, это только для разработки. Но привычки формируются на локалке и переносятся в продакшн.
Ограничь доступ к phpMyAdmin
По умолчанию phpMyAdmin доступен только с localhost — это хорошо. Убедись что так и есть. В конфиге phpMyAdmin:
$cfg['Servers'][$i]['host'] = '127.0.0.1';
Никогда не открывай phpMyAdmin на внешний интерфейс если работаешь не только на локальной машине.
Поставь пароль на root в MySQL
По умолчанию root без пароля — это норма для локальной разработки. Но если твоя машина в корпоративной сети — поставь пароль.
Открой phpMyAdmin, зайди под root. Перейди в «Привилегии» — «root» — «Изменить привилегии». Установи пароль.
После этого обнови конфиг phpMyAdmin и все конфиги своих приложений где прописан пустой пароль.
Не открывай Apache на все интерфейсы
По умолчанию Apache слушает на 0.0.0.0:80 — это значит на всех сетевых интерфейсах. Если ты в офисной сети — коллеги могут зайти на твой localhost.
Если это нежелательно — в httpd.conf замени:
Listen 80
на:
Listen 127.0.0.1:80
После этого сервер будет доступен только с твоей машины.
Брандмауэр Windows
Убедись что в правилах брандмауэра Apache (httpd.exe) разрешён только для частных сетей, не для публичных. Проверь через «Брандмауэр Windows» — «Дополнительные параметры» — «Правила для входящих подключений». Найди правило для httpd.exe и проверь галки.
8.5 Дополнительные настройки Apache и PHP
Настройка php.ini для разработки
Дефолтный php.ini в WAMP и XAMPP заточен под продакшн — ошибки скрыты, лимиты маленькие. Для локальной разработки нужно другое.
Найди путь к активному php.ini через phpinfo() — смотри строку «Loaded Configuration File». Открой этот файл в текстовом редакторе от имени администратора.
Включи отображение ошибок. Найди и измени эти строки:
display_errors = On
display_startup_errors = On
error_reporting = E_ALL
log_errors = On
Увеличь лимиты для работы с большими файлами и скриптами:
max_execution_time = 300
max_input_time = 300
memory_limit = 512M
post_max_size = 128M
upload_max_filesize = 128M
Для работы с базами данных убедись что включены нужные расширения. Найди строки и убери # в начале:
extension=mysqli
extension=pdo_mysql
extension=mbstring
extension=curl
extension=gd
extension=zip
После изменений в php.ini — обязательно перезапусти Apache. Изменения не применятся пока Apache работает со старой конфигурацией.
Настройка httpd.conf — основные параметры
httpd.conf — главный конфиг Apache. В XAMPP лежит по пути C:\xampp\apache\conf\httpd.conf. В WAMP — C:\wamp64\bin\apache\apache2.4.x\conf\httpd.conf.
Важные параметры которые часто нужно менять:
Корневая директория сервера:
DocumentRoot "C:/xampp/htdocs"
Если хочешь хранить проекты в другом месте — меняй здесь.
Разрешение .htaccess файлов (нужно для WordPress, Laravel и большинства фреймворков):
<Directory "C:/xampp/htdocs">
AllowOverride All
</Directory>
AllowOverride None отключает .htaccess полностью — тогда перенаправления и красивые URL не работают. AllowOverride All разрешает все директивы в .htaccess.
Включение модуля mod_rewrite (нужен для большинства PHP-фреймворков):
LoadModule rewrite_module modules/mod_rewrite.so
Убедись что строка не закомментирована. После изменений — перезапусти Apache.
Настройка MySQL через my.ini
Конфиг MySQL в XAMPP: C:\xampp\mysql\bin\my.ini. В WAMP: C:\wamp64\bin\mysql\mysql8.1.0\my.ini.
Параметры которые часто нужно трогать:
[mysqld]
max_allowed_packet = 64M
innodb_buffer_pool_size = 256M
max_connections = 100
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
max_allowed_packet влияет на максимальный размер запроса к базе. Если импортируешь большой дамп базы и получаешь ошибку «Packet too large» — увеличь это значение.
innodb_buffer_pool_size — сколько RAM выделить MySQL под кэш. На машинах с 8 ГБ RAM можно поставить 1G. На 4 ГБ — 256M-512M.
SSL на localhost — настройка HTTPS
Некоторые приложения требуют HTTPS даже на локалке. Особенно актуально если тестируешь Service Workers, cookies с флагом Secure или Progressive Web Apps.
В XAMPP SSL поддерживается из коробки. Есть готовый самоподписанный сертификат. Включи SSL в httpd.conf:
Include conf/extra/httpd-ssl.conf
И раскомментируй загрузку модуля SSL:
LoadModule ssl_module modules/mod_ssl.so
После этого https://localhost будет работать, но браузер покажет предупреждение о недоверенном сертификате — это нормально для самоподписанного сертификата.
Чтобы убрать предупреждение в Chrome — добавь сертификат в доверенные. Файл сертификата: C:\xampp\apache\conf\ssl.crt\server.crt. Открой его двойным кликом, нажми «Установить сертификат», выбери «Локальный компьютер» — «Доверенные корневые центры сертификации».
9. Резервное копирование
Это про данные. Без шуток.
Что бэкапить
- Папка с проектами: C:\wamp64\www\ или C:\xampp\htdocs\
- Базы данных MySQL
- Файлы конфигурации: php.ini, httpd.conf, my.ini
- Конфиги виртуальных хостов
Бэкап баз данных через mysqldump
Открой командную строку и выполни:
C:\xampp\mysql\bin\mysqldump.exe -u root -p mydb > C:\backup\mydb_backup.sql
Для WAMP путь к mysqldump будет другим:
C:\wamp64\bin\mysql\mysql8.1.0\bin\mysqldump.exe -u root -p mydb > C:\backup\mydb_backup.sql
Для автоматического бэкапа всех баз — добавь в планировщик задач Windows скрипт который запускает mysqldump для каждой базы.
Восстановление базы из бэкапа
C:\xampp\mysql\bin\mysql.exe -u root -p mydb < C:\backup\mydb_backup.sql
10. Профилактика: как не сломать снова
Несколько правил которые избавят от большинства проблем.
- Не устанавливай IIS параллельно с WAMP или XAMPP. Либо одно, либо другое.
- Фиксируй версии PHP в конфигах проектов. Если проект работает на PHP 8.1 - запиши это в README.
- Перед обновлением WAMP или XAMPP - сделай бэкап баз данных и конфигов.
- Не правь файлы в C:\wamp64\bin\ или C:\xampp\ напрямую без понимания что делаешь. Обновление перезапишет твои изменения.
- Логи Apache и MySQL читай регулярно. Там видно предупреждения до того как что-то сломается.
- Делай бэкап баз данных перед каждым серьёзным изменением схемы.
Мониторинг: смотри что происходит
Логи Apache в XAMPP: C:\xampp\apache\logs\error.log
Логи MySQL в XAMPP: C:\xampp\mysql\data\имя_компьютера.err
type C:\xampp\apache\logs\error.log | more
Для WAMP логи доступны прямо из меню иконки в трее - "Apache" - "Apache error log".
Обновление
Перед обновлением WAMP или XAMPP:
- Сделай бэкап всех баз данных через mysqldump
- Скопируй папку с проектами
- Запиши текущие версии PHP, Apache, MySQL
- Сохрани php.ini и httpd.conf
После обновления:
- Проверь что Apache и MySQL запустились
- Проверь версии через phpinfo()
- Проверь что все проекты работают
- Восстанови кастомные настройки из сохранённых конфигов
Если что-то сломалось после обновления - не паникуй. Установщик старой версии обычно доступен на сайте. Удали новую версию, установи старую, восстанови бэкап баз данных.
11. FAQ
Почему иконка WAMP не зелёная после установки?
Оранжевая иконка означает что запустился только один из сервисов - обычно MySQL, а Apache упал. Красная - не запустился никто.
Первым делом проверяй порт 80. Откры командную строку от администратора:
netstat -ano | findstr ":80 "
Если порт занят - останови чужой сервис. Потом проверь что установлены все версии Visual C++ Redistributable x64. Скачай их с сайта Microsoft и установи. После этого перезапусти WAMP.
Как сменить версию PHP в WAMP?
Кликни левой кнопкой по зелёной иконке WAMP в системном трее. В меню найди раздел "PHP" или "PHP version". Там список всех установленных версий - выбери нужную. WAMP автоматически перезапустит Apache с новой версией PHP.
Если нужной версии нет в списке - скачай Add-on с сайта wampserver.com. Там есть отдельные установщики для PHP 7.4, 8.0, 8.1, 8.2 и других версий.
Что лучше - WAMP или XAMPP?
Зависит от задачи. WAMP удобнее когда нужно часто переключаться между версиями PHP - это делается в два клика без редактирования конфигов. XAMPP проще при первой установке - не нужно отдельно устанавливать Visual C++, установщик всё включает. XAMPP также работает на Linux и macOS - важно если команда работает на разных ОС. Для новичка - XAMPP. Для работы с несколькими PHP-версиями - WAMP.
Как проверить что PHP работает правильно?
Создай файл phpinfo.php в папке проектов с содержимым и открой его по адресу http://localhost/phpinfo.php. Если видишь большую страницу с информацией о PHP - всё работает. Если браузер скачивает файл или показывает текст PHP-кода - PHP не подключён к Apache, нужно проверить конфигурацию.
Что делать если localhost показывает 403 Forbidden?
403 означает что Apache запустился, но нет прав на доступ к директории. Проверь что в папке www (WAMP) или htdocs (XAMPP) есть хотя бы один файл index.php или index.html. Также проверь httpd.conf - блок Directory для корневой папки должен содержать строку "Require all granted". Ещё одна причина - .htaccess файл в папке проекта с неправильными директивами.
MySQL запускается но phpMyAdmin не открывается?
Проверь что Apache тоже запущен - phpMyAdmin работает через Apache, не напрямую. Если Apache запущен - открой http://localhost/phpmyadmin (не https). Проверь что папка phpmyadmin существует в корневой директории проектов. В XAMPP это C:\xampp\phpMyAdmin\ - она должна быть доступна как C:\xampp\htdocs\phpmyadmin\ или через Alias в конфигурации Apache.
12. Итог
Бонус: установка WordPress на localhost за 10 минут
Раз уж всё работает - покажу как поднять WordPress локально. Это стандартная задача для всех кто разрабатывает или тестирует сайты на WordPress.
Шаг 1. Скачай свежую версию WordPress с официального сайта wordpress.org. Распакуй архив в папку проектов.
Для XAMPP распакуй в C:\xampp\htdocs\wordpress\. Для WAMP - в C:\wamp64\www\wordpress\.
Шаг 2. Создай базу данных для WordPress. Открой phpMyAdmin по адресу http://localhost/phpmyadmin. Нажми "Создать базу данных". Введи имя wordpress, выбери кодировку utf8mb4_unicode_ci. Нажми "Создать".
Шаг 3. Открой в браузере http://localhost/wordpress. WordPress запустит мастер установки. Укажи данные базы данных:
Database Name: wordpress
Username: root
Password: (пустое поле)
Database Host: localhost
Table Prefix: wp_
Шаг 4. WordPress проверит подключение и предложит создать wp-config.php автоматически или скопировать текст вручную. Если автоматически не получается - скопируй предложенный текст, создай файл wp-config.php в папке wordpress вручную и вставь туда.
Шаг 5. Нажми "Установить WordPress". Заполни название сайта, имя пользователя администратора, пароль и email. Нажми "Установить WordPress".
Всё. WordPress установлен. Панель управления доступна по адресу http://localhost/wordpress/wp-admin.
Если получаешь ошибку "Error establishing a database connection" - проверь что MySQL запущен и что данные в wp-config.php правильные.
13. Работа с несколькими проектами: организация рабочего пространства
Один проект в htdocs - это просто. Но когда проектов пять, десять, двадцать - нужна система. Иначе через месяц не вспомнишь что где лежит.
Структура папок
Стандартная практика - каждый проект в отдельной папке внутри htdocs или www:
C:\xampp\htdocs\
project1\
index.php
.htaccess
project2\
public\
index.php
src\
wordpress-site\
wp-config.php
wp-content\
Доступ: http://localhost/project1/, http://localhost/project2/. Просто и без лишних настроек.
Для серьёзной разработки удобнее виртуальные хосты - тогда project1.local и project2.local работают как отдельные сайты. Инструкцию по настройке смотри выше в разделе "Пример 3: Создание виртуального хоста.
Разные версии PHP для разных проектов в WAMP
WAMP поддерживает переключение PHP на уровне виртуального хоста. Это значит что project1 может работать на PHP 8.2, а project2 - на PHP 7.4. Без переустановки сервера.
Для этого в конфиге виртуального хоста добавь директиву PHPVersion:
<VirtualHost *:80>
DocumentRoot "C:/wamp64/www/project1"
ServerName project1.local
php_admin_value extension_dir "C:/wamp64/bin/php/php8.2.12/ext/"
php_admin_value extension "C:/wamp64/bin/php/php8.2.12/php8apache2_4.dll"
</VirtualHost>
В WAMP это делается через меню в трее: левый клик по иконке - Apache - httpd-vhosts.conf - выбрать виртуальный хост - PHP version.
Composer на localhost
Если работаешь с современным PHP-кодом - рано или поздно понадобится Composer. Скачай установщик с getcomposer.org.
При установке Composer укажи путь к PHP. Для XAMPP это:
C:\xampp\php\php.exe
Для WAMP путь зависит от версии PHP:
C:\wamp64\bin\php\php8.2.12\php.exe
После установки проверь что Composer работает:
composer --version
Если выдаёт версию - всё хорошо. Если "команда не найдена" - Composer не добавился в PATH. Добавь C:\ProgramData\ComposerSetup\bin\ в переменную PATH через "Свойства системы" - "Переменные среды".
14. Автозапуск и запуск как служба Windows
По умолчанию WAMP и XAMPP не запускаются автоматически при загрузке Windows. Каждый раз нужно запускать вручную. Это нормально если сервер нужен иногда. Если работаешь с ним постоянно - настрой автозапуск.
Автозапуск XAMPP
В XAMPP Control Panel есть галочки "Svc" напротив каждого сервиса. Поставь галку у Apache и MySQL - они установятся как службы Windows и будут запускаться автоматически.
Нажимать нужно с правами администратора. Если не получается - запусти XAMPP Control Panel от администратора.
Проверь что службы установлены:
sc query apache2.4
sc query mysql
Должны показать STATE: RUNNING.
Чтобы убрать автозапуск - убери галки Svc в XAMPP Control Panel.
Автозапуск WAMP
WAMP можно добавить в автозагрузку Windows через ярлык в папке автозагрузки:
C:\Users\ИмяПользователя\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
Скопируй туда ярлык wampmanager.exe. При следующей загрузке Windows WAMP запустится автоматически.
Или через реестр - но это уже лишнее для большинства случаев.
Запуск Apache и MySQL как отдельных служб Windows
Если нужен полный контроль без WAMP/XAMPP Control Panel - Apache и MySQL можно установить как системные службы напрямую.
Установка Apache как службы (из командной строки администратора):
C:\xampp\apache\bin\httpd.exe -k install -n "Apache2.4"
Запуск и остановка через командную строку:
net start Apache2.4
net stop Apache2.4
Установка MySQL как службы:
C:\xampp\mysql\bin\mysqld.exe --install MySQL --defaults-file="C:\xampp\mysql\bin\my.ini"
Запуск и остановка:
net start MySQL
net stop MySQL
После установки как служб они появятся в "Службы Windows" (services.msc) и будут запускаться автоматически согласно настройкам типа запуска.
15. Диагностика производительности: когда всё работает, но медленно
Иногда локальный сервер работает, но медленно. Страницы грузятся долго, запросы к базе тормозят. Это тоже лечится.
PHP OPcache - ускорение PHP без усилий
OPcache кэширует скомпилированный PHP-код в памяти. Страницы загружаются быстрее потому что PHP не компилирует каждый файл заново при каждом запросе.
Включи OPcache в php.ini:
[opcache]
zend_extension=opcache
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
Перезапусти Apache. Проверь через phpinfo() что OPcache включён - ищи раздел "opcache" или "Zend OPcache".
На локалке opcache.revalidate_freq=0 может быть удобнее - тогда OPcache каждый раз проверяет изменился ли файл. Это чуть медленнее чем production, но зато при изменении PHP-файла сразу видишь результат без сброса кэша.
Медленные запросы к MySQL - включи slow query log
Если сайт работает медленно из-за базы данных - включи лог медленных запросов в MySQL. Это покажет какие запросы тормозят.
В my.ini добавь:
[mysqld]
slow_query_log = 1
slow_query_log_file = C:/xampp/mysql/data/slow-queries.log
long_query_time = 1
long_query_time = 1 означает что в лог попадут все запросы которые выполняются дольше 1 секунды. Перезапусти MySQL. Теперь тормозящие запросы будут записываться в лог-файл.
Открой лог и посмотри что там:
type C:\xampp\mysql\data\slow-queries.log
Там будут запросы с временем выполнения. Эти запросы нужно оптимизировать - добавить индексы, переписать JOIN-ы, или просто убрать N+1 проблемы в коде.
Xdebug для отладки PHP
Xdebug - расширение PHP для отладки. Позволяет ставить точки останова в коде, смотреть значения переменных, трассировать выполнение. Незаменимо при серьёзной разработке.
Скачай Xdebug с официального сайта xdebug.org/wizard. Вставь туда вывод phpinfo() - сайт сам скажет какую версию Xdebug скачать под твой PHP.
Скопируй скачанный .dll файл в папку расширений PHP. Путь к папке расширений смотри в phpinfo() - строка extension_dir.
Добавь в php.ini:
[xdebug]
zend_extension=xdebug
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=127.0.0.1
xdebug.client_port=9003
Перезапусти Apache. Проверь через phpinfo() что Xdebug появился.
Для использования в VS Code установи расширение "PHP Debug". В PhpStorm Xdebug поддерживается из коробки. Настрой IDE на прослушивание порта 9003.
16. Типичные сценарии использования
Разработка WordPress тем и плагинов
Стандартная задача. Установи WordPress на localhost как описано выше. Для разработки тем - создай папку в C:\xampp\htdocs\wordpress\wp-content\themes\mytheme\.
Включи режим отладки WordPress. Открой wp-config.php и найди строку:
define( 'WP_DEBUG', false );
Замени на:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', true );
define( 'SCRIPT_DEBUG', true );
Теперь WordPress будет показывать PHP-ошибки и записывать их в wp-content/debug.log.
Тестирование PHP-приложений перед деплоем
Если деплоишь на Linux-сервер с PHP 8.1 - локально тоже ставь PHP 8.1. Несоответствие версий PHP между локалкой и продакшном - источник половины "у меня работало" историй.
Проверь что на локалке и продакшне совпадают:
- Версия PHP
- Включённые расширения PHP
- Версия MySQL
- Настройки php.ini которые влияют на поведение: short_open_tag, error_reporting, date.timezone
Посмотри включённые расширения на локалке:
<?php
print_r(get_loaded_extensions());
?>
Сравни с тем что установлено на сервере. Если есть расширение на сервере которого нет у тебя - включи его в php.ini.
Импорт большой базы данных
Типичная ситуация: надо поднять копию продакшн-базы на локалке. База весит 500 МБ или больше. phpMyAdmin не справляется - таймаут.
Используй командную строку напрямую:
C:\xampp\mysql\bin\mysql.exe -u root mydb < C:\backup\production_dump.sql
Это работает для любого размера файла. phpMyAdmin имеет ограничения на размер загружаемого файла - они в php.ini (upload_max_filesize и post_max_size). Через CLI таких ограничений нет.
Если база очень большая и импорт идёт долго - добавь флаги для ускорения:
C:\xampp\mysql\bin\mysql.exe -u root --max_allowed_packet=512M mydb < C:\backup\production_dump.sql
Прогресс можно отслеживать через размер файла - MySQL читает дамп последовательно.
17. Итог
Ты поднял локальный сервер. Apache отвечает на localhost, MySQL принимает подключения на 3306, PHP выполняет скрипты. phpMyAdmin открывается и даёт доступ к базам данных.
Теперь у тебя есть рабочее окружение для разработки PHP-приложений на Windows. Можешь создавать виртуальные хосты для разных проектов, переключаться между версиями PHP, тестировать SQL-запросы через phpMyAdmin. Всё локально, без удалённых серверов и лишних расходов.
Не заработало - разберёмся
Если после всех шагов что-то всё равно не работает — пиши в комментарии. Укажи: ОС и версию Windows, какой сервер ставил (WAMP или XAMPP) и какую версию, что конкретно не работает (иконка красная / 403 / PHP не выполняется / MySQL падает), и что показывает лог ошибок. Разберёмся.