gallery-for-aav/README.md

8.2 KiB
Raw Blame History

Галерея фото (PHP + MySQL)

Актуальная версия проекта — это MySQL-контур с двумя основными точками входа:

  • index.php — публичная витрина (разделы, тематики, карточки фото, комментарии),
  • admin.php?token=... — закрытая админка (управление разделами/тематиками/фото/пользователями/комментариями/настройками).

index-mysql.php и admin-mysql.php оставлены как алиасы для обратной совместимости.

Что умеет проект

  • Иерархия каталога: разделы + тематики (2 уровня).
  • Для фото поддерживаются версии before и after.
  • Версия after на публичной части отдается с watermark (текст, яркость и угол настраиваются в админке).
  • Комментарии доступны только по персональной viewer-ссылке.
  • Для карточек каталога используются превью из thumbs/.
  • Превью создаются/обновляются автоматически при загрузке, замене и повороте изображения.

Инструкция для пользователей

Если у вас нет специальной ссылки

  • Откройте главную страницу галереи и выберите раздел или тематику в левом меню.
  • Для просмотра фотографии нажмите на карточку в каталоге.
  • Переключение по фото: стрелки и на клавиатуре (или кнопки на экране).
  • Навигация по разделам/тематикам: Shift + ↑/↓ или Ctrl + ↑/↓.
  • Комментарии в этом режиме недоступны: блок комментариев открыт только для пользователей с персональной ссылкой.

Если у вас есть специальная viewer-ссылка

  • Откройте галерею только по персональной ссылке вида /?viewer=....
  • В режиме viewer доступны все обычные функции просмотра и дополнительно форма комментария.
  • Напишите комментарий и нажмите «Отправить» (или Shift + Enter).
  • Отправка происходит без перезагрузки страницы; после успешной отправки появится сообщение «Ваш комментарий отправлен.».
  • Не передавайте свою viewer-ссылку другим: она дает право оставлять комментарии от вашего имени.

Структура

photo.andr33v.ru/
├─ index.php                     # публичная витрина
├─ admin.php                     # админка по токену
├─ index-mysql.php               # alias -> index.php
├─ admin-mysql.php               # alias -> 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/превью).

Быстрый старт

  1. Создай config.php:
cp config.php.example config.php
  1. Заполни доступы к БД в config.php.

  2. Создай secrets.php:

cp secrets.php.example secrets.php
  1. Заполни минимум admin_token в secrets.php.

  2. Прогон миграций:

php scripts/migrate.php
  1. Локальный запуск:
php -S 127.0.0.1:8080
  1. Открой:
  • 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:

  1. делает git fetch --all --prune,
  2. переключает код на origin/<branch> через git reset --hard,
  3. запускает миграции php scripts/migrate.php,
  4. сохраняет runtime-папки (photos, thumbs, data).

Важно: деплой-скрипт перетирает рабочие изменения в репозитории на сервере.

Примечания

  • Проект принудительно редиректит на HTTPS и non-www через .htaccess.
  • Для production рекомендуется включить IP whitelist и/или Basic Auth в secrets.php.
  • Если config.php отсутствует, приложение корректно падает с ошибкой подключения к БД.