<?
//function used to split user inputs after 75 characters with a blank
function mywordwrap($str, $max = 75, $break = ' ') {
// create array by deviding at each occurrence of "<a"
$arr = explode('<a', $str);
// break up long words in $arr[0] since
// it will never contain a hyberlink
$arr[0] = preg_replace('/([^\s]{'.$max.'})/i',"$1$break",$arr[0]);
// run loop to devide remaining elements
for($i = 1; $i < count($arr); $i++) {
// devide each element in $arr at each occurrence of "</a>"
$arr2 = explode('</a>', $arr[$i]);
// break up long words in $arr2 that does not
// contain hyberlinks
$arr2[1] = preg_replace('/([^\s]{'.$max.'})/i',"$1$break",$arr2[1]);
// rejoin $arr2 and assign as element in $arr
$arr[$i] = join('</a>', $arr2);
}
// rejoin $arr to string and return it
return join('<a', $arr);
}
//ermittelt die Grösse eines Verzeichnisses inklusive aller Unterverzeichnisse auf dem Server
//gathers the used space of a directory including all sub-directories
function fetchDirectorySize($dir,$cvs=TRUE) {
$size=0;
flush();
if (is_array($dir) ) {
foreach ($dir AS $directory ) $size+=fetchDirectorySize($directory);
}
else if ( $directory=opendir($dir) ){
$items=array();
while ( $file=readdir($directory) ) {
if ( $file!="." && $file!=".." && ($cvs || $file!="CVS" ) ) $items[]=$file;
}
closedir($directory);
foreach ( $items AS $item ) {
if ( is_dir($transfer=$dir.(substr($dir, -1)!="/" ? "/" : "" ).$item) ) $size+=fetchDirectorySize($transfer);
else $size+=filesize($transfer);
}
}
return $size;
}
//setzt die Rechte von vom Dateisystem erstellten Dateien neu, sodass diese vom Admin gelöscht werden können
//changes the rights of the files written by the file system to allow the user to delete them via ftp
function setzeRechte($obj) {
if (is_dir($obj)) {
if ($fd = opendir($obj)) {
while (($child = readdir($fd)) != false) {
if (!strcmp($child, ".")) {
continue;
}
if (!strcmp($child, "..")) {
continue;
}
$fullpath = "$obj/$child";
setzeRechte($fullpath);
}
@chmod($obj, 0777);
}
} else if (is_file($obj)) {
@chmod($obj, 0666);
}
}
// Verändert die Bildgröße, setzt Wasserzeichen und benennt die Bilder um, legt Sicherungskopie an
// changes the image size, creates a watermark and renames the pictures, creates backup
function ChangeImage($imagefile) {
@include('config.inc.php');
list($o_width,$o_height)=getimagesize($imagefile);
$image=ImageCreateFromJPEG($imagefile);
if ($logoverwenden) {
list($l_width,$l_height)=getimagesize($logo);
$verhaeltnis=($l_width/$l_height);
$logohnew=ceil($logownew/$verhaeltnis);
$logoecke=ImageCreateFromPNG($logo);
}
//Weite größer als Höhe also Bild im Querformat
if ($o_width>=$o_height) {
//Bildweite ist größer als die gewünschte Bildweite also skalieren wir runter
if ($o_width > $bildweite) {
if ($bilderskalieren) {
if ($logoverwenden) {
$newImage=ImageCreateTrueColor($bildweite,$bildhoehe);
ImageCopyResized($newImage,$image,0,0,0,0,$bildweite,$bildhoehe,$o_width,$o_height);
ImageCopyResized($newImage,$logoecke,$bildweite-10-$logownew,$bildhoehe-10-$logohnew,0,0,$logownew,$logohnew,$l_width,$l_height);
}
else {
$newImage=ImageCreateTrueColor($bildweite,$bildhoehe);
ImageCopyResized($newImage,$image,0,0,0,0,$bildweite,$bildhoehe,$o_width,$o_height);
}
}
else {
if ($logoverwenden) {
ImageCopyResized($image,$logoecke,$o_width-10-$logownew,$o_height-10-$logohnew,0,0,$logownew,$logohnew,$l_width,$l_height);
}
}
}
//Bildweite ist nicht größer als die gewünschte Bildweite also skalieren wir nicht, weil wir hochskalieren müssen das ist unschön
else {
//skaliere bild neu //kopiere logo ins bild
if ($bilderskalieren && $logoverwenden) {
$newImage=ImageCreateTrueColor($o_width,$o_height);
ImageCopyResized($newImage,$image,0,0,0,0,$o_width,$o_height,$o_width,$o_height);
ImageCopyResized($newImage,$logoecke,$bildweite-10-$logownew,$bildhoehe-10-$logohnew,0,0,$logownew,$logohnew,$l_width,$l_height);
}
if ($bilderskalieren && !$logoverwenden) {
$newImage=ImageCreateTrueColor($o_width,$o_height);
ImageCopyResized($newImage,$image,0,0,0,0,$o_width,$o_height,$o_width,$o_height);
}
if (!$bilderskalieren && $logoverwenden) {
ImageCopyResized($image,$logoecke,$o_width-10-$logownew,$o_height-10-$logohnew,0,0,$logownew,$logohnew,$l_width,$l_height);
}
}
}
//Weite nicht größer als Höhe also Bild im Hochformat
else {
//original Bildweite ist größer als die gewünschte Bildweite also skalieren wir runter
if ($o_width>$bildweite) {
//skaliere Bild neu wenn gewünscht
//entweder mit logo
if ($bilderskalieren && $logoverwenden) {
$newImage=ImageCreateTrueColor($bildhoehe,$bildweite);
ImageCopyResized($newImage,$image,0,0,0,0,$bildhoehe,$bildweite,$o_width,$o_height);
ImageCopyResized($newImage,$logoecke,$bildhoehe-10-$logownew,$bildweite-10-$logohnew,0,0,$logownew,$logohnew,$l_width,$l_height);
}
//oder ohne logo
if ($bilderskalieren && !$logoverwenden) {
$newImage=ImageCreateTrueColor($bildhoehe,$bildweite);
ImageCopyResized($newImage,$image,0,0,0,0,$bildhoehe,$bildweite,$o_width,$o_height);
}
//kopiere logo ins bild wenn skalieren nicht gewünscht
if (!$bilderskalieren && $logoverwenden) {
ImageCopyResized($image,$logoecke,$o_height-10-$logownew,$o_width-10-$logohnew,0,0,$logownew,$logohnew,$l_width,$l_height);
}
}
//Bildweite ist nicht größer als die gewünschte Bildweite also skalieren wir nicht, weil wir hochskalieren müssen das ist unschön
else {
//bilderskalieren wird ignoriert
if ($bilderskalieren && $logoverwenden) {
$newImage=ImageCreateTrueColor($o_width,$o_height);
ImageCopyResized($newImage,$image,0,0,0,0,$o_width,$o_height,$o_width,$o_height);
ImageCopyResized($newImage,$logoecke,$o_width-10-$logownew,$o_height-10-$logohnew,0,0,$logownew,$logohnew,$l_width,$l_height);
}
if ($bilderskalieren && !$logoverwenden) {
$newImage=ImageCreateTrueColor($o_width,$o_height);
ImageCopyResized($newImage,$image,0,0,0,0,$o_width,$o_height,$o_width,$o_height);
}
//kopiere logo ins bild
if (!$bilderskalieren && $logoverwenden) {
ImageCopyResized($image,$logoecke,$o_width-10-$logownew,$o_height-10-$logohnew,0,0,$logownew,$logohnew,$l_width,$l_height);
}
}
}
if (($bilderskalieren) && (strchr($imagefile,".jpg"))) @ImageJPEG($newImage,str_replace('.jpg','.resized.jpg',$imagefile),100);
if (($bilderskalieren) && (strchr($imagefile,".JPG"))) @ImageJPEG($newImage,str_replace('.JPG','.resized.jpg',$imagefile),100);
if ((!$bilderskalieren) && (strchr($imagefile,".jpg"))) @ImageJPEG($image,str_replace('.jpg','.resized.jpg',$imagefile),100);
if ((!$bilderskalieren) && (strchr($imagefile,".JPG"))) @ImageJPEG($image,str_replace('.JPG','.resized.jpg',$imagefile),100);
$sicherungsordner=substr($imagefile,0,strrpos($imagefile,'/')+1).'sicherung';
if (!$delete && !@opendir($sicherungsordner)) @mkdir($sicherungsordner, 0777);
if (!$delete) @copy($imagefile,$sicherungsordner.substr($imagefile,strrpos($imagefile,'/')));
@unlink($imagefile);
imagedestroy($image);
if ($bilderskalieren) imagedestroy($newImage);
if ($logoverwenden) imagedestroy($logoecke);
}
//Liefert einen Array mit allen Thumbnailbildern aus dem übergebenen Verzeichnis.
//Wenn zu einem Bild kein Thumbnail existiert,wird eins erzeugt.
function getJPGThumbnails($url) {
$verz=opendir($url);
$flag=false;
while ($file = readdir ($verz)) {
if (stristr($file,'.jpg') && !strstr($file,'resized') && !stristr($file,"_tn.jpg")) {
ChangeImage($url.'/'.$file);
$flag=true;
}
}
closedir($verz);
$pfad=pathinfo($url);
if ($flag) setzeRechte($pfad["dirname"]);
$verz=opendir($url);
while ($file = readdir ($verz)) {
if (((strchr($file,".jpg") && !strchr($file,"_tn.jpg")))) {
if (file_exists($url.'/'.str_replace('.jpg','_tn.jpg',$file))) {
$JPGArray[]=str_replace('.jpg','_tn.jpg',$file);
}
else {
createThumbnail($url.'/'.$file);
$JPGArray[]=str_replace('.jpg','_tn.jpg',$file);
}
}
}
closedir($verz);
natsort($JPGArray);
array_unshift($JPGArray,$url);
return $JPGArray;
}
//Prüft ob mit der User IP in den letzten 24 Stunden schon mal auf die Datei geklickt wurde.
function checkIPforFileClick($file) {
$DateinameIP = $file;
$Zeitsperre = 86400; // Sekunden
$Gefunden = FALSE;
if (file_exists($file)) {
$IPListe=file($DateinameIP);
if (isset($IPListe))
foreach ($IPListe as $Zeile)
{
$GesplitteteZeile = explode("|", $Zeile);
if(($GesplitteteZeile[0]+$Zeitsperre)>time())
{
$NeueIPListe[]= trim($Zeile)."\n";
}
}
if (isset($NeueIPListe))
foreach ($NeueIPListe as $Zeile)
{
$GesplitteteZeile = explode("|", $Zeile);
if(trim($GesplitteteZeile[1])==getenv("REMOTE_ADDR"))
{
$Gefunden = TRUE;
}
}
$FilePointerIP = fopen($DateinameIP,"w");
if (isset($NeueIPListe))
foreach ($NeueIPListe as $Zeile)
{
fwrite($FilePointerIP,trim($Zeile)."\n");
}
fclose($FilePointerIP);
}
return ($Gefunden);
}
//Trägt die User IP für diese Log-Datei als gesperrt an.
function saveIPforFileClick($file) {
$data=time()."|".getenv("REMOTE_ADDR")."\n";
$FilePointerIP = fopen($file,"a");
fwrite($FilePointerIP,$data);
fclose($FilePointerIP);
}
//Liefert den Dateinamen des großen Bildes zu einem Thumbnail
function getBigPicture($url) {
if (strchr($url,".jpg")) return (str_replace("_tn.jpg",".jpg",$url));
return 0;
}
//Liefert die Anzahl der nicht Thumbnail JPG-Dateien in einem Verzeichnis
function getJPGAnzahl($url){
$verz=opendir($url);
$JPGArray[]=$url;
while ($file = readdir ($verz)) {
if(!stristr($file,"_tn.jpg") && stristr($file,".jpg")) $JPGArray[]=$file;
}
closedir($verz);
return sizeof($JPGArray)-1;
}
//Macht aus dem übergebenen Image-File ein Thumbnail.
function createThumbnail($imagefile) {
@include('config.inc.php');
list($o_width,$o_height)=getimagesize($imagefile);
$verhaeltnis=($o_width/$o_height);
$verz=substr($imagefile,0,strrpos($imagefile,"/"));
if (decoct(fileperms($verz))!="40777" && decoct(fileperms($verz))!="100777") die("Kann keine Thumbnails erzeugen, Verzeichnisrechte manuell auf 777 ändern");
//Größe der Thumbnails
if ($o_width>$o_height) {
$n_width=$tnwidth;
$n_height=ceil($tnwidth/$verhaeltnis);
}
else {
$n_width=ceil($tnwidth*$verhaeltnis);
$n_height=$tnwidth;
}
$im=ImageCreateFromJPEG($imagefile);
$tn=ImageCreateTrueColor($n_width,$n_height);
ImageCopyResized($tn,$im,0,0,0,0,$n_width,$n_height,$o_width,$o_height);
if (strchr($imagefile,".jpg")) @ImageJPEG($tn,str_replace('.jpg','_tn.jpg',$imagefile),100);
imagedestroy($tn);
imagedestroy($im);
}
//Liest die Anzahl der Imageclicks aus der dat-Datei und gibt den Wert zurück
function getImageClicks($image) {
clearstatcache();
if (strchr($image,".jpg")) $file=str_replace(".jpg",".click.dat",$image);
if (file_exists($file)) {
$fp=fopen($file,'r');
$str=fgets($fp,100);
fclose($fp);
return($str);
}
else return (0);
}
//Erhöht die Anzahl der Clicks für ein Bild in der dat-Datei
function incImageClicks($image) {
$anz=getImageClicks($image);
$anz+=1;
if (strchr($image,".jpg")) $file=str_replace(".jpg",".click.dat",$image);
$fp=fopen($file,'w+');
fwrite($fp,$anz."\n");
fclose($fp);
}
//Fügt ein Kommentar zu dem übergebenen Bild in der dat-Datei hinzu.
function writeComment($stelle,$album,$comment,$author) {
if (strlen($comment)>200) {
showPicture($stelle,$album);
exit;
}
if (strlen($author)>20) {
showPicture($stelle,$album);
exit;
}
$bilder=getJPGThumbnails($album);
$image=$bilder[0]."/".getBigPicture($bilder[$stelle]);
if (strchr($image,".jpg")) $file=str_replace(".jpg",".comments.dat",$image);
$fp=fopen($file,'a');
$commentnew=strip_tags($comment);
$commentnew=str_replace("\r\n",' ',$commentnew);
$commentnew=str_replace("|","]",$commentnew);
$authornew=strip_tags($author);
$authornew=str_replace("\r\n",' ',$authornew);
$authornew=str_replace("|","]",$authornew);
if ($author<> "" and $comment<> "Kommentar") fwrite($fp,$authornew.'|'.$commentnew.'|'.date("d.m.Y H:i:s").'|'.$_SERVER['REMOTE_ADDR']."\n");
fclose($fp);
showPicture($stelle,$album);
}
//Liefert einen Array mit allen Kommentaren zu dem übergebenen Bild zurück
function getComments($image) {
if (strchr($image,".jpg")) $file=str_replace(".jpg",".comments.dat",$image);
if (file_exists($file)) $inhalt=file($file);
if (!isset($inhalt)) return(null);
$comments=array();
foreach ($inhalt as $Zeile)
{
$GesplitteteZeile=explode('|', $Zeile);
$comments[]=array('name' => $GesplitteteZeile[0],
'comment' => mywordwrap(str_replace("\\n"," ",$GesplitteteZeile[1]),25," "),
'zeit' => $GesplitteteZeile[2],
'ip' => $GesplitteteZeile[3]);
}
return($comments);
}