<?php
//Copyright 2004 Tai Gerstberger
// This file is part of PiwiP (PiwiP isn't written in PHP).
// PiwiP is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
// PiwiP is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with PiwiP; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//Thanks for great ideas and great help to TOBIAS THALMEIER (http://tt-home.de).
//ACHTUNG: DER BILDSERVER MUSS DIRECTORY LISTING AKTIVIERT HABEN (D.H. BEI AUFRUF
//VON EXAMPLE.COM/USER27/GALLERY/ MUSS VOM BILDSERVER EINE AUTOMATISCH ERZEUGTE
//HTML-DATEI, DIE DEN INHALT (VERZEICHNISSE UND (BILD-)DATEIEN) ZEIGT, AUSGEGEBEN
//WERDEN), SONST KOENNEN DIE VERZEICHNISSE NICHT AUSGELESEN WERDEN
//ACHTUNG: ES DUERFEN KEINE DATEIEN MIT NAMEN INDEX.HTML INNERHALB DER
//BILDSERVER(UNTER)VERZEICHNISSE SEIN (EXAMPLE.COM/USER27/INDEX.HTML IST MOEGLICH,
//EXAMPLE.COM/USER27/GALLERY/INDEX.HTML DARF NICHT SEIN,
//EXAMPLE.COM/USER27/GALLERY/HOLIDAYS/EASTERN/INDEX.HTML DARF AUCH NICHT SEIN) !!!
//Achtung: es kommt oefter der Begriff "directory listing" zu Gebrauch, in
//folgenden Zusammenhaengen ist die vom Bildserver ausgegebene html-Seite (die
//alle Verzeichnisnamen und/oder Bildnamen enthaelt) gemeint !!!
//vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//$initialurl MUSS ANGEPASST WERDEN, DIESE VARIABLE IST IN PIWIP.CONF ZU FINDEN!
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//in der Datei piwip.conf werden die Einstellungen vorgenommen
include ("./include/piwip.conf");
//Ausgabe einer Fehlermeldung mit Apache 2 sobald $align leer (nicht gesetzt)
//ist; es wird geprueft, ob $align gesetzt ist und wenn nicht, wird $align
//mit dem Wert "landscape" belegt
if (isset($align)) {
//nichts machen
} else {
$align = "landscape";
}
//Sicherheitshalber eine analoge if-Abfrage wie bei $align
if (isset($subdir)) {
//nichts machen
} else {
$subdir = "";
}
//folgender Abschnitt (bis ksort($replace_with_rfc1738);) legt die Variablen
//fest, damit Zeichen, die nach RFC 1738 kodiert sind, zu den entsprechenden
//Sonderzeichen (und andersherum) verwandelt werden können
//Gibt eine Zeichenkette zurück, in der die nach RFC 1738 kodierten Zeichen
//(Prozent-Zeichen (%), gefolgt von einer 2-stelligen hexadezimalen Zahl) in
//Sonderzeichen (Leerzeichen, Ae, ae, Oe, oe, Ue, ue und Scharfes S) ersetzt
//worden sind. Die Kodierung nach RFC 1738 dient zum Schutz von Zeichen, die
//als spezielle URL-Zeichen zu interpretieren sind.
$search_rfc1738[0] = "/%20/"; $search_rfc1738[1] = "/%C4/";
$search_rfc1738[2] = "/%E4/"; $search_rfc1738[3] = "/%D6/";
$search_rfc1738[4] = "/%F6/"; $search_rfc1738[5] = "/%DC/";
$search_rfc1738[6] = "/%FC/"; $search_rfc1738[7] = "/%DF/";
$replace_with_specialcharacter[0] = " "; $replace_with_specialcharacter[1] = "Ä";
$replace_with_specialcharacter[2] = "ä"; $replace_with_specialcharacter[3] = "Ö";
$replace_with_specialcharacter[4] = "ö"; $replace_with_specialcharacter[5] = "Ü";
$replace_with_specialcharacter[6] = "ü"; $replace_with_specialcharacter[7] = "ß";
ksort($search_rfc1738);
ksort($replace_with_specialcharacter);
//Gibt eine Zeichenkette zurück, in der die Sonderzeichen (Leerzeichen, Ae,
//ae, Oe, oe, Ue, ue und Scharfes S) durch ein Prozent-Zeichen (%), gefolgt
//von einer 2-stelligen hexadezimalen Zahl, ersetzt worden sind. Dies ist
//die Kodierung nach RFC 1738 zum Schutz von Zeichen, die als spezielle
//URL-Zeichen zu interpretieren sind.
$search_specialcharacter[0] = "/ /"; $search_specialcharacter[1] = "/Ä/";
$search_specialcharacter[2] = "/ä/"; $search_specialcharacter[3] = "/Ö/";
$search_specialcharacter[4] = "/ö/"; $search_specialcharacter[5] = "/Ü/";
$search_specialcharacter[6] = "/ü/"; $search_specialcharacter[7] = "/ß/";
$replace_with_rfc1738[0] = "%20"; $replace_with_rfc1738[1] = "%C4";
$replace_with_rfc1738[2] = "%E4"; $replace_with_rfc1738[3] = "%D6";
$replace_with_rfc1738[4] = "%F6"; $replace_with_rfc1738[5] = "%DC";
$replace_with_rfc1738[6] = "%FC"; $replace_with_rfc1738[7] = "%DF";
ksort($search_specialcharacter);
ksort($replace_with_rfc1738);
//sofern lokal ein Webserver (z.B. Apache) laeuft, kann zu Testzwecken eine
//lokale Kopie des ausgegebenen directory listing des Bildservers gespeichert
//werden (im Browser die Seite des Bildservers aufrufen (z.B.
//http://example.com/Gallery/Holidays/Eastern) und die ausgegebene Seite
//lokal als IndexBildserverBilderseite.html speichern [unter SuSE Linux 8.2
//Professional z.B. /srv/www/htdocs/test/IndexBildserverBilderseite.html]);
//zu Testzwecken kann folgende Zeile auskommentiert werden:
#$url = "http://localhost/test/IndexBildserverBilderseite.html";
$url = $initialurl; //$initalurl stammt aus piwip.conf
$url = $url.$subdir;
$url = preg_replace($search_specialcharacter, $replace_with_rfc1738, $url);
//zu Testzwecken auskommentieren, um $url zu pruefen
#echo "<br>\$url: ".$url."\n";
//herausloesen des hintersten Verzeichnisses
//(bei http://example.com/Gallery/Holidays/Eastern/ ist dies "Eastern"); wird
//nur fuer den Titel der HTML-Seite (genaugenommen fuer die Variable $htmltitle)
//benoetigt:
$pattern_url = "/(\/)([^\/]+[^\/])(\/$)/isU";
preg_match_all($pattern_url, $url, $hit_url);
//zu Testzwecken auskommentieren, um die Treffer zu sehen:
#echo "<br>\$hit_url[0][0]: ".$hit_url[0][0]."\n";
#echo "<br>\$hit_url[1][0]: ".$hit_url[1][0]."\n";
#echo "<br>\$hit_url[2][0]: ".$hit_url[2][0]."\n";
#echo "<br>\$hit_url[3][0]: ".$hit_url[3][0]."\n";
//$showngallerydirectory ist das hinterste Verzeichnis aus $url und wird nur
//fuer den HTML-Titel benoetigt
$showngallerydirectory = $hit_url[2][0];
$showngallerydirectory = preg_replace($search_rfc1738, $replace_with_specialcharacter, $showngallerydirectory);
//Einfuegen des HTML-Headers
include ($includepath."html_header.inc");
//Einfuegen der Logos, je nach Geschmack
#include ($includepath."logos.inc");
//Einfuegen eines Absatzes; macht Sinn wenn auch die Logos angezeigt werden
#include ($includepath."break.inc");
//Funktionen (OpenTable und CloseTable) verfuegbar machen
include ($includepath."table_functions.inc");
OpenTable();
//der Counter wird spaeter benoetigt, damit die Bilder korrekt nebeneinander
//dargestellt werden
$counter = 1;
//oeffnen einer Verbindung zum Bildserver
$fp = fopen ("$url","rb");
if ($fp)
{
while (!feof($fp))
{
//$subject ist der später zu durchsuchende Text (in diesem Fall das vom
//Bildserver ausgegebene directory listing)
$subject = fread($fp,200000);
//zu Testzwecken auskommentieren, um $subject anzusehen:
#echo "<br>\$subject: ".$subject."\n";
//hier gehts an die regulaeren Ausdruecke (Regular Expressions)
//nur zum Verstaendnis in folgenden zwei Zeilen ein Ausschnitt (eine
//Zeile) aus dem directory listing:
//<img SRC="/icons/image2.gif" ALT="[IMG]"> <a HREF=
//"im001382.jpg">im001382.jpg</a> 29-Jun-2004 23:02 37k
//der Bildname im001382.jpg wird spaeter aus dem Abschnitt
//jpg">im001382.jpg</a> genommen
//Festlegung des Suchmusters (pattern), um die Bildnamen (z.B.
//im001382.jpg) aus dem directory listing herauszuloesen
//(Suchmuster muss bei anders aussehendem directory listing
//angepasst werden):
$search_pic_before = "(jpg|png|gif|bmp).>";
$search_pic = ".*?\.(jpg|png|gif|bmp)";
$search_pic_after = "<\/a>";
$pattern_pic = "/($search_pic_before)($search_pic)($search_pic_after)/im";
//herausloesen der Bildnamen (z.B. im001382.jpg) aus dem directory
//listing:
preg_match_all($pattern_pic, $subject, $hit_pic);
for ($i=0; $i< count($hit_pic[0]); $i++)
{
//zu Testzwecken auskommentieren, damit man sieht ob die richtigen
//Bildnamen gefunden wurden:
#echo "<br>\$hit[3][\$i]: ".$hit[3][$i]."\n";
//Bildausrichtung
$pictureinfo = getimagesize($url.$hit_pic[3][$i]);
$width = $pictureinfo[0];
$height = $pictureinfo[1];
//zu Testzwecken auskommentieren, damit man sieht ob die richtige
//Bildausrichtung uebergeben wurde
#echo "<br>\$align: ".$align."\n";
if ($align == "portrait")
{
//Festlegung, welcher Wert spaeter bei der if-Abfrage groesser
//sein muss (bei Hochformat natuerlich die Hoehe)
$align1 = $height;
$align2 = $width;
}
else
{
//Festlegung, welcher Wert spaeter groesser sein muss (bei Quer-
//format die Breite)
$align1 = $width;
$align2 = $height;
}
//tatsaechliche Auswahl des Bildes, wenn es die "richtige" Bildaus-
//richtung hat;
//Achtung: quadratische Bilder werden sowohl als Hochformat als auch
//als Querformat angezeigt!
if ($align1 >= $align2)
{
$image_with_full_path = $url.$hit_pic[3][$i];
$image_with_full_path = preg_replace($search_specialcharacter, $replace_with_rfc1738, $image_with_full_path);
//Einfuegen des Bildziels (die Url des Bildes) in die HTML-Tabelle
echo "<img src='$image_with_full_path'>";
//der Nenner ist die Anzahl der Bilder, die nebeneinander dargestellt
//werden; sollen z.B. sieben Bilder nebeneinander dargestellt werden
//muss es ...$counter/7)) heissen
if (is_integer($counter/2))
{
echo "</td></tr><tr><td>";
}
else
{
echo "</td><td>";
}
$counter++;
}
}
}
fclose($fp);
}
CloseTable();
//Einfuegen des HTML-Fusses (meist </body></html>)
include ($includepath."html_foot.inc");
?>