Kolaborative Web-Unterstützung "Self-made-Projekt"

Das "Self-made-Projekt" soll die kollaborative Zusammenarbeit ( ohne Ort- und Zeit-Bindungen ) von mehrerer Personen oder Gruppen unterstützten. So kann z.B. eine App mit dem Namen "Transparente Umfragen" als "innovativer Web-Online-Dienst" entwickelt und getestet werdem.


Was ist gemeint? Einführendes

Der zu entwickelnde Web-Online-Dienst soll zahlreiche und recht unterschiedliche Aufgaben ohne wesentliche Änderungen übernehmen können.

Einige Beispiele in Frageform: Wie können weltweite Umfragen effektiv durchgeführt werden? Wie kann das Verabreden von Terminen und Treffen ( Ort, Zeit ) von mehreren Personen geeignet unterstützt werden? Wie können Online-Multiple-Choice-Fragen von einem weltweiten Team gemeinsam und schnell erstellt werden? Wie kann das zu entwickelnde Toolchen als Online-Terminplaner zur weltweiten Koordination von Terminen eingesetzt werden? Wie können die Zwischenzustände der Resultate transparent dargestellt werden? Und weitere ...

Hinweise gibt es in der Veranstaltung.

Sicherheiten Was soll enthalten sein?

Diese Client-Server-App soll AJAX, JSON und PHP verwenden. Das clientseitige Formular soll clientseitig geprüft werden. Serverseitig mit Client-Server-Verknüpfungen ( White-List ) die Sicherheit erhöht werden. Eine serverseitige Speicherung der eingegangenen Daten soll hinsichtlich der max. Dateigröße und der max. Anzahl von Dateien im Serververzeichnis abgesichert werden.

PHP-Hinweise ( Allgemeines ) nützlich?

scandir(__DIR__) liefert Array mit den Dateinamen im aktuellen Verzeichnis. Teste mit print_r( scandir(__DIR__) )

pathinfo(__FILE__) liefert Array mit ["dirname"] für File, ["basename"] für aktuellen php-namen ["extension"] als "php" und ["filename"] Name ohne .php Teste mit print_r( pathinfo(__FILE__) )

Beispiele

$use = pathinfo(__FILE__);  $use["dirname"] .= '/';

exit( var_dump($use)); // liefert
// ["dirname"]=>   string(23) "/home/mykenng/public_html/"
// ["basename"]=>  string(11) "umfrage.php"
// ["extension"]=> string(3)  "php"
// ["filename"]=>  string(7)  "umfrage"
PHP-Hinweise für proteus ( 2014 ) nützlich?

Es geht um Hinweise, die speziell PHP bei proteus ( 2014 ) betreffen. 2014 proteus PHP hat z.T. alte "Setzungen". Es kommen z.B. in $_POST die Strings zusätzlich mit "slash-maskiert" beim Server an. Abhilfe wie, wenn eine PHP-Admin-Aktualisierungen von proteus seine Tücken hat und Zeit braucht? Magic quotes have been dead for some time, and have been removed in PHP 5.4 aber proteus PHP liefert 2014 z.B.

function_exists("get_magic_quotes_gpc") = 1
get_magic_quotes_gpc()                  = 1
ini_get("magic_quotes_sybase")          =

Leider sind auch obsolet und/oder nicht möglich:
@ini_set( 'magic_quotes_runtime',0 );
@ini_set( 'magic_quotes_sybase', 0 );

Empfehlung: Denkbar ist die Vewendung von $_POST = array_map( 'stripslashes', $_POST );
Ohne $_POST = array_map( 'stripslashes', $_POST ) kommt an:
{\"elslen\":1,\"els\":[{\"name\":\"TA0\",\"min_char\":32,\"max_char\":9999,\"crypt\":0,\"val\":\"Vorname: \\n( ) Kann ...

Mit    $_POST = array_map( 'stripslashes', $_POST ) kommt an:
{"elslen":1,"els":[{"name":"TA0","min_char":32,"max_char":9999,"crypt":0,"val":"Vorname: \n( ) Kann am ...

In dieser PHP-proteus-Installation fehlen z.B. die Funktionen mb_check_encoding und mb_convert_encoding. Bei der aktuellen Proteus-Installation ( 2014 ) gibt es die verfügbaren PHP-Funktionen, erhalten mit print_r(get_defined_functions()):

Wie fange ich an? ( clientseitig, serverseitig ) Beispiele

Hinweise gibt es in der Veranstaltung.

Hier ein unvollständiges Lehrbeispiel ( umfrage.htm ), das trotz der Codierungsfehler zum besseren Verständnis führen kann.

Wie sieht ein stark verbesserungsbedürftige PHP-Datei aus, die auf ein AJAX-Request's reagiert? Siehe z.B.

Wie kann der php-Quelltext angezeigt werden?

<?php 
if(isset($_GET['KENNUNG']) && $_GET['KENNUNG'] == 'hg54') { highlight_file(__FILE__); exit;}
...
?>

Wie kann mit Proteus $CONTENT-String gespeichert werden?

<?php 
//ini_set('display_errors',0); error_reporting(0); 
ini_set('display_errors',1); error_reporting(E_ALL | E_STRICT); 
ini_set('default_charset', 'utf-8');
date_default_timezone_set('Europe/Berlin');

function deb_exit( $debug_hinweis = "leerer String", $debug_on = 1) { 
if($debug_on == 0){ exit;
} else{ $str = "*** debug_hinweis:\n".$debug_hinweis;
  $str = str_replace(array(" ","\n"),array("&nbsp;","<br \/><br \/>"),$str);
  exit($str);}
}

$fil_size_max = 100000;
$anzeigen = 1; // $anzeigen != 0 meint Daten lesen; 
$anzeigen = 0; // 0 = Daten speichern; sonst = Daten lesen; 

$FIL_NAME_APPEND = "/home/hg54/public_html/umfrage-TEST";
$cmod_stop = 0600;
$cmod_self = 0664; 
$cmod_data = 0660;


$DATUM = date('Y-m-d H:i:s',time())."\n";
$TRENNSTRIMG_DER_UPLOAD_ITEMS = "\n~~~oO0Oo~~~\n" . $DATUM;

$CONTENT = "TESTDATEN ... äöü";  
$CONTENT = $TRENNSTRIMG_DER_UPLOAD_ITEMS.$CONTENT;


if (@file_exists($FIL_NAME_APPEND)) { //ist $filesize == 0 ?
  $f_size = @filesize($FIL_NAME_APPEND);
} else { 
  $f_size = 0; 
}

if($anzeigen == 0) { // Speichern: begrenze File-Size auf $fil_size_max
  if ($f_size == 0) { $CONTENT = "\xef\xbb\xbf".$CONTENT; }
  if(($f_size+strlen($CONTENT)) > $fil_size_max) { deb_exit('ERR:fil-2'); }
  if (@file_put_contents($FIL_NAME_APPEND,$CONTENT,FILE_APPEND) === false) {
    @chmod(__FILE__,$cmod_stop);deb_exit('ERR:fil-3');
  } 
  @chmod($FIL_NAME_APPEND,$cmod_data);
  @chmod(__FILE__,$cmod_self);
  deb_exit("FIL_NAME_APPEND=".$FIL_NAME_APPEND."\nCONTENT=".$CONTENT);
}  

if($anzeigen != 0) { // alle Daten lesen
  $CONTENT = file_get_contents ($FIL_NAME_APPEND, false, NULL, 3, $fil_size_max); 
  if($f_size > 20 && $CONTENT === false) { 
    @chmod(__FILE__, $cmod_stop);
    @chmod($FIL_NAME_APPEND,$cmod_stop);
    deb_exit('ERR:fil-1');
  } else { deb_exit($CONTENT); }
} 
deb_exit("Ende erreicht");
?>

Plagiate sind out!
Viel Freude bei der Ausarbeitung!
Letzter Abgabetermine So 12.00 Uhr