CH Gallery

Allgemeine Beschreibung

Das Script ist eine PHP-basierte Galerie-Anwendung bzw. Fotoalbum zum Anzeigen, Hochladen und Verwalten von Bildern und Videos.
Es ist bewusst als One-File-Script konzipiert: keine Abhängigkeiten von Frameworks oder Datenbanken – lediglich PHP und eine Verzeichnisstruktur werden benötigt.

Features:

  • einfache Installation – PHP Script (eine Datei) einfach in ein Verzeichnis kopieren, Unterverzeichnis images anlegen, Bilder dort hinein kopieren – Fertig !
  • Bilder- und Video-Support (MP4, WebM, Ogg)
  • Admin-Login (zum Löschen/Umbenennen)
  • Automatische Thumbnail-Generierung & EXIF-Rotation
  • Video-Streaming mit Scrubbing
  • Optional: ffmpeg für Vorschaubilder
  • Caching und Performance-Optimierung (Lazy Loading)
  • Verschiedene Ansichten: Raster- oder Listenmodus
  • Lightbox mit Diashow, Zoom, Vor-/Zurückblättern
  • ZIP-Download von Bildern oder ganzen Ordnern
  • Sicherer Upload (mit CSRF-Schutz, auch vom Handy / Tablett)
  • Dateiname umbenennen (Admin)
  • Datei Löschen (Admin)
  • Datei Download
  • Teilen-Funktionen (WhatsApp, Telegram, Facebook, X/Twitter, QR, E-Mail)
  • Drucken Funktion
  • Datei Informationen anzeigen
  • Auswahl der Dateien möglich für download, verschieben, löschen
  • Suche nach Dateinamen
  • Breadcrumb-Navigation, Pagination
  • Mehrsprachige/erweiterbare Titel & Info-Anzeigen
  • Ordner anlegen, umbennen, löschen für Admins
  • Bulk Verarbeitung (markieren von Dateien zum download, verschieben, löschen)
  • Responsive Design

Aufbau & Funktionsweise

Session & Sicherheit

  • Session-Handling:
    Prüft, ob eine PHP-Session aktiv ist, startet ggf. eine neue.
  • CSRF-Schutz:
    Generiert für jede Session ein 32-Byte-Token (random_bytes) → wird für Uploads/Formulare benötigt.

Konfiguration (Klasse Config)

  • Enthält zentrale Parameter wie:
    • Titel der Galerie (title)
    • Wurzelverzeichnis für Bilder/Videos (root)
    • Erlaubte Dateiendungen (allowed_extensions)
    • Passwort für Admin-Login
    • Thumbnail-Größe & Qualität
    • Pagination-Einstellungen
      → Anpassbar direkt im Script.

Hauptfunktionen

  1. Anzeige von Medien:
    • Bilder und Videos im Grid oder in Liste.
    • Sortierung nach Datum/Name.
    • Lightbox für Großansicht mit Navigation.
  2. Uploads:
    • Drag & Drop oder per Button.
    • Unterstützt Bilder (JPEG, PNG, WebP, AVIF, HEIC/HEIF) und Videos.
    • CSRF-Token-Prüfung schützt vor Cross-Site-Angriffen.
    • Upload auch von Smartphones.
  3. Bild-/Videobearbeitung:
    • Automatische Thumbnails per GD.
    • Rotation anhand von EXIF-Metadaten.
    • Transparenz-Korrektur bei PNG/WebP.
    • Optional: Vorschaubilder für Videos mit ffmpeg.
  4. Downloads:
    • Einzelbilder als Datei.
    • ZIP-Download von ganzen Alben (rekursiv möglich).
  5. Navigation & UI:
    • Breadcrumbs für Unterordner.
    • Pagination für große Alben.
    • Grid-/Listenumschaltung.
    • Teilen-Buttons & QR-Code-Generierung.
  6. Admin-Funktionen:
    • Login mit Passwort.
    • Dateien umbenennen oder löschen.
    • Ordnerverwaltung.

Video-Funktion

  • Range-Requests für Streaming (Scrubbing).
  • Poster-Bilder generierbar über ffmpeg (optional).
  • Alternativ: Fallback-Poster via GD.

Eingaben & Ausgaben

Eingaben

  • Datei-Uploads: Bilder & Videos.
  • Parameter via GET/POST:
    • Navigation (Ordner, Pagination)
    • Admin-Login
    • Dateiaktionen (löschen, umbenennen)

Ausgaben

  • HTML-Seite mit Galerie
  • Thumbnails (automatisch generiert)
  • ZIP-Dateien bei Massen-Download
  • JSON (für Upload-/AJAX-Antworten)

Sicherheit

  • ✅ CSRF-Token bei Uploads
  • ✅ Admin-Login mit Passwort
  • ✅ Prüfung erlaubter Dateiendungen
  • ⚠️ Gefahr: Script schreibt Dateien direkt ins Upload-Verzeichnis → wichtig, nur sichere Endungen erlauben.
  • ⚠️ Admin-Passwort muss manuell stark gewählt werden (keine 2FA).

Abhängigkeiten

  • PHP 7.4+ (empfohlen 8.x)
  • GD-Bibliothek (für Bilder)
  • ffmpeg (optional, für Video-Poster)
  • ZIP-Extension (für Archiv-Downloads)

Mögliche Verbesserungen

  • Hashing von Admin-Passwort (falls im Klartext gespeichert)
  • Unterstützung für MySQL/SQLite zur optionalen Medienverwaltung
  • Mehrsprachigkeit per Config
  • Möglichkeit zur Benutzerverwaltung (nicht nur ein Admin)

Einsatzbereiche

  • Private Foto-/Video-Galerien (z. B. Hochzeitsfotos, Reisen)
  • Medien-Sharing in kleinen Teams oder Familien
  • Einfacher Ersatz für komplexere Systeme wie Nextcloud, wenn nur Galerie benötigt wird

Demo

https://blog.hennweb.de/demos/CH-Gallery/

Demobilder by Pixabay.com

Installationsanleitung: CH-Gallery (Bilder & Videos)

Hinweis: Diese Anleitung setzt voraus, dass du index.php als Galerie-Script verwendest und Zugriff auf deinen Webserver (FTP/SSH) hast.

Voraussetzungen

  • Webserver: Apache oder Nginx (mit PHP-Unterstützung)
  • PHP-Version: mindestens 7.4 (empfohlen: 8.0+)
  • PHP-Extensions:
    • gd (Bildbearbeitung & Thumbnails)
    • zip (ZIP-Downloads)
    • exif (automatische Bildrotation)
  • Optional: ffmpeg (für Video-Poster/Vorschaubilder)

Tipp: Prüfe deine PHP-Module mit php -m (SSH) oder erstelle eine phpinfo()-Seite.

Installation

  1. Datei hochladen
    Lade index.php auf deinen Webserver, z. B. nach /var/www/html/gallery/ (per FTP/SFTP/SCP).
  2. Verzeichnis für Medien anlegen mkdir -p /var/www/html/gallery/images chmod 755 /var/www/html/gallery/images chown www-data:www-data /var/www/html/gallery/images Erklärung: Der Webserver-Benutzer (z. B. www-data) braucht Schreibrechte für Uploads.
  3. Konfiguration anpassen
    Öffne index.php in einem Editor (z. B. Notepad++, VS Code oder nano) und passe in der Config-Sektion an:
    • title → Titel der Galerie (z. B. „Urlaub 2025“)root → Pfad zum Medienordner (Standard: ./images)password → Admin-Passwort (für Löschen/Umbenennen)allowed_extensions → erlaubte Dateiformate
    Sicherheits-Tipp: Nutze ein langes, einzigartiges Admin-Passwort und entferne Dateiendungen, die du nicht brauchst.
  4. Berechtigungen prüfen chmod 644 /var/www/html/gallery/index.php

Galerie aufrufen

Öffne im Browser:

http://deine-domain.de/gallery/index.php

Wenn alles geklappt hat, erscheint die Galerie-Oberfläche.

Nutzung

  • Upload: Bilder/Videos via Drag & Drop oder Upload-Button hochladen.
  • Navigation: Unterordner werden automatisch erkannt (Breadcrumbs).
  • Admin-Login: Mit Passwort anmelden, dann Dateien löschen/umbenennen/verschieben.

Optional: Video-Unterstützung mit ffmpeg

Für automatische Vorschaubilder (Poster) bei Videos:

Debian/Ubuntu

sudo apt update && sudo apt install ffmpeg

CentOS/RHEL

sudo yum install epel-release && sudo yum install ffmpeg

Das Script erkennt ffmpeg automatisch, sobald es installiert ist.

Optional: Infotexte anzeigen

wenn man im selben Verzeichnis wie die index.php eine footer.html anlegt, wird diese immer unter den Bildern angezeigt.

Genauso kann für jedes Unterverzeichns im „images“ Ordner eine info.html angelegt werden. Diese erscheint über den Bildern.

Sicherheit

  • Verwende ein starkes Admin-Passwort und teile es nicht weiter.
  • Erlaube nur die notwendigen Dateiendungen in allowed_extensions.
  • Falls die Galerie privat bleiben soll: per .htaccess oder Firewall schützen.
  • Halte PHP aktuell (Sicherheits-Updates).

✅ Fertig! Deine Galerie ist nun einsatzbereit.

Fragen oder Probleme? Füge diesen Beitrag einen Kommentar hinzu – häufige Stolperfallen sind fehlende PHP-Extensions oder Schreibrechte im images-Ordner.

Legende

  • 1.0.1 Zeigt auch Videos an
  • 1.1.2 ermöglicht Upload in einen sep. Ordner
  • 1.2.0 komplettes Script überarbeitet und AVIF Format mit eingebunden
  • 1.2.1 Fix: PNG/WebP-Transparenz korrekt (kein schwarzer Hintergrund) + HEIC/HEIF
  • 1.2.2 Anzeigegröße der Bilder angepasst
  • 1.2.3 Teilen Buttons hinzugefügt
  • 1.2.4 Einen Ordner zurück Button bei Unterordnern hinzugefügt
  • 1.2.5 Drucken von Bildern hinzugefügt
  • 1.2.6 Suche nach Bildernamen hinzugefügt
  • 1.2.7 diverse kleine Verbesserungen
  • 1.2.8 bei Uploads wird versucht den Dateinamen nicht zu verändern (BETA – STATUS)
  • 1.3.0 Jedes Bild kann markiert werden für Download / Löschen / Verschieben (BETA – STATUS)
  • 1.3.1 Ordner anlegen, ändern, löschen als Admin möglich (BETA – STATUS)
  • 1.3.2 Menüstruktur auf Hamburger Menü umgestellt (BETA – STATUS)
  • 1.3.3 Verschiedene Korrekturen (BETA – STATUS)
  • 1.3.4 footer.html und info.html eingebunden um eigenen Content anzuzeigen
  • 1.3.5 nach erfolgreichem Bilderupload eine Mail an den Admin senden

Download

📥

CH Gallery

📊 107 Downloads 🏷️ v1.2.7
Mit dem Download wird akzeptiert, dass die Software ist wie sie ist und keine Haftung in irgendwelcher Art auch immer übernommen wird!
OneFile PHP Script zum erstellen einer Fotogallerie
📥

PHP Check CH Gallery

📊 8 Downloads
Mit dem Download wird akzeptiert, dass die Software ist wie sie ist und keine Haftung in irgendwelcher Art auch immer übernommen wird!
Wenn es Probleme mit dem CH Gallery Script gibt, dann bitte diese Datei herunter laden und entpacken. Die Datei ins Verzeichnis von CH Gallery kopieren und über den Browser wie folgt ausführen: https://www.deineDomain.de/deinVerzeichnis von Gallery/php_check.php?run=1 Bitte das ?run=1 nicht vergessen.

FAQ

Das Problem

Wenn dein Script ein 20MP-Bild (z.B. 5000×4000 Pixel) verarbeitet, benötigt PHP enorm viel Arbeitsspeicher:

Speicherbedarf für ein 20MP-Bild:

  • Original-Bild im Speicher: ~76 MB (5000×4000×4 Bytes für RGBA)
  • Temporäre Kopien während Skalierung: 2-3× = ~150-250 MB
  • GD-Library Overhead: +30-50%
  • Gesamt: ca. 300-400 MB nur für ein Bild

Das Standard-PHP Memory Limit ist oft nur 128MB, weshalb:

  • ✅ HD-Bilder (~2MP) funktionieren (brauchen nur ~30-50 MB)
  • ❌ 20MP-Bilder scheitern (brauchen ~300-400 MB)
  • ✅ Download funktioniert (da keine Bildverarbeitung nötig ist)

Die Lösung

Du musst die PHP-Einstellungen auf deinem Server anpassen. Hier sind 3 Wege:

1. Via .htaccess (einfachste Methode bei Apache)

Erstelle/bearbeite eine .htaccess Datei im selben Verzeichnis wie deine index.php:

# PHP Memory Limit erhöhen
php_value memory_limit 512M

# Optional: Execution Time erhöhen (falls große Bilder lange brauchen)
php_value max_execution_time 300
php_value max_input_time 300

2. Via php.ini (wenn du Zugriff darauf hast)

Bearbeite deine php.ini und setze:

memory_limit = 512M
max_execution_time = 300
post_max_size = 200M
upload_max_filesize = 200M

Nach der Änderung: PHP-FPM/Webserver neu starten

3. Direkt im Script (funktioniert nicht immer)

Du könntest am Anfang deiner index.php (nach Zeile 45) hinzufügen:

ini_set('memory_limit', '512M');
ini_set('max_execution_time', '300');

⚠️ Achtung: Das funktioniert nur, wenn dein Hoster das erlaubt (viele Shared-Hosting-Anbieter blockieren ini_set).

Empfohlene Werte

Für deine Galerie mit 20MP-Bildern empfehle ich:

ParameterWertZweck
memory_limit512M oder 1GErmöglicht Verarbeitung großer Bilder
max_execution_time300 (5 Min)Verhindert Timeouts bei vielen Bildern
post_max_size200MPasst zu deiner Konfiguration (Zeile 85)
upload_max_filesize200MPasst zu deiner Konfiguration

Alternative: Imagick statt GD

Falls du noch Probleme hast oder bessere Performance willst, könntest du Imagick verwenden. Das ist effizienter bei großen Bildern:

  1. Imagick auf Server installieren (via SSH): # Debian/Ubuntu sudo apt-get install php-imagick sudo systemctl restart php-fpm
  2. Prüfen ob Imagick verfügbar ist: <?php if (class_exists('Imagick')) { echo "Imagick ist installiert!"; } else { echo "Imagick NICHT verfügbar"; }

Dein Script unterstützt Imagick bereits (Zeile 232-248)! Es wird automatisch verwendet, wenn verfügbar.

Test

Nach der Änderung:

  1. Lade ein 20MP-Bild hoch
  2. Prüfe ob Thumbnail und Vollbild funktionieren
  3. Falls nicht, prüfe die Error-Logs deines Servers