| data | ||
| lib | ||
| migrations | ||
| photos | ||
| scripts | ||
| thumbs | ||
| .gitignore | ||
| .htaccess | ||
| admin.php | ||
| app.js | ||
| config.php.example | ||
| DEV_BRANCH_TEST.txt | ||
| favicon.svg | ||
| index.php | ||
| README.md | ||
| secrets.php.example | ||
| style.css | ||
Галерея фото (PHP + MySQL)
Актуальная версия проекта — это MySQL-контур с двумя основными точками входа:
index.php— публичная витрина (разделы, тематики, карточки фото, комментарии),admin.php?token=...— закрытая админка (управление разделами/тематиками/фото/пользователями/комментариями/настройками).
Что умеет проект
- Иерархия каталога: разделы + тематики (2 уровня).
- Для фото поддерживаются версии
beforeиafter. - Версия
afterна публичной части отдается с watermark (текст, яркость и угол настраиваются в админке). - Комментарии доступны только по персональной viewer-ссылке.
- Для карточек каталога используются превью из
thumbs/. - Превью создаются/обновляются автоматически при загрузке, замене и повороте изображения.
Инструкция для пользователей
Если у вас нет специальной ссылки
- Откройте главную страницу галереи и выберите раздел или тематику в левом меню.
- Для просмотра фотографии нажмите на карточку в каталоге.
- Переключение по фото: стрелки
←и→на клавиатуре (или кнопки на экране). - Навигация по разделам/тематикам:
Shift + ↑/↓илиCtrl + ↑/↓. - Комментарии в этом режиме недоступны: блок комментариев открыт только для пользователей с персональной ссылкой.
Если у вас есть специальная viewer-ссылка
- Откройте галерею только по персональной ссылке вида
/?viewer=.... - В режиме viewer доступны все обычные функции просмотра и дополнительно форма комментария.
- Напишите комментарий и нажмите «Отправить» (или
Shift + Enter). - Отправка происходит без перезагрузки страницы; после успешной отправки появится сообщение «Ваш комментарий отправлен.».
- Не передавайте свою viewer-ссылку другим: она дает право оставлять комментарии от вашего имени.
Структура
photo.andr33v.ru/
├─ index.php # публичная витрина
├─ admin.php # админка по токену
├─ style.css # базовые стили
├─ favicon.svg
├─ config.php.example # шаблон конфига БД и деплоя
├─ secrets.php.example # шаблон секретов админки
├─ lib/
│ ├─ db.php # PDO + загрузка config.php
│ ├─ db_gallery.php # доступ к данным галереи
│ ├─ thumbs.php # генерация/чтение/удаление превью
│ ├─ admin_http.php # JSON-ответы админки
│ ├─ admin_deploy.php # проверка обновлений и запуск деплоя
│ ├─ admin_get_actions.php # GET-экшены админки
│ ├─ admin_post_actions.php # POST-экшены админки
│ └─ admin_helpers.php # helper-функции админки
├─ migrations/
│ ├─ 001_init.sql
│ ├─ 002_site_settings.sql
│ ├─ 003_comment_users_plain_token.sql
│ └─ 004_topics.sql
├─ scripts/
│ ├─ migrate.php # запуск миграций
│ ├─ generate_thumbs.php # backfill превью
│ └─ deploy.sh # deploy на shared hosting
├─ photos/ # оригиналы (runtime)
├─ thumbs/ # превью (runtime)
└─ data/ # runtime (логи/служебные файлы)
Требования
- PHP 8.2+
- MySQL 8+ (или совместимая MariaDB)
- PHP-расширения:
pdo_mysql(обязательно),gdилиimagick(для watermark/превью).
Быстрый старт
- Создай
config.php:
cp config.php.example config.php
-
Заполни доступы к БД в
config.php. -
Создай
secrets.php:
cp secrets.php.example secrets.php
-
Заполни минимум
admin_tokenвsecrets.php. -
Прогон миграций:
php scripts/migrate.php
- Локальный запуск:
php -S 127.0.0.1:8080
- Открой:
http://127.0.0.1:8080— публичная часть,http://127.0.0.1:8080/admin.php?token=<SECRET>— админка (токен изsecrets.php).
Настройка админки
Админка использует секреты из secrets.php.
Создай файл:
cp secrets.php.example secrets.php
Минимально заполни:
admin_token— длинный случайный секрет.
Опционально можно ограничить доступ:
basic_auth_user/basic_auth_pass— HTTP Basic слой поверх админки,allowed_admin_ips— белый список IP (строгое совпадение строк).
В админке доступны разделы:
- Разделы,
- Тематики,
- Фото,
- Пользователи,
- Комментарии,
- Настройки (welcome + watermark параметры).
Превью и watermark
- Публичный каталог карточек грузит превью через
?action=thumb&file_id=.... - Превью создаются автоматически в
thumbs/:- при загрузке файлов,
- при замене файлов,
- после поворота.
- Для старых данных можно догенерировать превью:
php scripts/generate_thumbs.php
- Версия
afterв публичке отдается с watermark (?action=image&file_id=...).
Деплой
Деплой запускается из админки (вкладка Настройки):
- кнопка
Проверить обновленияделаетgit fetchи сравниваетHEADсorigin/<branch>, - если локальная ветка отстает и не расходится (
behind > 0,ahead = 0) — показывается кнопкаОбновить проект.
Скрипт scripts/deploy.sh:
- делает
git fetch --all --prune, - переключает код на
origin/<branch>черезgit reset --hard, - запускает миграции
php scripts/migrate.php, - сохраняет runtime-папки (
photos,thumbs,data).
Важно: деплой-скрипт перетирает рабочие изменения в репозитории на сервере.
Примечания
- Проект принудительно редиректит на HTTPS и non-www через
.htaccess. - Для production рекомендуется включить IP whitelist и/или Basic Auth в
secrets.php. - Если
config.phpотсутствует, приложение корректно падает с ошибкой подключения к БД.