Galerie: Quelltext



<?php // charset=ISO-8859-1
/*
 * galerie.php - a simple gallery script
 * Copyright (C) 2002, 2003 Daniel Wacker <mail@wacker-welt.de>
 *
 * This program 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.
 *
 * This program 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 this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 * --
 * This script provides a simple gallery of all images that are located
 * in the script's directory and subdirectories.
 *
 * Requirements
 * - PHP >= 4.1.0
 * - GD Library ( >= 2.0.1 for good thumbnails)
 * - JPEG software
 * - PHP >= 4.3.0 or GD < 1.6 for GIF support
 * - libpng for PNG support
 *
 * Installation
 * Simply put this script in a folder of your web server and call it in a
 * web browser. Be sure that the script has permission to read the image
 * files and to create and write into the thumbnail folder.
 *
 * Attention:
 * This script tries to generate jpeg thumbnail files in a subfolder of the
 * gallery folder(s). The filenames look like "originalfilename.thumb.jpg".
 *
/* ------------------------------------------------------------------------- */

/* Select your language:
 * 'en' - English
 * 'de' - German
 */
$lang 'de';

/* Select your charset
 */
$charset 'ISO-8859-1';

/* How many images per page?
 */
$maxpics 28;

/* Create thumbnails in this subfolder
 */
$thumbdir 'thumbs';

/* Size of created thumbnails
 */
$thumbsize 150;

/* Wether to show file names (true or false)
 */
$filenames false;

/* Wether to show subdirectores (true or false)
 */
$subdirs true;

/* Wether to show a title (true or false)
 */
$title true;

/* Set the gallery root relative to the script's directory.
 *
 * If you include() this script, set the path relative to
 * the directory of the script, that does the include().
 */
$picdir '.';

/* Set this to true if you include() this script.
 */
$included false;

/* Set this to true, if you include() this script and want the images
 * to be shown inline.
 */
$inline true;

/* Set the thumbnail background color, if you include() this script.
 */
$bg 'FFFFFF';

/* ------------------------------------------------------------------------- */
switch ($lang) {
case 
'de':
 
$words = array(
  
'gallery' => 'Galerie',
  
'src' => 'Quelltext',
  
'error' => 'Fehler',
  
'php_error' => 'PHP Version 4.1 oder höher ist erforderlich.',
  
'gd_error' => 'Die GD-Bibliothek wird benötigt. Siehe http://www.boutell.com/gd/.',
  
'jpg_error' => 'Die JPEG-Bibliothek wird benötigt. Siehe ftp://ftp.uu.net/graphics/jpeg/.',
  
'mkdir_error' => 'Schreibrecht im Verzeichnis ist erforderlich.',
  
'opendir_error' => 'Das Verzeichnis "%1" kann nicht gelesen werden.'
 
);
 break;
case 
'en':
default:
 
$words = array(
  
'gallery' => 'gallery',
  
'src' => 'source code',
  
'error' => 'Error',
  
'php_error' => 'PHP >= 4.1 is required.',
  
'gd_error' => 'GD Library is required. See http://www.boutell.com/gd/.',
  
'jpg_error' => 'JPEG software is required. See ftp://ftp.uu.net/graphics/jpeg/.',
  
'mkdir_error' => 'Write permission is required in this folder.',
  
'opendir_error' => 'The directory "%1" can not be read.'
 
);
}
isset(
$_SERVER) || $error error('php', array());
function_exists('imagecreate') || $error error('gd', array());
function_exists('imagejpeg') || $error error('jpg', array());
@
ini_set('memory_limit', -1);
$jpg '\.jpg$|\.jpeg$'$gif '\.gif$'$png '\.png$';
$fontsize 2;
if (isset(
$_REQUEST['src'])) {
 
ob_start();
 
highlight_file(basename($_SERVER['PHP_SELF']));
 
$src ereg_replace('<font color="([^"]*)">''<span style="color: \1">'ob_get_contents());
 
$src ereg_replace('</font>''</span>'$src);
 
ob_end_clean();
}
function 
($w) {
 global 
$words;
 return 
h($words[$w]);
}
function 
($w) {
 global 
$charset;
 return 
htmlentities($wENT_COMPAT$charset);
}
function 
error ($w$a) {
 return 
str_replace(array('%1'), $aw($w .'_error'));
}
if (!
$included) {
 echo(
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style type="text/css">
body { font-family: sans-serif }
hr { border-style: none; height: 1px; background-color: silver; color: silver }
p { margin: 0px; padding: 0px }
#pagenumbers { text-align: center; margin: 0px 1em 0px 1em }
img { margin: 10px; border: none }
a { text-decoration: none }
#src'
);
 if (
$filenames) echo(', div a p'); echo(" { font-size: small }\n");
 if (
$filenames) {
  echo(
".clear { clear: left }\n");
  echo(
"a:hover p { text-decoration: underline }\n");
  echo(
'div { width: ' . ($thumbsize 20) . 'px; text-align: center; ');
  echo(
"float: left; margin: 1em }\n");
 }
 echo(
"</style>\n");
 echo(
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=$charset\" />\n");
 if (isset(
$src)) {
  echo(
'<title>' w('gallery') . ': ' w('src') . "</title>\n");
  echo(
"</head>\n<body>\n");
  echo(
'<h1>' w('gallery') . ': ' w('src') . "</h1>\n<hr />\n<pre>");
  echo(
"$src</pre>\n</body>\n</html>");
  exit;
 }
}
if (isset(
$_REQUEST['dir']) && $subdirs$dir $_REQUEST['dir']; else $dir '';
if (!empty(
$_SERVER['PATH_TRANSLATED'])) $d dirname($_SERVER['PATH_TRANSLATED']);
elseif (!empty(
$_SERVER['SCRIPT_FILENAME'])) $d dirname($_SERVER['SCRIPT_FILENAME']);
else 
$d getcwd();
$delim = (substr($d11) == ':') ? '\\' '/';
$root realpath($d $delim $picdir);
$realdir realpath($root $dir);
if (
substr($realdir0strlen($root)) != $root$realdir $root;
$dirname substr($realdirstrlen($root));
$dirnamehttp $picdir $dir;
if (
$delim == '\\'$dirnamehttp strtr($dirnamehttp'\\''/');
if (
substr($dirnamehttp02) == './'$dirnamehttp substr($dirnamehttp2);
if (empty(
$dirnamehttp)) $dirnamehttp '.';
if (
$subdirs) {
 if (empty(
$dirname)) $ti ': /.'; else $ti ": $dirname";
} else 
$ti '';
if (!
$included) {
 if (isset(
$error)) echo("<title>$error</title>");
 else echo(
'<title>' w('gallery') . h($ti) . "</title>\n");
 echo(
"</head>\n<body>\n");
}
if (!(
$d = @opendir($realdir))) $error error('opendir', array($realdir));
if (isset(
$error)) echo("<p style=\"color: red\">$error</p>\n");
else {
 if (
$title) echo('<h1>' w('gallery') . h($ti) . "</h1>\n<hr />\n");
 
$dirs $pics = array();
 
$query $jpg;
 if (
function_exists('imagecreatefromgif')) $query .= "|$gif";
 if (
function_exists('imagecreatefrompng')) $query .= "|$png";
 while (
false !== ($filename readdir($d))) {
  if (
$filename == $thumbdir
   
|| ($filename == '..' && $dirname == '')
   || (
$filename != '..' && substr($filename01) == '.')) continue;
  
$file $realdir $delim $filename;
  if (
is_dir($file)) $dirs[] = $filename;
  elseif (
eregi($query$file)) $pics[] = $filename;
 }
 
closedir($d);
 
sort($dirs);
 
sort($pics);
 
$urlsuffix '';
 foreach (
$_GET as $v => $r) {
  if (!
in_array($v, array('dir''pic''offset'))) $urlsuffix .= "&$v=" urlencode($r);
 }
 if (
$included && $inline && isset($_REQUEST['pic'])) {
  
$pic $_REQUEST['pic'];
  echo(
"<div id=\"picture\">\n");
  echo(
'<img src="' h("$dirnamehttp/{$pics[$pic]}") . '" alt="' h(basename($pics[$pic])) . '"');
  list(
$width$height$type$attr) = @getimagesize($pic);
  if (!empty(
$width)) echo(" style=\"width: {$width}px; height: {$height}px\"");
  echo(
" />\n");
  
$url = ($dirname  == '') ? '?' '?dir=' urlencode($dirname) . '&';
  echo(
"<hr />\n");
  if (
$pic 0)
  echo(
'<a href="' h($url) . 'pic=' . ($pic 1) . h($urlsuffix) . '">[&lt;]</a> ');
  if (
$pic >= $maxpics)
  
$u "{$url}offset=" . (floor($pic $maxpics) * $maxpics) . $urlsuffix;
  else {
   if (isset(
$_REQUEST['dir'])) {
    
$u substr($url0strlen($url) - 1) . $urlsuffix;
   } else {
    
$u ereg_replace('^([^?]+).*$''\1'$_SERVER['REQUEST_URI']);
    if (!empty(
$urlsuffix)) {
     if (
strstr($u'?') === false$u .= '?' substr($urlsuffix1);
     else 
$u .= $urlsuffix;
    }
   }
  }
  echo(
'<a href="' h($u) . '">[-]</a>');
  if (
$pic sizeof($pics))
  echo(
' <a href="' h($url) . 'pic=' . ($pic 1) . h($urlsuffix) . '">[&gt;]</a>');
  echo(
"\n</div>\n");
 } else {
  if (
sizeof($dirs) > && $subdirs) {
   echo(
"<ul id=\"directories\">\n");
   foreach (
$dirs as $filename) {
    
$target substr(realpath($realdir $delim $filename), strlen($root));
    if (
$delim == '\\'$target strtr($target'\\''/');
    if (
$target == '') {
     
$url ereg_replace('^([^?]+).*$''\1'$_SERVER['REQUEST_URI']);
     if (!empty(
$urlsuffix)) {
      if (
strstr($url'?') === false$url .= '?' substr($urlsuffix1);
      else 
$url .= $urlsuffix;
     }
    } else 
$url '?dir=' urlencode($target) . $urlsuffix;
    echo(
'<li><a href="' h($url) . '">' h($filename) . "</a></li>\n");
   }
   echo(
"</ul>\n<hr />\n");
  }
  if ((
$num sizeof($pics)) > 0) {
   if (isset(
$_REQUEST['offset'])) $offset $_REQUEST['offset'];
   else 
$offset 0;
   if (
$num $maxpics) {
    echo(
"<p id=\"pagenumbers\">\n");
    for (
$i 0$i $num$i += $maxpics) {
     
$e $i $maxpics 1;
     if (
$e $num 1$e $num 1;
     if (
$i != $e$b = ($i 1) . '-' . ($e 1);
     else 
$b $i 1;
     if (
$i == $offset) echo("<b>$b</b>");
     else {
      
$url = ($dirname  == '') ? '?' '?dir=' urlencode($dirname) . '&amp;';
      echo(
"<a href=\"{$url}offset=$i" h($urlsuffix) . "\">$b</a>");
     }
     if (
$e != $num 1) echo(' |');
     echo(
"\n");
    }
    echo(
"</p>\n<hr />\n");
   }
   echo(
"<p id=\"pictures\">\n");
   for (
$i $offset$i $offset $maxpics$i++) {
    if (
$i >= $num) break;
    
$filename $pics[$i];
    
$file $realdir $delim $filename;
    if (!
is_readable($file)) continue;
    if (!
is_dir($realdir $delim $thumbdir)) {
     
$u umask(0);
     if (!@
mkdir($realdir $delim $thumbdir0777)) {
      echo(
'<p style="color: red; text-align: center">' w('mkdir_error') . '</span>');
      break;
     }
     
umask($u);
    }
    
$thumb $realdir $delim $thumbdir $delim $filename '.thumb.jpg';
    if (!
is_file($thumb)) {
     if (
eregi($jpg$file))
     
$original = @imagecreatefromjpeg($file);
     elseif (
eregi($gif$file))
     
$original = @imagecreatefromgif($file);
     elseif (
eregi($png$file))
     
$original = @imagecreatefrompng($file);
     else continue;
     if (
$original) {
      if (
function_exists('getimagesize'))
      list(
$width$height$type$attr) = getimagesize($file);
      else continue;
      if (
$width $height && $width $thumbsize) {
       
$smallwidth $thumbsize;
       
$smallheight floor($height / ($width $smallwidth));
       
$ofx 0$ofy floor(($thumbsize $smallheight) / 2);
      } elseif (
$width $height && $height $thumbsize) {
       
$smallheight $thumbsize;
       
$smallwidth floor($width / ($height $smallheight));
       
$ofx floor(($thumbsize $smallwidth) / 2); $ofy 0;
      } else {
       
$smallheight $height;
       
$smallwidth $width;
       
$ofx floor(($thumbsize $smallwidth) / 2);
       
$ofy floor(($thumbsize $smallheight) / 2);
      }
     }
     if (
function_exists('imagecreatetruecolor'))
$small imagecreatetruecolor($thumbsize$thumbsize);
     else 
$small imagecreate($thumbsize$thumbsize);
     
sscanf($bg"%2x%2x%2x"$red$green$blue);
     
$b imagecolorallocate($small$red$green$blue);
     
imagefill($small00$b);
     if (
$original) {
      if (
function_exists('imagecopyresampled'))
imagecopyresampled($small$original$ofx$ofy00$smallwidth$smallheight$width$height);
      else
imagecopyresized($small$original$ofx$ofy00$smallwidth$smallheight$width$height);
     } else {
      
$black imagecolorallocate($small000);
      
$fw imagefontwidth($fontsize);
      
$fh imagefontheight($fontsize);
      
$htw = ($fw strlen($filename)) / 2;
      
$hts $thumbsize 2;
      
imagestring($small$fontsize$hts $htw$hts - ($fh 2), $filename$black);
imagerectangle($small$hts $htw $fw 1$hts $fh$hts $htw $fw 1$hts $fh$black);
     }
     
imagejpeg($small$thumb);
    }
    if (
$filenames) echo('<div>');
    if (
$included && $inline) {
    echo(
'<a href="?');
    if (isset(
$_REQUEST['dir'])) echo('dir=' urlencode($_REQUEST['dir']) . '&amp;');
    echo(
'pic=' $i h($urlsuffix));
    } else echo(
'<a href="' h("$dirnamehttp/$filename"));
    echo(
'"><img src="' h("$dirnamehttp/thumbs/$filename.thumb.jpg"));
    echo(
'" alt="' h($filename) . '" />');
    if (
$filenames) echo('<p>' h($filename) . '</p>');
    echo(
'</a>');
    if (
$filenames) echo("</div>\n"); else echo("\n");
   }
   echo(
"</p>\n");
   if (!
$included) {
    echo(
'<hr');
    if (
$filenames) echo(' class="clear"');
    echo(
" />\n");
   }
  }
 }
 if (!
$included) echo('<p id="src"><a href="?src=true">' w('src') . "</a></p>\n");
}
if (!
$included) echo("</body>\n</html>");
?>