<?php if (isset($_GET['show_php'])) {die(highlight_file(__FILE__1));}

// lediglis $_POST ist aktiv (=superglobaler assoziativer Array): 
// $_POST = array(); 
$_GET = array();      // $_GET      gesperrt
$_COOKIE = array();   // $_COOKIE   gesperrt
$_REQUEST = array();  // $_REQUEST  gesperrt
$_SESSIONT = array(); // $_SESSIONT gesperrt
$_FILES = array();    // $_FILES    gesperrt

// proj6
// include_once 'ausgelagert.php'; < ? p h p code von ausgelagert.php ? >
// require_once 'ausgelagert.php';
// gut  https://stackoverflow.com/questions/34961920/4chans-api-how-to-loop-through-json-decoded-array-using-php


//////////////////////////////////////////////////////////////////
// Hinweise: upload AJAX-JSON-String-Nachrichten kommt hier an mit
// $_POST['nachricht']  und gebraucht werden am Server:
// $nachricht = json_decode($nachricht, true);  
/////////////////////////////////////////////////////////////////


//echo "XXXXXXXXXX"; exit;

// $my_globals = array();

$br="\n";


$MY_DEBUG_TEXT '';
// Aufruf  MY_DEBUG('Testausgabe  Wert $x = ' . $x )
function MY_DEBUG$err_text$flag=) { 
  global 
$MY_DEBUG_TEXT
  if(
MY_TEST_PHASE_IST_AKTIV){ 
    switch(
$flag){
    case 
1$MY_DEBUG_TEXT .= "\n*** ".$err_text; break;
    case 
2$MY_DEBUG_TEXT .= '<br />*** '.$err_text; break;
    default: break;
    }
  }


function 
echo_pre($s) {if(MY_TEST_PHASE_IST_AKTIV){ echo '<pre class="echo_pre">'.$s.'</pre>';}}


// Userspezifische Setzungen:
// if(empty($_POST))
//define('MY_MOD', 'nachricht'); // wird von $_POST[MY_MOD] verwendet


define('MY_TEST_PHASE_IST_AKTIV'true); // setze von Hand ob debug-Infos true/false
define('MY_CHARSET''UTF-8');           // setze von Hand den Zeichensatz
define('MY_TIME_ZONE','Europe/Berlin');  // setze von Hand die Zeitzone

// Begrenzungen für die Server-Sicherheit:
define('MY_FILE_SIZE_MAX',            200000);  // Sicherheit: max-Dateigröße in Byte für Daten-File(s)
define('MY_MAX_ANZ_FILES_IN_DIR',         99);  // Sicherheit: begrenze die Anzahl der Dateien in __dir__
define('MY_FILE_PRE_CHARS',           '.ht_');  // Sicherheit: .ht_ vor File-Namen zusätzliche Zugriffs-Sicherheit 

define('MY_SERVER_FILE_CMOD_DATA',      0660);  // Sicherheit: geht auch? define('MY_SERVER_FILE_CMOD_DATA', 0600);
define('MY_FILE_BOM_ZEICHEN'"\xef\xbb\xbf");  // BOM alternative define('MY_FILE_BOM_ZEICHEN', "");
define('MY_PHP_FILE_EXT',             '.php');  // 
define('MY_WWW_FILE_EXT',             '.htm');  // 

// debug-Fehlermeldungen bei file_append()-Funktion
define('MAX_FILE_SIZE_REACHED',        'file_append: max file size reached');
define('MAX_NUM_FILES_IN_DIR_REACHED''file_append: max num files in dir reached');
define('COULD_NOT_WRITE_TO_FILE',      'file_append: Could not write to file');
define('FILE_APPEND_OK',               'file_append: war erfolgreich');

date_default_timezone_set(MY_TIME_ZONE);
mb_internal_encoding(MY_CHARSET);
ini_set('default_charset'MY_CHARSET);

if(
MY_TEST_PHASE_IST_AKTIV) { ini_set('display_errors'1); error_reporting(E_ALL E_STRICT); //$MY_DEBUG_TEXT = '';
} else { ini_set('display_errors',0); error_reporting(0); 
}


/////////////////////////
// File-dir und http-dir
/////////////////////////
function php_root() { return $_SERVER['DOCUMENT_ROOT']; }
function 
php_pfad() { return dirname($_SERVER['SCRIPT_NAME']); }
function 
php_dir()  { $temp php_root().php_pfad(); 
return 
$temp;
//if($temp == realpath(__DIR__) ){ return $temp; } return false;

function 
php_filename_ohne_ext() { return basename(realpath(__FILE__), ".php"); }

define('PHP_ROOT'php_root() ); // aktuelles Root-Verzeichnis
define('PHP_PFAD'php_pfad() ); // aktuelles File-Verzeichnis
define('PHP_DIR'php_dir() );   // aktuelles File-Verzeichnis : PHP_DIR = PHP_ROOT . PHP_PFAD
define('PHP_FILENAME_OHNE_EXT'php_filename_ohne_ext() );  // nur php-File-Name (ohne Pfad und ohne Ext)

function www_hostname() { return 'http'.(isset($_SERVER['HTTPS'])?'s':'').'://'.$_SERVER['HTTP_HOST'];}
function 
www_url() {return www_hostname().$_SERVER['REQUEST_URI'];}
function 
www_pfad() { $temp dirname(www_url()); $len strlen(www_hostname()); return substr ($temp$len);}
function 
www_dir() {return www_hostname().www_pfad(); }




///////////
// teste   
///////////
$s 
$br.' basename(__FILE__,.php)='.basename(__FILE__,".php").  //  auf-7-2017-start
$br.' PHP_ROOT='.PHP_ROOT.                           //  /var/www/vhosts/k8090.web178.dogado.net/httpdocs/cilie-org
$br.' PHP_PFAD='.PHP_PFAD.                           //                                      /esa/prakt-2017 
$br.' PHP_DIR='.PHP_DIR.                             //  /var/www/vhosts/k8090.web178.dogado.net/httpdocs/cilie-org/esa/prakt-2017

$br.' PHP_FILENAME_OHNE_EXT='.PHP_FILENAME_OHNE_EXT//  braucht / bei Verkettung:                          auf-7-2017-start

$br.' www_hostname()='.www_hostname().               //  http://www.cilie.org
$br.' www_pfad()='.www_pfad().                       //                      /esa/prakt-2017
$br.' www_dir()='.www_dir().                         //  http://www.cilie.org/esa/prakt-2017

$br.' www_url()='.www_url();                         //  http://www.cilie.org/esa/prakt-2017/auf-7-2017-start.php

//substr(www_url(),-strlen(MY_PHP_FILE_EXT))
echo_pre$s ); 
////////////////////////////////////////////




/////////////////////////////////
// File-dir und aktueller Inhalt
/////////////////////////////////

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

function 
datei_namen_in_akt_dir($br="\n",$dir=true,$size=true,$lastmodifiziert=true,$cmod=true) {$s=''
$files array_slice(scandir(__DIR__),2);
if(
$dir){$s .= sprintf(" %s"www_dir() );$s .= $br;}
foreach (
$files as $file) {$s .= sprintf(" %-25s"$file );   
if(
$size){ $s .= sprintf(" %9d"filesize($file)); } 
if(
$lastmodifiziert){ $s .= sprintf(" %18s"date("Y.m.d  H:i"filemtime($file))); }
if(
$cmod){ $s .= sprintf(" %5s"substr(decoct(fileperms($file)),-4) ); }
$s .= $br;

// return $s; 
return '<pre class="filenamen">'.$s.'</pre>'
}

exit( 
datei_namen_in_akt_dir() );



/////////////////////////////////
// File-laden, screiben, löschen
/////////////////////////////////

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

function 
file_append $file_name$append_string
  
$my_max_anz_files_in_dir MY_MAX_ANZ_FILES_IN_DIR$my_file_size_max MY_FILE_SIZE_MAX
){  
if (@
file_exists($file_name)) { @chmod($file_nameMY_SERVER_FILE_CMOD_DATA); $fileSize = @filesize($file_name);} else { $fileSize 0;}

if (
$fileSize strlen($append_string) > $my_file_size_max) { 
  
MY_DEBUG'Max file size reached' );
}

if (
count_files_in_akt_dir() > $my_max_anz_files_in_dir  ) { 
  
MY_DEBUG'Max num files in dir reached' );
}

if (
$fileSize == 0) { $append_string MY_FILE_BOM_ZEICHEN $append_string; }// BOM, falls neuer file angelegt wird

if (@file_put_contents($file_name$append_stringFILE_APPEND) === false) {
  
MY_DEBUG'Could not write to file' );
} else { echo 
json_encode(array('success' => true));
} @
chmod($file_nameMY_SERVER_FILE_CMOD_DATA);
}



// Funktionen zum absichern von User-Eingaben ... Code-Injektion? ...
/////////////////////////////////////////////////
function sicherer_file_name ($filename) { 
   
$temp preg_replace("/[a-zA-Z0-9_\-]/",""$filename);
   
$anz strlen($temp); 
   if( 
$anz != ){ 
     
//$filename = "ERROR_FILENAME_O0o"; 
     
MY_DEBUG'FILENAME-ERROR' );
   }
   return 
$filename;
}

function 
sicherer_user_name ($username) { 
   if( 
strlen($username) < ){ $username "USERNAME_".time(); }
   return 
$username;
}

function 
sichere_zeichen($str''$level 1) { 
switch( 
$level ) {
case 
0: return $str;
case 
1: return str_replace(array ("<?php""<scr"),array ("«?php""«scr"), $str);
case 
2: return str_replace(array ("<"">"),array ("«""»"), $str);
case 
3$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);
default: 
//return ???;
  
break;
// end switch
return '';
}


/////////////////////////////////////////////////
// Wichtig für Proteus:
if(isset($_POST['nachricht'])){ $nachricht get_magic_quotes_gpc() ? stripslashes($_POST['nachricht']) : $_POST['nachricht'];
} else { 
MY_DEBUG'keine _POST[nachricht]' ); } 
/////////////////////////////////////////////////
//if (empty($_POST)) {$_POST = json_decode(file_get_contents("php://input"), true) ? : [];


$nachricht json_decode($nachrichttrue);
//$nachricht["gruppe"]   = sicherer_file_name( trim($nachricht["gruppe"]) ); // entspricht dem Filenamen!!!
//$nachricht["benutzer"] = sicherer_user_name( trim($nachricht["benutzer"]) ); 

switch( $nachricht["mode"] ) {
case 
'upload'
  
//Nur nachrichten speichern: @file_append(MY_FILE_PRE_CHARS.$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(MY_FILE_PRE_CHARS.$nachricht["gruppe"], $inhalt);

break;

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

default: break;
}


/*
if($name_mit_size_und_cmod ){$s .= sprintf('%s %s %s ',$file,filesize($file),substr(decoct(fileperms($file)),-4));}
elseif($name_mit_size){$s .= sprintf('%s %s ',$file,filesize($file));}
else {$s .= sprintf('%s ',$file);}
*/
 
/*
if(MY_TEST_PHASE_IST_AKTIV) { 
echo 'DATEI-Ende: '.var_dump($MY_ERROR_ARRAY);
//echo "DATEI-Ende: ".print_r($MY_ERROR_ARRAY); 
}
*/



/*
parse_url('http://localhost/project/controller/action/param1/param2'));
Array(
    [scheme] => http
    [host] => localhost
    [path] => /project/controller/action/param1/param2
)
$_SERVER['QUERY_STRING'] 
define('PHP_ROOT',$_SERVER['DOCUMENT_ROOT']);        // aktuelles Root-Verzeichnis
define('PHP_PFAD',dirname($_SERVER['SCRIPT_NAME'])); // aktuelles File-Verzeichnis
define('PHP_DIR', realpath(__DIR__));                // aktuelles File-Verzeichnis : PHP_DIR = PHP_ROOT . PHP_PFAD
define('PHP_FILENAME_OHNE_EXT', basename(realpath(__FILE__), ".php"));  // diese File-Name-ohne Pfad ohne Ext
 //  $temp = 'http'.(isset($_SERVER['HTTPS'])?'s':'').'://';//  return "$temp{$_SERVER['HTTP_HOST']}";//{$_SERVER['REQUEST_URI']}";
//MY_DEBUG( 'substr(www_url(),-4) == php_dir() ',   PHP_ROOT.PHP_PFAD == php_dir()  );
//MY_DEBUG( '$_SERVER[SCRIPT_NAME]='.$_SERVER['SCRIPT_NAME'] );
//???MY_DEBUG( '$_SERVER[QUERY_STRING]'.$_SERVER['QUERY_STRING']   );
*** www_hostname() br www_pfad()=       http://www.cilie.org     /esa/prakt-2017
*** $_SERVER[SCRIPT_NAME]=                                       /esa/prakt-2017/auf-7-2017-start.php
    php_filename_ohne_ext() 
    auf-7-2017-start
    www_url() = www_hostname().$_SERVER[SCRIPT_NAME]
*/

/*
*** www_hostname() br www_pfad()=http://www.cilie.org    /esa/prakt-2017
*** $_SERVER[SCRIPT_NAME]=/esa/prakt-2017/auf-7-2017-start.php
 PHP_ROOT=/var/www/vhosts/k8090.web178.dogado.net/httpdocs/cilie-org PHP_PFAD=/esa/prakt-2017
 PHP_DIR=/var/www/vhosts/k8090.web178.dogado.net/httpdocs/cilie-org/esa/prakt-2017
 PHP_FILENAME_OHNE_EXT=auf-7-2017-start
*/
/*
function html_path($relative_path) {
    $realpath=realpath($relative_path);
    $htmlpath=str_replace($_SERVER['DOCUMENT_ROOT'],'',$realpath);
    return $htmlpath;
}
 teste 

*** substr(www_url(),-4) == www_hostname().www_pfad()

PHP_ROOT=/var/www/vhosts/k8090.web178.dogado.net/httpdocs/cilie-org 
PHP_PFAD=/esa/prakt-2017 
PHP_DIR=/var/www/vhosts/k8090.web178.dogado.net/httpdocs/cilie-org/esa/prakt-2017 
PHP_FILENAME_OHNE_EXT=auf-7-2017-start 

www_hostname()=http://www.cilie.org 
www_pfad()=                         /esa/prakt-2017 
www_url()=     http://www.cilie.org/esa/prakt-2017/auf-7-2017-start.php 
realpath(__DIR__)=/var/www/vhosts/k8090.web178.dogado.net/httpdocs/cilie-org/esa/prakt-2017 
realpath(__FILE__)=/var/www/vhosts/k8090.web178.dogado.net/httpdocs/cilie-org/esa/prakt-2017/auf-7-2017-start.php 
html_path(__FILE__)=/esa/prakt-2017/auf-7-2017-start.php 
__FILE__=/var/www/vhosts/k8090.web178.dogado.net/httpdocs/cilie-org/esa/prakt-2017/auf-7-2017-start.php 
__DIR__=/var/www/vhosts/k8090.web178.dogado.net/httpdocs/cilie-org/esa/prakt-2017


(__DIR__)=/var/www/vhosts/k8090.web178.dogado.net/httpdocs/cilie-org/esa/prakt-2017
PHP_ROOT=/var/www/vhosts/k8090.web178.dogado.net/httpdocs/cilie-org
PHP_PFAD=                                    /esa/prakt-2017
PHP_FILENAME_OHNE_EXT=                                       auf-7-2017-start
PHP_DIR=/var/www/vhosts/k8090.web178.dogado.net/httpdocs/cilie-org/esa/prakt-2017

realpath(__DIR__)=/var/www/vhosts/k8090.web178.dogado.net/httpdocs/cilie-org/esa/prakt-2017
realpath(__FILE__)=/var/www/vhosts/k8090.web178.dogado.net/httpdocs/cilie-org/esa/prakt-2017/auf-7-2017-start.php
html_path(__FILE__)=/esa/prakt-2017/auf-7-2017-start.php

__FILE__=/var/www/vhosts/k8090.web178.dogado.net/httpdocs/cilie-org/esa/prakt-2017/auf-7-2017-start.php
__DIR__=/var/www/vhosts/k8090.web178.dogado.net/httpdocs/cilie-org/esa/prakt-2017

www_hostname()=http://www.cilie.org
www_pfad()=                         /esa/prakt-2017
www_url()=     http://www.cilie.org/esa/prakt-2017/auf-7-2017-start.php
// 'basename(realpath(www_url()), .php)='.basename(realpath(www_url()), ".php").
*/ 

/*
' www_hostname()='.www_hostname().       //  ???http://www.cilie.org
' www_pfad()='.www_pfad().                 //                      /esa/prakt-2017
' www_url()='.www_url().                 //  http://www.cilie.org/esa/prakt-2017/auf-7-2017-start.php

' realpath(__DIR__)='.realpath(__DIR__).                //  /var/www/vhosts/k8090.web178.dogado.net/httpdocs/cilie-org/esa/prakt-2017      
' realpath(__FILE__)='.realpath(__FILE__).              //  /var/www/vhosts/k8090.web178.dogado.net/httpdocs/cilie-org/esa/prakt-2017/auf-7-2017-start.php
' html_path(__FILE__)='.html_path(__FILE__).            //                                      /esa/prakt-2017/auf-7-2017-start.php
' __FILE__='. __FILE__.                                 //  /var/www/vhosts/k8090.web178.dogado.net/httpdocs/cilie-org/esa/prakt-2017/auf-7-2017-start.php 
' __DIR__='.  __DIR__.                                  //  /var/www/vhosts/k8090.web178.dogado.net/httpdocs/cilie-org/esa/prakt-2017
//' datei_namen_in_akt_dir()='.datei_namen_in_akt_dir(true);
*/

/*
foreach (scandir($store) as $eintrag) { 
                if ($eintrag != '.' && $eintrag != '..') { 
                    $roh = file_get_contents($store . '/' . $eintrag); 
                    $inhalt = json_decode($roh, true); 
                     
                    $result[] = array( 
                        'key' => $eintrag, 
                        'start' => $inhalt['start'], 
                        'ende' => $inhalt['ende'], 
                        'dauer' => $inhalt['dauer'] 
                    ); 
                } 
            } 
*/            
 
 




/*
function add2my_globals($arr, $my_white))) { // alternativ: array_merge()
  foreach ($arr as $key => $val) { if (in_array($key, $my_white)) {global $my_globals;  $my_globals[$key] = $val; } }
}

$arr = array('ccc' => "C", 'bbb' => "B", 'aaa' => "A" );
//$my_white = array('ccc' => "C", 'bbb' => "B", 'aaa' => "A" );
$my_white = array('ccc', 'aaa' );


debug_infos($arr);
debug_infos($my_white_keys); 
add2my_globals($arr, $white_keys);
debug_infos($my_globals);

debug_infos();
*/
 
/*
function debug_infos($v, $typ=true) {
if (is_int($v)) { return ($typ ? '(int)'.$v : $v);
} else if (is_float($v)) { return ($typ ? '(float)'.round($v, 4) : round($v, 4));
} else if (is_string($v)) {return ($typ ? '(string)"'.$v.'"' : '"'.$v.'"');
} else if (is_bool($v)) {$v = ($v ? 'true' : 'false');return ($typ ? '(bool)'.$v : $v);
} else if (is_array($v)) {$r = ($typ ? '(array)(' : '('); $c = '';
  foreach ($v as $key=>$val) { if ($c !== '') {$c .= ', '; }
    $c .= debug_infos($key, $typ) . ' => ' . debug_infos($val, $typ);} $r .= $c . ')'; return $r;
} else if (is_object($v)) { return ($typ ? '(object)'.get_class($v) : get_class($v));
} else if (is_resource($v)) { return '(resource)';
} else if (is_null($v)) {return 'NULL';
} else { return '('.gettype($v).')?'; }
}


// $GLOBALS welche default?  
http://www.rither.de/a/informatik/php-beispiele/variablen/eine-beliebige-variable-ausgeben/

global $globals = array(); $globals['foo'] = 123;
function arr2globals( global $globals; ...}
WHITE_KEYS 
function arr2globals($arr, $white_keys) { global $globals; // alternativ: array_merge()
  foreach ($arr as $key=>$val) {    if (in_array($key, $white_keys)) { $globals[$key] = $val; 
    //oder fn-intern mit $$key = $val; 
    }
    // verwende $key als $val
  }
}
function debug_global_do() {global $do; var_dump($do); }
*/    
/*
basename(__FILE__,.php)=auf-7-2017-start 
PHP_ROOT=/var/www/vhosts/k8090.web178.dogado.net/httpdocs/cilie-org 
PHP_PFAD=/esa/prakt-2017 
PHP_DIR=/var/www/vhosts/k8090.web178.dogado.net/httpdocs/cilie-org/esa/prakt-2017 

PHP_FILENAME_OHNE_EXT=auf-7-2017-start 
www_hostname()=http://www.cilie.org 
www_pfad()=                        /esa/prakt-2017 
www_dir()=     http://www.cilie.org/esa/prakt-2017 

www_url()=http://www.cilie.org/esa/prakt-2017/auf-7-2017-start.php

// == substr(www_url(),-strlen(MY_PHP_FILE_EXT))

*/
/*
 //if(!is_dir($file) and $file != "." and $file != "..") { 
 $filename = php_dir().'/'.php_filename_ohne_ext().'.php';
 echo "$filename wurde zuletzt modifiziert:: " . date ("Y|m|d|H|i|s", filemtime($filename));
//$s .= sprintf("%.20s %.9d %s %.9ds <br>", $file, filesize($file), date("Y|m|d|H|i|s)", filemtime($file)), substr(decoct(fileperms($file)),-4) ); } 
*/
/*
$MY_DEBUG_TEXT = '';
function MY_DEBUG( $err_text, $flag=0 ) { global $MY_DEBUG_TEXT; $br = "<br />";
 if(MY_TEST_PHASE_IST_AKTIV){ //if($err_text == 'show') { echo $MY_DEBUG_TEXT.$br;}  else
   if($flag == 0) { $MY_DEBUG_TEXT .= '*** '.$err_text.$br; }
 }
}


$debug_info_str = '*** ';

function debug_infos($v=null, $flag=0, $typ=1) { 
global $br, $debug_info_str, $my_globals; 
if(MY_TEST_PHASE_IST_AKTIV == false){ return; }
if(!isset($v)) { echo '<pre class="debug_infos">'.$debug_info_str.'</pre>';}
if($flag == 0) { 
if (is_int($v)) { $debug_info_str .= "$br*** ". ($typ ? '(int)'.$v : $v);
} else if (is_float($v)) { $debug_info_str .= "$br*** ". ($typ ? '(float)'.round($v, 4) : round($v, 4));
} else if (is_string($v)) {$debug_info_str .= "$br*** ". ($typ ? '(string)"'.$v.'"' : '"'.$v.'"');
} else if (is_bool($v)) {$v = ($v ? 'true' : 'false'); $debug_info_str .= "$br*** ". ($typ ? '(bool)'.$v : $v);
} else if (is_array($v)) {$r = ($typ ? '(array)(' : '('); $c = '';
  foreach ($v as $key=>$val) { if ($c !== '') {$c .= ', '; }
    $c .= debug_infos($key, $flag,$typ) . ' => ' . debug_infos($val,$flag, $typ);} $r .= $c . ')'; $debug_info_str .= "$br*** ". $r;
} else if (is_object($v)) { $debug_info_str .= "$br*** ". ($typ ? '(object)'.get_class($v) : get_class($v));
} else if (is_resource($v)) { $debug_info_str .= "$br*** ". '(resource)';
} else if (is_null($v)) {$debug_info_str .= "$br*** ". 'NULL';
} else { $debug_info_str .= "$br*** ". '('.gettype($v).')?'; }
}
}
*/