# Symfony Uid: UUID и ULID без фреймворка

PHP >=8.2, Symfony Uid 7.4.21 (composer.lock), PDO_SQLITE с SQLite >=3.37 для STRICT-таблиц. Восемь задач и 21 вариант. Публичная мастерская — **просмотр записи настоящего выполнения PHP**, а не PHP в браузере. Исходники, библиотека, база SQLite и CLI выполняются локально. Bootstrap 5.3.9 подключён локально.

## Windows / PowerShell

Установите PHP CLI и Composer из официальных источников. Проверьте `php -v`, `php -m` и `composer --version`. В используемом php.ini нужны PDO и pdo_sqlite; `php --ini` показывает именно конфигурацию CLI, которая может отличаться от веб-сервера.

```powershell
composer install --no-interaction --no-plugins --no-scripts
php tests/run.php
php bin/run.php sqlite 0
php bin/run.php access 1
php bin/inspect.php 01890f3e-8a22-7c10-9123-123456789abc
php bin/inspect.php invalid
# Последняя команда: stderr, exit code 2; успешный разбор: 0.
php bin/capture.php
php bin/build-public.php
# Необязательный просмотр готовой public:
php -S 127.0.0.1:8531 -t public
# Остановить только этот процесс: Ctrl+C.
```

Случайные части UUIDv4/v7 и генерируемого ULID при каждом запуске меняются. Фиксированные даты нужны для повторяемой проверки времени, а не для имитации случайности. UUIDv5 и заранее заданные входные ID повторяются побайтно. Учебная таблица использует `sqlite::memory:`, не меняет рабочую базу и не оставляет файл.

## Linux / Bash

Пример пакетов Debian/Ubuntu; версия и имена зависят от выпуска дистрибутива. Требуются PHP >=8.2, CLI и PDO SQLite. Компонент Symfony 7.4 выбран для PHP 8.2+, без зависимости от полного фреймворка.

```bash
sudo apt update
sudo apt install php-cli php-sqlite3 unzip
php -v
php -m
composer install --no-interaction --no-plugins --no-scripts
php tests/run.php
php bin/run.php uuid7 1
php bin/run.php sqlite 2
php bin/capture.php recording-linux.json
php bin/build-public.php
```

Composer запускайте от обычного пользователя. Не копируйте vendor из случайного окружения: восстановите зафиксированные зависимости через install. Для проверки контракта используйте реальные тесты; Windows и Linux не обязаны сгенерировать одинаковые случайные ID.

## Практика и файлы

- `src/Lab.php`: проверка формата, описание представлений, dispatch фиксированных случаев.
- `src/Repository.php`: настоящая SQLite/PDO, PARAM_LOB, подготовленные запросы и отдельная проверка владельца.
- `scenarios/`: восемь выполняемых PHP-примеров; индексы вариантов начинаются с 0.
- `bin/inspect.php`: разбор **вашего** текстового UUID или ULID в настоящем PHP, exit 0/2.
- `bin/run.php`: запуск одного опыта в CLI, exit 0/2.
- `bin/capture.php`: формирование записи и SHA-256 исходников.
- `public/`: только статическая мастерская, записи Windows/Linux, исходники и инструкции.

На VPS публикуйте только public. Сам просмотр не требует PHP или vendor на публичном хосте. Подробнее — docs/LINUX-VPS.md. Кнопка последнего опыта показывает записанный ответ PHP-функции, не сетевой HTTP-запрос. Функция предполагает уже проверенную серверную аутентификацию; механизм входа не входит в лабораторию.

## Границы

UUID не является паролем, подписью или разрешением. UUIDv7 и ULID содержат время. UUIDv5 вычисляется из известного namespace и точных байтов имени, поэтому предсказуем и не подходит для сокрытия данных. Генерация ID не отменяет UNIQUE, транзакции, проверку владельца и идемпотентность операций. Сортировка по времени генерации не устанавливает порядок доставки событий из разных процессов.

Ссылки на собственный PHP-мануал:
- SQL/PDO: https://ae-nekrasov.ru/development/php-polnyj-manual-funkcii-oop-primery/?phpchapter=database-pdo#database-pdo-learn-purpose
- SQLite/PDO и локальное приложение: https://ae-nekrasov.ru/development/php-polnyj-manual-funkcii-oop-primery/?phpchapter=pdo-sqlite-local-application#phpman-chapter-title

Официальные источники: https://symfony.com/doc/7.4/components/uid.html ; https://www.rfc-editor.org/rfc/rfc9562.html ; https://github.com/ulid/spec ; https://www.php.net/manual/en/ref.pdo-sqlite.php . Авторский код MIT; лицензии зависимостей находятся в public/THIRD-PARTY-LICENSES.txt.
