<?php
###############################################################################
# A PHP File Upload Script with Captcha protection
# Uploadskript mit Captcha Spamschutz und Dateigrößenbegrenzung
###############################################################################
# Dieses Programm ist freie Software. Sie können es weitergeben und/oder 
# nach Ihren Anforderungen modifizieren
#
#################### Einstellungen ############################################
#
$ordner "upload/upload";        // Upload Ordner
$size_file "350000";        // Zulässige Datei größe, 350000 = 350KB
$zul_endungen = array('gif''pdf''png''jpg''jpeg''exe''zip''txt''log''rar''wmv''mpg''mpeg');
$hoehe "30";      // Höhe 
$breite "80";        // und Breite des Captcha
#
##################
$Buchstaben = array("A""B""C""D""E""F""G""H""K""M""N""P""Q""R""S""T""U""V""W""X""Y");
$Zahlen = array("2""3""4""5""6""7""8""9");
###############################################################################?>

<?php /** ######  DIESEN CODE AUSSCHNEIDEN UND IN EINE DATEI NAMENS "grafik.php" KOPIEREN!!!! ###########
header("Content-Type: image/png");
$font   = "/fonts/SF Toontime B.ttf"; //SF Wonder Comic.ttf";  # Absoluten Pfad angeben, z.B. C:\fonts\arial.ttf
$width = $_REQUEST['width']; // Später die Breite des Rechtecks
$height = $_REQUEST['height']; // Später die Höhe des Rechtecks
$Grafik = imagecreatetruecolor($width, $height); # Hier wird das Bild einer Variable zu gewiesen

# Verschiedene Farben
# Die drei nullen bestehen aus den RGB-Parametern. 255, 0, 0 wäre z.B. rot. ($img muss am Anfang stehen)
$black = ImageColorAllocate($Grafik, 0, 0, 0);
$white = ImageColorAllocate($Grafik, 255, 255, 255); 
$purple = ImageColorAllocate($Grafik, 205, 55, 139); 
$red = ImageColorAllocate($Grafik, 255, 0, 0); 
$yellow = ImageColorAllocate($Grafik, 255, 255, 0); 
$blau = ImageColorAllocate($Grafik, 0, 0, 255);
$gruen = ImageColorAllocate($Grafik, 27, 189, 0);
$farbe = imagecolorallocate($Grafik, 128, 128, 128);

ImageFill($Grafik, 0, 0, $blau); 
imagefilledrectangle($Grafik, 0, 0, $width/4, $height, $red);
ImageFilledRectangle($Grafik, 0, $height/2, $width, $height, $purple);
ImageFilledRectangle($Grafik, $width/4, 0, $width/4*2, $height, $black);
ImageFilledRectangle($Grafik, $width/4*3, 0, $width, $height, $gruen);
# imagefilledrectangle  ( $img  , $x1  , $y1  , $x2  , $y2  , $color  )
# ImageFilledRectangle() erzeugt ein mit der Farbe color gefülltes Rechteck innerhalb des Bildes img . 
# Die obere linke Eck-Koordinate wird mittels x1 und y1 ,
# die untere rechte Eck-Koordinate mittels x2 und y2 definiert.
# 0, 0 ist dabei die linke obere Ecke des Bildes img 
# Die 1. Zahl ist die Entfernung in px von Links.
# Die 2. Zahl ist die Entfernung in px von Oben.
# Die 3. Zahl ist die Breite der Farbe.
# Die 4. Zahl ist die Höhe der Farbe.

# Jetzt wird ein Kreis gezogen
ImageArc($Grafik, 20, $height/3, $width/4*3, $height/4*3, 1, 360, $blau); 
ImageArc($Grafik, 55, $height/2, $height/4*3, $width/4*3, 1, 360, $red); 
# Der erste Parameter  steht für die Entfernung in px von links
# Der zweite Parameter  steht für die Entfernung in px von oben
# Der dritte Parameter  steht für die Größe des Kreises (oder der Ellipse) in der Breite
# Der vierte Parameter  steht für die Größe des Kreises (oder der Ellipse) in der Höhe
# Der fünfte Parameter  steht für den Startwinkel
# Der sechste Parameter steht für den Endwinkel des Kreises (bzw. der Ellipse)

# Mit ImageLine wir eine Linie gezeichnet
ImageLine($Grafik, 1, $height-3, $width-5, 5, $black); 
ImageDashedLine($Grafik, 1, 1, $width-5, $height-3, $purple); 
# Die 1. Zahl steht für den Abstand in px von links
# Die 2. Zahl steht für den Abstand in px von Oben vom linken Punkt der Strecke
# Die 3. Zahl steht für den Abstand in px von links
# Die 4. Zahl steht für den Abstand in px von Oben vom rechten Punkt der Strecke
# !!! WICHTIG: Für geschtrichelte Lininen einfach den Befehl 'ImageDashedLine()' benutzen
# Die Parameter sind gleich wie bei 'ImageLine' !!!

ImageTTFText($Grafik, 10, 0, $width/20, $height/"1.5", $yellow, $font, $_REQUEST['Code']);
# ImageTTFText($img, Schriftgröße, ausrichtung in °Grad, von Links, von Oben, Farbe, Schrift, Text );

imagepng($Grafik);
ImageDestroy($Grafik);
############### BIS HIER!!!!  #####################################################  */
?>

<?php ###########################################################################################
echo ("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n".
    
"<html>\n".
    
"<head>\n".
    
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n".
    
"<meta name=\"robots\" content=\"none\">\n".
    
"<title>Datei-Upload</title>\n".
    
"<LINK rel=StyleSheet type=\"text/css\" href=\"/style.css\">\n".
    
"</head>\n".
    
"<body>\n");

function 
hochladen($datei$ordner){
global 
$size_file;
global 
$zul_endungen;

  if(!
$_FILES[$datei]['tmp_name']){
    echo
"Fehler: Bitte geben Sie eine Datei an!";
    echo 
"<p><a href=\"".$_SERVER['PHP_SELF']."\">Nochmal Versuchen</a></p>";
    return 
false;
  }
  
  if (
$_FILES[$datei]["size"] > $size_file) {
    echo 
"Fehler: Nur Dateien bis ".round($size_file/10241)." KB dürfen hochgeladen werden!";
    echo 
"<p><a href=\"".$_SERVER['PHP_SELF']."\">Nochmal Versuchen</a></p>";
    return 
false;
  }

  if(!@
ereg('^[ a-zA-Z0-9._-]*$'$_FILES[$datei]['name'])){
    echo(
"Fehler: Ungültiger Dateiname ".htmlspecialchars($_FILES[$datei]['name'])."!");
    echo 
"<p><a href=\"".$_SERVER['PHP_SELF']."\">Nochmal Versuchen</a></p>";
    return 
false;
  }
  
  if(!
in_array(strtolower(substr(strrchr($_FILES['Datei']['name'], "."), 1)), $zul_endungen)){
    echo(
"Fehler: Unzulässiges Dateiformat, zulässig sind nur");
    for(
$i 0$i count($zul_endungen); $i++){
      echo(
" ".$zul_endungen[$i]);
      if(
$i != count($zul_endungen)-1) echo(",");
    }
    echo(
"!");
    echo 
"<p><a href=\"".$_SERVER['PHP_SELF']."\">Nochmal Versuchen</a></p>";
    return 
false;
  }

  if(@
file_exists('./'.$ordner.'/'.$_FILES[$datei]['name'])){
    echo(
"Fehler: Datei <a href=\"./".$ordner."/".$_FILES[$datei]['name']."\">".$_FILES[$datei]['name']."</a> existiert schon!");
    echo 
"<p><a href=\"".$_SERVER['PHP_SELF']."\">Andere Datei Hochladen</a></p>";
    return 
false;
  }
  
  if(!@
is_dir($ordner)){
    echo(
"Fehler: Ordner ".$ordner." existiert nicht!");
    return 
false;
  }
 
  if(@
move_uploaded_file($_FILES[$datei]['tmp_name'], './'.$ordner.'/'.$_FILES[$datei]['name'])){
    echo(
"Die Datei <a href=\"./".$ordner."/".$_FILES[$datei]['name']."\">".$_FILES[$datei]['name'].
    
"</a> (".round($_FILES[$datei]['size']/10242)."KB) wurde hochgeladen.");
    echo 
"<p><a href=\"".$_SERVER['PHP_SELF']."\">Noch eine Datei Hochladen</a></p>";
    return 
true;
  }
  switch(
$_FILES[$datei]['error']){
    case 
1:
      echo 
"Fehler: Die hochgeladene Datei überschreitet die in der php.ini festgelegten Größe von ".
    
ini_get'upload_max_filesize')."MB.";
    echo 
"<p><a href=\"".$_SERVER['PHP_SELF']."\">Nochmal Versuchen</a></p>";
      break;

    case 
2:
      echo 
"Fehler: Die hochgeladene Datei überschreitet die in dem HTML Formular angegebene maximale Dateigröße.";
    echo 
"<p><a href=\"".$_SERVER['PHP_SELF']."\">Nochmal Versuchen</a></p>";
      break;

    case 
3:
      echo 
"Fehler: Die Datei wurde nur teilweise hochgeladen.";
    echo 
"<p><a href=\"".$_SERVER['PHP_SELF']."\">Nochmal Versuchen</a></p>";
      break;

    case 
4:
      echo 
"Fehler: Es wurde keine Datei hochgeladen.";
    echo 
"<p><a href=\"".$_SERVER['PHP_SELF']."\">Nochmal Versuchen</a></p>";
      break;

    default:
      echo 
"Fehler: Die Datei konnte nicht hochgeladen werden.";
    echo 
"<p><a href=\"".$_SERVER['PHP_SELF']."\">Nochmal Versuchen</a></p>";
      break;
  }
  return 
false;
}

#

if(!isset($_POST['Code'])){
    for(
$i 0$Code ""strlen($Code) < 6$i++){
       if(
rand(01) == && isset($Buchstaben)){
    
$Buchstabe $Buchstaben[rand(0count($Buchstaben))];
        
$Code .= $Buchstabe;
        
$AngezeigterCode .= $Buchstabe." ";
    }
      else{
        
$Zahl $Zahlen[rand(0count($Zahlen))];
        
$Code .= $Zahl;
        
$AngezeigterCode .= $Zahl." ";
    }
}
$AngezeigterCode trim($AngezeigterCode);


echo (
"<table border=\"0\" >\n".
    
"<tr><td colspan=\"2\">Hier k&ouml;nnen Dateien hochgeladen werden:</td></tr>\n".
    
"<form name=\"hochladen\" action=\"#\" enctype=\"multipart/form-data\" method=\"post\">\n".
    
"<input name=\"Code\" type=\"hidden\" value=\"$Code\">\n".
    
"<tr><td><img border=\"0\" src=\"grafik.php?Code=$AngezeigterCode&width=$breite&height=$hoehe\"".
    
" alt=\"$AngezeigterCode\" height=\"$hoehe\" width=\"$breite\"></td>\n".
    
"<td align=\"right\">Diesen Code eingeben</td></tr>\n".
    
"<tr><td align=\"right\" colspan=\"2\"> <input name=\"Datei\" type=\"file\"></td></tr>\n".
    
"<tr><td><input autocomplete=\"off\" value=\"Code\" maxlength=\"6\" \n".
    
"onFocus=\"javascript:if(document.hochladen.EingegebenerCode.value=='Code')document.hochladen.EingegebenerCode.value='';\"".
    
" \nname=\"EingegebenerCode\" size=\"6\" type=\"text\">\n".
    
"</td><td align=\"right\">\n<input name=\"Send\" type=\"submit\" value=\"Hochladen\">\n</td></tr>\n".
    
"</form><br>\n</table>\n");

}

if(isset(
$_POST['Code'])) {
    if(
strtolower($_REQUEST['Code']) == strtolower($_REQUEST['EingegebenerCode'])){
    
hochladen('Datei'$ordner);
  }
    else {
    echo
"Der Code wurde fehlerhaft eingegeben!";
    echo 
"<p><a href=\"".$_SERVER['PHP_SELF']."\">Nochmal Versuchen</a></p>";
    exit();
  }
}

echo 
"</body>\n </html>";
?>