gallery-for-aav/README.md
2026-02-19 16:57:09 +03:00

4.1 KiB
Raw Blame History

Галерея фотографий (PHP)

Локальный проект галереи, который:

  • читает категории и фото из photos/ (туда можно загружать по FTP),
  • при каждом открытии страницы проверяет, появились ли новые/обновлённые фото,
  • создаёт и обновляет превью в thumbs/,
  • показывает категории и фото в веб-интерфейсе,
  • открывает большую фотографию в лайтбоксе.

Структура

photo-gallery/
├─ index.php              # основной скрипт: индексация + HTML
├─ style.css              # стили (material-like, строгий)
├─ app.js                      # лайтбокс
├─ deploy.php                  # webhook-триггер деплоя
├─ deploy-config.php.example   # пример конфига webhook
├─ photos/                     # исходные фото по категориям (папкам)
├─ thumbs/                     # автогенерируемые превью
└─ data/
   └─ last_indexed.txt         # timestamp последней индексации

Как работает индексация

  1. Скрипт читает data/last_indexed.txt.
  2. Сканирует photos/<категория>/.
  3. Для каждого изображения (jpg/jpeg/png/webp/gif):
    • если файл новее last_indexed,
    • или превью не существует,
    • или превью старее оригинала, тогда создаётся/обновляется превью (.jpg) в thumbs/<категория>/.
  4. Записывает новый timestamp в last_indexed.txt.

Индексация выполняется на каждом обращении к index.php.

Требования

  • PHP 8.2+ (8.3 тоже ок)
  • Расширение GD или Imagick
    • если есть Imagick — будет использоваться он,
    • иначе используется GD.

Локальный запуск

Из папки photo-gallery:

php -S 127.0.0.1:8080

Открыть в браузере:

  • http://127.0.0.1:8080

Загрузка фото

Через FTP кладите файлы в:

  • photos/Свадьба/001.jpg
  • photos/Портреты/img_10.png
  • и т.д.

Папка верхнего уровня = категория.

Деплой (Timeweb shared hosting)

В проекте есть скрипт:

  • scripts/deploy.sh

Он:

  1. делает git fetch,
  2. жёстко переключает код на origin/<branch>,
  3. сохраняет runtime-папки (photos, thumbs, data),
  4. создаёт data/last_indexed.txt при первом запуске.

Запуск на хостинге:

cd ~/www/photo-gallery
bash scripts/deploy.sh

По умолчанию ветка main. Для другой ветки:

BRANCH=master bash scripts/deploy.sh

Удалённый запуск деплоя по ссылке (webhook)

  1. На хостинге создай конфиг из примера:
cp deploy-config.php.example deploy-config.php
  1. Заполни в deploy-config.php минимум:
  • token (длинный секрет)
  • при желании allowed_ips
  • при желании basic_auth_user/basic_auth_pass
  1. Запуск деплоя:
https://<домен>/deploy.php?token=<твой_секрет>

Рекомендация: включить IP whitelist и Basic Auth.

Примечания

  • Превью генерируются в формате JPEG с качеством ~82.
  • При первом заходе на большую папку возможно небольшое ожидание (генерация превью).
  • Для production обычно лучше вынести индексацию в cron/очередь, но для текущей задачи это intentionally on-request.