Projekt-Kurzfassung: Es gibt zahlreiche IT-Web-Anwendungsbereiche, die zur Schnittstelle von "global" und "regional" gehören. Bei diesem Projekt geht es um die Schnittstelle von "global (Server )" und "regional ( Client )". Zu "global" können "weltweit-allumfassende-allgegenwärtige" Komponenten und Bezüge gehören. Zu "regionalen" Aufgaben und Gegebenheiten ( wie Kultur, Bildung, Technologien, usw. ) können konkrete lokale Erfordernisse ( Kleinbetriebe, Mittelstand, regionale Besonderheiten, usw. ) gehören.
Die eigene Idee soll in möglichst einfacher, robuster Weise als Projekt realisiert werden ( Plagiate sind out ). Hierbei seien user-zentrierte Anwendungsbezüge und Erwartungen vorrangig. Dieses "self-made"-Projekt kann/soll auf der "Basics-Ebene" vielfältige Bezüge aufzeigen und kann/soll als einfache, robuste, praxisbezogen App realisiert werden und regionale Anwendbarkeit erlangen.
Es soll die "beste" Client-Server-Ideen ( realisierungsnah ) ausgedacht werden. Verwendet werden sollen
Hinweise in der Veranstaltung.
Nachfolgend kommen einige unstrukturierte Anregungen zur Projektfindung. Es soll die "beste" Clien-Server-Ideen ( realisierungsnah ) ausgedacht werden. Die eigene Idee ( Plagiate sind out ) soll in möglichst einfacher, robuster Weise als Projekt realisiert werden. Hierbei seien Anwendungsbezüge und user-zentrierte Sichtweisen vorrangig. Beispiele:
Portfolios können die online/offline Sammlung von Arbeitsergebnissen unterstützen Portfolios können die online/offline Sammlung von Anmerkungen (z.B. von Tutoren, Lernenden, Lehrenden) unterstützen Portfolios können Feedback-Möglichkeiten unterstützen Portfolios können kleine Info- und Web-Sammlungen unterstützen Portfolios können persönliche Reflexionen der gesammelten Dokumente ( ggf. Peer-Reviews ) unterstützen Einfache, userzentriere Web-Portfolios können ohne Cloude und ohne DB auskommen
Zur Realisierung der Projekt-Idee soll die Systemsicherheit ( gerätetechnisch ) und Informationssicherheit ( rechtlich, Vermeidung von wirtschaftlichen Risiken/Schäden, Schutz vor Gefahren/Bedrohungen ) beachtet werden. Begrifflich etwa: Was ist geheim (secret), vertraulich (confidential), intern (internal), öffentlich (public) bei diesem Projekt? Siehe z.B. bei de.wikipedia Informationssicherheit , Vertraulichkeit (Confidentiality), Authentifizierung (Authentication), Integrität (Integrity), Verbindlichkeit (Verläßlichkeit, fairer und korrekter Umgang miteinander,Quality of Service, Commitment) und Identität (Identity).
Es geht clientseitig um ECMAScript-Seite(n)-Programmierung mit Formvalidierung, JSON, Verschlüsselung über JSON-Form-Obj, localStorage, AJAX und
Es geht serverseitig um PHP-Seite(n)-Programmierung mit Formvalidierung, JSON und Server-File(s) für Speicherung der verschlüsselten Daten und Responnse-Generierung bei AJAX-Anfragen.
Es wird lediglich mit einem Formular in einer HTML5-Seite gearbeitet. Skizzierte Entwicklungsschritte und Vorgehen grob in Stichworten:
function out1() { // zeige einen Unicode-String clientseitig an $utf8_str = "\n\nout1() vom Server\nABC\näöü\nÄÖÜß\n➊➋➌"; echo $utf8_str; }Werden die benötigten PHP-String/Werte im Sinne einer Selbstauskunft von PHP über diese PHP-Datei und dieses aktuelle Dir richtig angezeigt?
function out2() { $s ="\n\nout2() vom Server\nKONSTANTEN"; $s .="\nFILE_SIZE_MAX =".FILE_SIZE_MAX; $s .="\nFILE_CMOD =".FILE_CMOD; $s .="\nMAX_ANZ_FILES_IN_DIR =".MAX_ANZ_FILES_IN_DIR; $s .="\n\nWEB-INFOS"; $s .="\nget_php_web_url() =".get_php_web_url(); $s .="\nget_php_web_dir_name() =".get_php_web_dir_name(); $s .="\n\nSERVER-INFOS"; $s .="\nget_php_file_dir() =".get_php_file_dir(); $s .="\nget_anz_files_in_dir() =".get_anz_files_in_dir(); $s .="\nget_php_file_name() =".get_php_file_name(); $s .="\nget_php_file_name_ohne_ext()=".get_php_file_name_ohne_ext(); echo $s; }
Siehe AJAX from Scratch ( Vergleich zwischen Formular und AJAX ) und ggf. ergänzend Lade HTML-Fragment mit AJAX
AJAX-Response ( Callback-Funktion ). Was meint synchron / asynchron ? Der Begriff "asynchrone Datenübertragung" ( zeichenweise asynchron ) darf nicht mit der Asynchrone Kommunikation verwechselt werden ( Abfolge von Anfrage/Antwort beim Übertragungsprotokoll ). Welche Vorteile haben also asynchrone Callback-Funktion gegenüber synchronen?
Zu AJAX gehört das ECMAScript-Objekt new XMLHttpRequest(), dessen Nutzung etwa wie folgt ist:
var xhr; try {xhr = new XMLHttpRequest();} catch (try_ms) { try {xhr = new ActiveXObject("Msxml2.XMLHTTP");} catch (try_ms_old) { try {xhr = new ActiveXObject("Microsoft.XMLHTTP");} catch (failed) { xhr = false; }}} } if (!xhr) { alert("Senden unmöglich\nKein Internet/XMLHttpRequest"); return; } xhr.open("POST", "my.php", true); // AJAX-post-submit xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); var str = 'KEY1=' + MYSTR1 + '&JSONkey=' + JSON.stringify(obj); xhr.send(str); xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { // lediglich zum 1. Testen alert(xhr.responseText); // oder that.form.LOCATION.value = xhr.responseText; //was dann? if (o.post_reset) {that.form.reset(); } //was dann? if (o.post_htm) { bib.url_to_frame(o.frame_name, obj.urlpost); } }
Wurden der var str = 'KEY1='+MYSTR1 + '&JSONkey='+JSON.stringify(obj); mit xhr.send(str) an my.php gesendet, so wird bei einer php-Antwort ( echo-Ausgabe ) die Browser-Callback-Funktion xhr.onreadystatechange = function () {...) aufgerufen. Der Antwort-String beifndet sich in xhr.responseText
Hinweise in der Veranstaltung.
Was ist ein String? Systeme haben system-angepaßte nativ-Stringdarstellungen. Ein ECMAScript-String ( Quelltext ) ist nicht identisch zu einem PHP-String. PHP-Strings sind verschieden von ECMAScript-Strings. Beispiele:
Ein ' ' - PHP - String wird nicht geparst. Z.B. entspricht ein PHP-String ' $fn \n' dem ECMAScript-String ' $fn \\n' und dem ECMAScript-String " $fn \\n" Ein " " - PHP - String wird geparst. Z.B. wird bei " $fn \n" die PHP-Variable $fn eingesetzt eingesetzt und aus \n wird ASCI 10. PHP | ECMAScript -----------------------------|------------------------------ $str1 = 'abc'; | var str1 = 'abc'; | $str2 .= 'UVW' . "XYZ"; | var str2 += 'UVW' + "XYZ"; | $arr = array("a","b","c"); | var arr = ["a","b","c"]; | $str = implode("-", $arr); | var str = implode("-", arr); PHP-Arrays | ECMAScript-Objekte -----------------------------|------------------------------ $früchte = array ( | var fruechte = { "obst" => array( | "obst" : { "b" => "Birne", | "b" : "Birne", "c" => "Apfel") | "c" : "Apfel"} ); | };
Weblinks:
Einführung bei php.net in das Arbeiten mit
PHP-Strings
,
www.w3schools
PHP-Strings
,
PHP-String-Funktionen
Es gibt Entwicklungsumgebungen, die auch das Debuggen von PHP-Quelltexten ermöglichen. Einfache Möglichkeiten bietet PHP, wie z.B.
scandir(__DIR__) liefert Array mit den Dateinamen im aktuellen Verzeichnis. Teste mit print_r( scandir(__DIR__) )
date('Y-m-d H:i:s',time())
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__) )
Achtung! PHP-Keywords, Classes, Functions und user-definierte Functions sind NICHT case-sensitive.
PHP-Beispiele
phpInfo(); // zeigt u.a. Installationsinfos an print_r( get_defined_functions() ); // zeigt u.a. die verfügbaren Funktionsnamen an function get_php_url() { $temp = 'http'.(isset($_SERVER['HTTPS'])?'s':'').'://'; return "$temp{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}"; } function get_dir_name() { return dirname(get_php_url()); } function get_anz_files_in_dir() { return count($files = scandir(__DIR__));
Zu Funktionsbibliotheken gehören neben Umfang und Komplexität auch Einsatzbereiche und eine Historie. PHP-Funktionen sind keine ECMAScript-Bibliotheken. Natüröich gibt es Versuche, Bibliotheken in eine andere Sprache zu übertragen.
Kevin van Zonneveld und andere haben zu PHP-Functionen einen equivalenten Code in JavaScript-Code (nach-) geschrieben ( Siehe php.js ( "online functions that are far from perfect" ).
ECMAScript-Funktionen mit PHP nachbilden ( Beipspiele ):
/* Danke! Source siehe http://eqcode.com/wiki/... */ function utf8_ord($ch) { $len = strlen($ch); if($len <= 0) { return false; } $h = ord( $ch{0} ); if ($h <= 0x7F) {return $h;} if ($h < 0xC2) {return false;} if ($h <= 0xDF && $len > 1 ) { return ($h & 0x1F) << 6 | (ord($ch{1}) & 0x3F); } if ($h <= 0xEF && $len > 2 ) {return ($h & 0x0F) << 12 | (ord($ch{1}) & 0x3F) << 6 | (ord($ch{2}) & 0x3F); } if ($h <= 0xF4 && $len>3) {return ($h & 0x0F) << 18 | (ord($ch{1}) & 0x3F) << 12 | (ord($ch{2}) & 0x3F) << 6 | (ord($ch{3}) & 0x3F); } return false; } function utf8_charAt($str, $num) { return mb_substr($str, $num, 1, 'UTF-8'); } function charCodeAt($str, $num) { return utf8_ord(utf8_charAt($str, $num)); } function fromCharCode($num) { if($num<128) {return chr($num);} if($num<2048) {return chr(($num>>6)+192).chr(($num&63)+128);} if($num<65536) {return chr(($num>>12)+224).chr((($num>>6)&63)+128).chr(($num&63)+128);} if($num<2097152) {return chr(($num>>18)+240). chr((($num>>12)&63)+128).chr((($num>>6)&63)+128).chr(($num&63)+128); } return false; } function myhash($s) { $b = 10; if (!$s || strcmp($s, "") == 0) { return 0; } else { $h = 0; $g = 0; for ($i = strlen($s) - 1; $i >= 0; $i -= 1) { $c = charCodeAt($s, $i); $h = (($h << 6) & 0xfffffff) + $c + ($c << 14); if (($g = $h & 0xfe00000) != 0) { $h = ($h ^ ($g >> 21)); } } return $h; } } // Danke! Source von Stephan function decrypt($str, $key) { $c = 0; $i = 0; $key_char = 0;$crypt = ""; for ($i = 0; $i < strlen($str); $i += 1) { $c = charCodeAt($str, $i); $key_char = charCodeAt($key, $i % strlen($key)); if ($c != $key_char) { $c ^= $key_char; } $crypt .= fromCharCode($c); } return $crypt; };
Die Start-Beispiele dienen dem experimentellen Untersuchen, Erfassen und Abstimmen von zahlreichen Aspekten. Die ausgereiften Start-Beispiele sind dann recht universell einsetzbar und leicht anpassbar. Die Seite auf-7-2015-start.htm sendet mit JSON.stringify(obj). Der Server $arr = json_decode($erhaltenen_JSONstr,true) verwendet das assoziative $arr für weitere Aktionen ( Passworte prüfen, Sicherheitsprüfungen, Speicher/Lesen im/von Daten-File, usw.). Siehe clientseitig auf-7-2015-start.htm und serverseitig auf-7-2015-start
http://www.cilie.org/esa/prakt-2015/auf-7-2015-start.htm http://www.cilie.org/esa/prakt-2015/auf-7-2015-start.php?show_phpSo wie auf den weltweiten Wegen zwischen Clients und Servern unermesslich viele Bitfolgen und Wechselwirkungen sind, so können im pfadlosen Neuland komplexer Unwägbarkeiten Intuition und Fantasie ein humanes Miteinander ermöglichen.
Plagiate sind out!
Viel Freude bei der Ausarbeitung!
Letzter Abgabetermin
So nach Pfingsten 12.00 Uhr