PHP Bildergalerie - Grundstruktur
Autor
Flitze
Klicks 161065
Keywords:
PHP Bildergalerie Tutorial, PHP Bildergalerie erstellen, PHP MySQL Bildergalerie, PHP Thumbnails erstellen, PHP Bilder speichern, Tutorial PHP Bildergalerie, Grundstruktur, Basis, Bildergalerie
Klicks 161065
Rating für PHP Bildergalerie
7.6 von 10
Bewertungen118
Stand
08.10.2014
7.6 von 10
Bewertungen118
Keywords:
PHP Bildergalerie Tutorial, PHP Bildergalerie erstellen, PHP MySQL Bildergalerie, PHP Thumbnails erstellen, PHP Bilder speichern, Tutorial PHP Bildergalerie, Grundstruktur, Basis, Bildergalerie
Breadcrumb:
Workshops » PHP Bildergalerie » PHP Bildergalerie - Grundstruktur
1. Die Grundstruktur
[ADSENSE_LINE]Die Grundstruktur basiert auf den Datenbanktabellen, in denen die Alben und die Bildnamen (nicht die ganzen Bilder!) gespeichert werden, dem Ordnersystem, in denen die Bilder physisch abgelegt werden und letztendlich einer Konfigurationsdatei, in der z.B. die maximale Bildgröße, die Bildgröße und Qualität der Thumbnails und erlaubte Dateiendungen stehen.Datenbanktabellen
Als erstes werden die folgenden 2 Datenbanktabellen erstellt:Alben
Code:
Alben +--------------+--------------+------+---------+---------+----------------+ | NAME | TYP | NULL | KEY | DEFAULT | Extras | +--------------+--------------+------+---------+---------+----------------+ | ID | INT | | PRIMARY | | AUTO_INCREMENT | | Datum | DATE | | | | | | Name | VARCHAR(50) | | | | | | Beschreibung | VARCHAR(255) | | | | | +--------------+--------------+------+---------+---------+----------------+
PHP:
<?php
$sql = 'CREATE TABLE `Alben` ('
. ' `ID` INT AUTO_INCREMENT NOT NULL, '
. ' `Datum` DATE, '
. ' `Name` VARCHAR(50), '
. ' `Beschreibung` VARCHAR(255), '
. ' PRIMARY KEY (`ID`)'
. ' )';
mysql_query($sql) OR die ("<pre>\n".$sql."</pre>\n".mysql_error());
echo "Datenbanktabelle \"Alben\" erstellt..<br />";
?>
Fotos
Code:
Fotos +--------------+--------------+------+---------+---------+----------------+ | NAME | TYP | NULL | KEY | DEFAULT | Extras | +--------------+--------------+------+---------+---------+----------------+ | ID | INT | | PRIMARY | | AUTO_INCREMENT | | Alben_ID | INT | | | | | | Datum | DATETIME | | | | | | Name | VARCHAR(50) | | | | | | Beschreibung | VARCHAR(255) | | | | | +--------------+--------------+------+---------+---------+----------------+
PHP:
<?php
$sql = 'CREATE TABLE `Fotos` ('
. ' `ID` INT AUTO_INCREMENT NOT NULL, '
. ' `Alben_ID` INT NOT NULL, '
. ' `Datum` DATETIME, '
. ' `Name` VARCHAR(50), '
. ' `Beschreibung` VARCHAR(255), '
. ' PRIMARY KEY (`ID`)'
. ' )';
mysql_query($sql) OR die ("<pre>\n".$sql."</pre>\n".mysql_error());
echo "Datenbanktabelle \"Fotos\" erstellt..<br />";
?>
Ordnerstruktur
Grundsätzlich gibt es zwei Möglichkeiten, wie die Bilder angeordnet sein können. Die erste basiert darauf, für jedes neue Album einen eigenen Ordner mit dem Albennamen zu erstellen und in jedem dieser Ordner einen Thumbnail-Ordner zu erzeugen. Diese Methode hat den Vorteil, dass die Fotos auch ohne Datenbank eine logische Struktur haben. Der Nachteil liegt allerdings in der „Wartbarkeit“, denn das Verschieben und Löschen von Alben hat immer einen Eingriff aufs Dateisystem zur Folge. Aus diesem Grund bevorzuge ich die Methode, nur einen einzigen Ordner inklusive Thumbnail-Ordner anzulegen und die Zuordnung der Fotos allein der Datenbank zu überlassen. Somit werden die Dateien selbst nicht manipuliert, sondern es wird lediglich ihr betreffender Datenbankeintrag verändert und eine neue Zuordnung erstellt. Um den einen Ordner zu erstellen, könnt ihr folgenden Code benutzen:PHP:
<?php
mkdir ("fotos", 0777);
echo "Ordner \"fotos\" erstellt..<br />";
mkdir ("fotos/thumbnails", 0777);
echo "Ordner \"thumbnails\" in \"fotos\" erstellt..<br />";
?>
Ihr solltet aber darauf achten, dass ihr euren Skripten die Zugriffrechte (WWWRun) in dem Ordner gebt, in dem ihr den Code ausführt, sonst gibt’s eine Fehlermeldung. Alternativ könnt ihr die Ordner natürlich auch über ein FTP-Programm erstellen.
Konfigurationsdatei
Diese Datei nenne ich sinngemäß config.php und gebe ihr folgenden Inhalt:PHP:
<?php
error_reporting(E_ALL);
// Allgemeine Konstanten
// =========================================
// Angaben zur Dateigröße
define('BYTE', 1);
define('KB', 1024*BYTE);
define('MB', 1024*KB);
// Allgemeine Variablen
// =========================================
// Monatsnamen
$Monatsnamen = array(1 => 'Januar',
2 => 'Februar',
3 => 'März',
4 => 'April',
5 => 'Mai',
6 => 'Juni',
7 => 'Juli',
8 => 'August',
9 => 'September',
10 => 'Oktober',
11 => 'November',
12 => 'Dezember');
// Konstanten und Variablen für die Fotos
// =========================================
// Dateigröße
define('FILE_SIZE', 7*MB);
define('ZIP_SIZE', 50*MB);
// Bildgröße bzw. Ausmaß in Pixeln
define('PIC_WIDTH', 4096);
define('PIC_HEIGHT', 4096);
// Thumbnailhöhe in Pixeln
define('TN_HEIGHT', 100);
// Qualität
define('PIC_QUALI', 70);
define('TN_QUALI', 100);
// Foto-Ordner
define('PIC_FOLDER', 'fotos/');
define('TN_FOLDER', PIC_FOLDER.'thumbnails/');
define('ZIP_FOLDER', 'zip/');
// erlaubte Dateiendungen für Bilder
$_file_extensions = array('jpg', 'jpeg', 'jpe', 'gif', 'png');
// erlaubte MIME-Typen für Bilder
$_file_mime_types = array('image/pjpeg', 'image/jpeg', 'image/gif', 'image/png', 'image/x-png');
// erlaubte Dateiendungen für ZIP-Archive
$_zip_extensions = array('zip');
// erlaubte MIME-Typen ZIP-Archive
$_zip_mime_types = array('application/zip', 'application/x-zip-compressed');
?>
Die Einstellungen könnt ihr natürlich beliebig anpassen, die Verwendung der entsprechenden Variablen ist als Kommentar gekennzeichnet. Eine Liste der MIME-Typen findet ihr auf SELFHTML: Diverse technische Ergänzungen / MIME-Typen.
Um dem ganzen Projekt jetzt noch eine sinnvolle Form zu geben, die uns das Testen und Nachvollziehen der Skripte erleichtert, legen wir neben der config.php noch Dateien für spätere Funktionen (functions.php) und für eine MySQL-Datenbankverbindung (mysql.php) an. Diese Dateien werden alle in einer zentralen index.php, die im root-Verzeichnis des Projektes liegt, inkludiert. Dadurch muss nicht bei jedem Skript explizit eine neue Verbindung hergestellt werden und wir können auf alle Konstanten, vordefinierte Variablen und Funktion zugreifen.
Die functions.php bekommt ihren Inhalt erst nach und nach, weil wir die Funktionen erst im Laufe des Workshops entwickeln, während ich die mysql.php und die index.php jetzt kurz skizzieren werde.
mysql.php
PHP:
<?php
error_reporting(E_ALL);
define ('MYSQL_HOST', 'localhost');
define ('MYSQL_USER', 'root');
define ('MYSQL_PASS', 'asdf');
define ('MYSQL_DATA', 'galerie');
$connid = @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die("Error: ".mysql_error());
mysql_select_db(MYSQL_DATA) OR die("Error: ".mysql_error());
?>
index.php
PHP:
<?php
error_reporting(E_ALL);
include("config.php");
include("mysql.php");
include("functions.php");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<title>Meine Galerie</title>
</head>
<body>
<?php
$s = array();
$s['alben'] = "alben/index.php";
$s['foto_upload'] = "foto_upload/index.php";
$s['galerie'] = "galerie.php";
$s['overview'] = "overview.php";
$s['detail_screen'] = "detail_screen.php";
$s['delete'] = "delete.php";
$s['edit'] = "edit.php";
if(isset($_GET['s']) AND isset($s[$_GET['s']])){
include $s[$_GET['s']];
echo "<br />\n";
echo "» <a href=\"index.php\">Zurück zum Menu</a>\n";
}
else{
echo "<h1>Menu</h1>\n";
echo "<ul>\n";
echo " <li><a href=\"index.php?s=alben\">Alben administrieren</a></li>\n";
echo " <li><a href=\"index.php?s=foto_upload\">Fotos hochladen</a></li>\n";
echo " <li><a href=\"index.php?s=galerie\">Galerie anzeigen</a></li>\n";
echo "</ul>\n";
}
?>
</body>
</html>
Kurz zur Erklärung:
Die index.php enthält die HTML-Grundstruktur. Alle weiteren Skripte werden hier inkludiert. Dazu wird das Array $s angelegt, das als Keys $_GET-Parameter enthält und als Values die Position der Skripte im Dateisystem. Dadurch kann man z.B. mit index.php?s=alben die Alben-Administration inkludieren. Bei einem unbekannten Key wird ein Menu angezeigt, durch das man die verschiedenen Bereiche der Galerie erreichen kann. Ausführliche Informationen zu diesem Prinzip findet ihr unter http://tut.php-quake.net/frames.html
Soo.. nachdem unserer Grundstruktur steht, können wir mit der Alben-Administration weitermachen.
Zurück zur vorigen Seite:
PHP Bildergalerie Weiter zur nächsten Seite:
PHP Bildergalerie - Alben verwalten