Location: PHPKode > scripts > PiwiP > piwip/gallery.php
<?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");

?>
Return current item: PiwiP