
Inhalt:
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.
- Titel der Galerie (
Hauptfunktionen
- Anzeige von Medien:
- Bilder und Videos im Grid oder in Liste.
- Sortierung nach Datum/Name.
- Lightbox für Großansicht mit Navigation.
- 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.
- Bild-/Videobearbeitung:
- Automatische Thumbnails per GD.
- Rotation anhand von EXIF-Metadaten.
- Transparenz-Korrektur bei PNG/WebP.
- Optional: Vorschaubilder für Videos mit
ffmpeg.
- Downloads:
- Einzelbilder als Datei.
- ZIP-Download von ganzen Alben (rekursiv möglich).
- Navigation & UI:
- Breadcrumbs für Unterordner.
- Pagination für große Alben.
- Grid-/Listenumschaltung.
- Teilen-Buttons & QR-Code-Generierung.
- 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
- Datei hochladen
Lade index.php auf deinen Webserver, z. B. nach/var/www/html/gallery/(per FTP/SFTP/SCP). - 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/imagesErklärung: Der Webserver-Benutzer (z. B.www-data) braucht Schreibrechte für Uploads. - Konfiguration anpassen
Öffne index.php in einem Editor (z. B. Notepad++, VS Code odernano) 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
- 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
.htaccessoder 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
PHP Check CH Gallery
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:
| Parameter | Wert | Zweck |
|---|---|---|
memory_limit | 512M oder 1G | Ermöglicht Verarbeitung großer Bilder |
max_execution_time | 300 (5 Min) | Verhindert Timeouts bei vielen Bildern |
post_max_size | 200M | Passt zu deiner Konfiguration (Zeile 85) |
upload_max_filesize | 200M | Passt 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:
- Imagick auf Server installieren (via SSH):
# Debian/Ubuntu sudo apt-get install php-imagick sudo systemctl restart php-fpm - 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:
- Lade ein 20MP-Bild hoch
- Prüfe ob Thumbnail und Vollbild funktionieren
- Falls nicht, prüfe die Error-Logs deines Servers
