<!doctype html><html lang="ru"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>FrankenPHP — мастерская PHP-сервера</title><link rel="stylesheet" href="bootstrap.min.css"><link rel="stylesheet" href="style.css"></head><body><main class="container py-4"><header><p class="eyebrow">FRANKENPHP · PHP И CADDY</p><h1>Один сервер.<br>Два жизненных цикла PHP.</h1><p class="lead">Разберите настоящие HTTP-запросы, сравните classic и worker, соберите Caddyfile для своего проекта.</p><p class="note">Здесь восемь записей реального локального FrankenPHP. Кнопки просматривают сохранённые ответы и создают конфигурацию; сервер сайта не запускает новый worker. Весь исполняемый проект для Windows и Linux доступен в ZIP.</p></header><section class="panel"><label for="lesson" class="form-label">Практический опыт</label><select id="lesson" class="form-select" disabled></select><p id="guide" class="mt-3"></p><p id="load-status" role="status">Загружаем запись…</p><button id="reload" class="btn btn-outline-dark">Повторить загрузку</button></section><section class="panel"><h2>1. Пройдите запросы по шагам</h2><p id="runtime" class="small"></p><div class="toolbar"><button id="prev" class="btn btn-outline-dark" disabled>← Предыдущий</button><button id="next" class="btn btn-primary" disabled>Следующий →</button><p id="step" role="status" class="mb-2"></p></div><div id="facts" class="facts mt-3"></div><p id="request" class="request-line"></p><p id="meaning"></p><details><summary>Полный ответ HTTP</summary><pre id="body"></pre></details><p class="small mt-3">Время включает локальный HTTP-запрос и служит описанием этой записи. Несколько запросов нельзя считать сравнительным нагрузочным тестом. Значения bootId и requestId здесь демонстрационные.</p></section><section class="panel"><h2>2. Соберите конфигурацию</h2><div class="row g-3"><div class="col-md-6"><label for="mode" class="form-label">Режим PHP</label><select id="mode" class="form-select"><option value="worker">Worker: Kernel остаётся в памяти</option><option value="classic">Classic: новый Kernel на запрос</option></select></div><div class="col-md-6"><label for="target" class="form-label">Размещение</label><select id="target" class="form-select"><option value="local">Локально: HTTP 127.0.0.1:8420</option><option value="domain">Linux/VPS: домен и HTTPS</option></select></div><div class="col-md-6"><label for="domain" class="form-label">Домен для VPS</label><input id="domain" class="form-control" value="app.example.com" disabled></div><div class="col-md-3"><label for="workers" class="form-label">Workers</label><input id="workers" class="form-control" type="number" min="1" max="16" value="2"></div><div class="col-md-3"><label for="max" class="form-label">Запросов до перезапуска</label><input id="max" class="form-control" type="number" min="1" max="100000" value="1000"></div></div><p id="config-status" class="mt-3" role="status"></p><p class="small">Настройки не меняют исторические ответы выше. Несколько workers имеют отдельные объекты Kernel. Общие данные нужно хранить вне памяти worker. Для HTTPS нужны ваш домен, DNS, доступные порты и постоянное хранилище сертификатов.</p><details><summary>Готовый Caddyfile</summary><pre id="code"></pre></details><div class="toolbar mt-3"><button id="save-config" class="btn btn-primary">Скачать Caddyfile</button><button id="save-record" class="btn btn-outline-dark" disabled>Скачать запись JSON</button><button id="reset" class="btn btn-outline-dark">Сбросить настройки</button><a href="../frankenphp-project.zip" class="btn btn-outline-dark">Весь проект ZIP</a></div></section><section class="panel"><h2>3. Посмотрите исходники worker</h2><p>В архиве — PHP-приложение, Caddyfile, Dockerfile, Compose, автоматические проверки и инструкция. В Windows можно использовать официальный native-архив FrankenPHP с PHP DLL; в Linux — официальный образ или бинарник.</p><p><a href="source/Kernel.php.txt">Kernel.php: маршруты и очистка состояния</a> · <a href="source/index.php.txt">index.php: цикл worker</a> · <a href="https://frankenphp.dev/docs/worker/">Документация worker mode</a></p></section><footer><p>Авторский код MIT · <a href="THIRD-PARTY-LICENSES.txt">Лицензии компонентов</a></p></footer></main><script type="module" src="app.js"></script></body></html>
