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".
 *
 * DO NOT include() THIS SCRIPT!
/* ------------------------------------------------------------------------- */

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

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

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

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

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

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

/* ------------------------------------------------------------------------- */
switch ($lang) { // words:
case 'de':
 
$words = array(
  
'gallery' => 'Galerie',
  
'src' => 'Quelltext',
  
'php_error' => 'PHP Version 4.1 oder höher ist erforderlich.',
  
'gd_error' => 'Die GD-Bibliothek wird benötigt.',
  
'jpg_error' => 'Die JPEG-Bibliothek wird benötigt.'
 
);
 break;
case 
'en':
default:
 
$words = array(
  
'gallery' => 'gallery',
  
'src' => 'source code',
  
'php_error' => 'PHP >= 4.1 is required.',
  
'gd_error' => 'GD is required.',
  
'jpg_error' => 'JPEG software is required.'
 
);
}
isset(
$_SERVER) || error('php_error'); // check requirements:
function_exists('imagecolorallocate') || error('gd_error');
function_exists('imagejpeg') || error('jpg_error');
$hasgd2 function_exists('imagecopyresampled'); // check optional features:
$hasgif function_exists('imagecreatefromgif');
$haspng function_exists('imagecreatefrompng');
$jpg '\.jpg$|\.jpeg$'$gif '\.gif$'$png '\.png$'// file extensions
$fontsize 2// font size of filenames shown when thumbnailing fails
if (isset($_REQUEST['src'])) { // get source code:
 
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); // generate tidy xhtml
 
ob_end_clean();
}
function 
($w) { // output a word:
 
global $words;
 return 
h($words[$w]);
}
function 
($w) { // output an encoded string:
 
global $charset;
 return 
htmlentities($wENT_COMPAT$charset);
}
function 
error ($w) { // output an error:
 
global $charset;
 die(
'<!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>
 <meta http-equiv="Content-Type" content="text/html; charset=' 
$charset '" />
 <title>Error</title>
</head>
<body>
 <p style="color: red">' 
w($w) . '</p>
</body>
</html>'
);
}
?>
<!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<?php if ($filenames) echo(', div a p'); echo(" { font-size: small }\n");
if (
$filenames) { // only needed when filenames are shown:
 
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(
$_REQUEST['src'])) { // output source code:
 
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'])) $dir $_REQUEST['dir']; else $dir ''// get dirs:
$dir realpath(getcwd() . $dir);
if (
substr($dir0strlen(getcwd())) != getcwd()) $dir getcwd();
$dirname substr($dirstrlen(getcwd()));
$dirnamehttp substr($dirname1);
if (empty(
$dirnamehttp)) $dirnamehttp '.';
echo(
'<title>' w('gallery') . ': /' h($dirnamehttp) . "</title>\n"); // output title:
?>
</head>
<body>
<?php
echo('<h1>' w('gallery') . ': /' h($dirnamehttp) . "</h1>\n<hr />\n");
$d opendir($dir);
$dirs $pics = array();
$query "$jpg";
if (
$hasgif$query .= "|$gif";
if (
$haspng$query .= "|$png";
while (
false !== ($filename readdir($d))) { // read direcory:
 
if ($filename == $thumbdir
  
|| ($filename == '..' && $dirname == '')
  || (
$filename != '..' && substr($filename01) == '.')) continue;
 
$file "$dir/$filename";
 if (
is_dir($file)) $dirs[] = $filename;
 elseif (
eregi($query$file)) $pics[] = $filename;
}
if (
sizeof($dirs) > 0) { // output subdirecories:
 
echo("<ul>\n");
 
sort($dirs);
 foreach (
$dirs as $filename) {
  
$target substr(realpath(getcwd() . "/$dirname/$filename"), strlen(getcwd()));
  
$url = ($target == '')
   ? 
ereg_replace('^([^?]+).*$''\1'$_SERVER['REQUEST_URI'])
   : 
'?dir=' urlencode($target);
  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) { // ouput page numbers:
  
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\">$b</a>");
   }
   if (
$e != $num 1) echo(' |');
   echo(
"\n");
  }
  echo(
"</p>\n<hr />\n");
 }
 
sort($pics);
 echo(
"<p>\n"); // output thumbnails:
 
for ($i $offset$i $offset $maxpics$i++) {
  if (
$i >= $num) break;
  
$filename $pics[$i];
  
$file "$dir/$filename";
  if (!
is_dir("$dir/$thumbdir")) { // make thumbnail directory:
   
mkdir("$dir/$thumbdir");
  }
  
$thumb "$dir/$thumbdir/$filename.thumb.jpg";
  if (!
is_file($thumb) && is_readable($file)) { // create thumbnail:
   
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 (
$hasgd2$small imagecreatetruecolor($thumbsize$thumbsize);
   else 
$small imagecreate($thumbsize$thumbsize);
   
$weiss imagecolorallocate($small255255255);
   
imagefill($small00$weiss);
   if (
$original) {
    if (
$hasgd2imagecopyresampled($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); // output thumbnail file
  
}
  if (
$filenames) echo('<div>');
  echo(
'<a href="' h("$dirnamehttp/$filename") . '">');
  echo(
'<img src="' h("$dirnamehttp/thumbs/$filename.thumb.jpg") . '" alt="' h($filename) . '" />');
  if (
$filenames) echo('<p>' h($filename) . '</p>');
  echo(
'</a>');
  if (
$filenames) echo("</div>\n"); else echo("\n");
 }
 echo(
"</p>\n<hr");
 if (
$filenames) echo(' class="clear"');
 echo(
" />\n");
}
echo(
'<p id="src"><a href="?src=true">' w('src') . "</a></p>\n"); // source code link
?>
</body>
</html>