<?php if (isset($_GET['show_php'])) {die(highlight_file(__FILE__1));}
ini_set('display_errors'1); error_reporting(E_ALL E_STRICT); // während der Tests aktivieren
//ini_set('display_errors',0); error_reporting(0); // nach Testende aktivieren

$_GET = array();$_COOKIE = array();$_REQUEST = array();$_SESSIONT = array();$_FILES = array();
ini_set('default_charset''utf-8');
date_default_timezone_set('Europe/Berlin');

// Begrenzungen für Server-Sicherheit:
define('FILE_SIZE_MAX'200000);            // Sicherheit: max-Dateigröße in Byte für Daten-File
define('MAX_ANZ_FILES_IN_DIR'99);         // Sicherheit: begrenze die Anzahl der Dateien in __dir__
define('FILE_PRE''.ht_');                 // Sicherheit: .ht_ vor File-Namen zusätzliche Zugriffs-Sicherheit 
define('FILE_BOM_ZEICHEN'"\xef\xbb\xbf"); // BOM alternative define('FILE_BOM_ZEICHEN', "");
define('FILE_CMOD_DATA'0660);             // Sicherheit: geht auch? define('FILE_CMOD_DATA', 0600);


function count_files_in_akt_dir() { return count($files scandir(__DIR__)); }

function 
lade_file_content($file_name) {
if (@
file_exists($file_name)) { $inhalt = @file_get_contents($file_name); } else { $inhalt '';}
return 
$inhalt
}

function 
file_append($file_name$append_string
  
$max_anz_files_in_dir MAX_ANZ_FILES_IN_DIR,
  
$file_max_size FILE_SIZE_MAX
$err 0;
if (@
file_exists($file_name)) { @chmod($file_nameFILE_CMOD_DATA); $fileSize = @filesize($file_name);} else { $fileSize 0;}
if (
$fileSize strlen($append_string) > $file_max_size) { $err++; echo json_encode(array('error' => 'Max file size reached'));}
if (
count_files_in_akt_dir() > $max_anz_files_in_dir  ) { $err++; echo json_encode(array('error' => 'Max num files in dir reached'));} 
if (
$fileSize == 0) { $append_string FILE_BOM_ZEICHEN $append_string; }// BOM, falls neuer file angelegt wird
if (@file_put_contents($file_name$append_stringFILE_APPEND) === false) {$err++; 
  echo 
json_encode(array('error' => 'Could not write to file'));
} else { echo 
json_encode(array('success' => true));
} @
chmod($file_nameFILE_CMOD_DATA);
  return 
$err;
}

// Funktionen zum absichern von User-Eingaben ...
/////////////////////////////////////////////////
function sicherer_file_name ($filename) { 
   
$temp preg_replace("/[a-zA-Z0-9_\-]/",""$filename);
   
$anz strlen($temp); if( $anz != ){ $filename "ERROR_FILENAME_O0o"; }
   return 
$filename;
}
function 
sicherer_user_name ($username) { 
   if( 
strlen($username) < ){ $username "USERNAME_".time(); }
   return 
$username;
}
function 
sichere_download_zeichen($str''$level 1) { // $level = 1 bei msg
  
if ($level == ) { $str preg_replace"/(%0A|\\\\r|%0D|\\\\n|%00|\\\\0|%09|\\\\t|%01|%02|%03|%04|%05|%06|%07|%08|%09|%0B|%0C|%0E|%0F|%10|%11|%12|%13)/ims"""$str); } 
  return 
str_replace(array ("<"">"),array ("«""»"), $str);
}
/////////////////////////////////////////////////

$nachricht get_magic_quotes_gpc() ? stripslashes($_POST['nachricht']) : $_POST['nachricht']; 
$nachricht json_decode($nachrichttrue);
$nachricht["gruppe"]   = sicherer_file_nametrim($nachricht["gruppe"]) ); // entspricht dem Filenamen!!!
$nachricht["benutzer"] = sicherer_user_nametrim($nachricht["benutzer"]) ); 

switch( 
$nachricht["mode"] ) {
case 
'upload'
  
//Nur nachrichten speichern: @file_append(FILE_PRE.$nachricht["gruppe"], $nachricht["nachrichten"]);
  // sonst z.B. 
  
$inhalt "upload-TEST-ANZEIGE\n".
   
"mode       :" $nachricht["mode"]."\n".
   
"date       :" $nachricht["date"]."\n".
   
"gruppe     :" $nachricht["gruppe"]."\n".
   
"filename   :" $nachricht["gruppe"]."\n".
   
"benutzer   :" $nachricht["benutzer"]."\n".
   
"nachrichten:" $nachricht["nachrichten"];
  echo 
$inhalt;

@
file_append(FILE_PRE.$nachricht["gruppe"], $inhalt);

break;

case 
'download'
  
$inhalt lade_file_content(FILE_PRE.$nachricht["gruppe"]); 
  echo 
$inhalt;
break;

default: break;
}