1 PHP für Fortgeschrittene GDlib MySQL XML http-Aufruf Datei Upload Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik PHP auf dem eigenen Rechner installieren 2 Zwei Möglichkeiten (von vielen), PHP zu beschaffen. 1. Mit dem Paket XAMPP. 2. Allein von www.php.net. Installation von PHP mit dem Paket XAMPP. 1. XAMP (XAMPP portabel lite als .zip für Windows) herunterladen von http://www.apachefriends.org/en/xampp.html enthält: Apache 2.4.3, MySQL 5.5.27, PHP 5.4.7, phpMyAdmin 3.5.2.2, FileZilla FTP Server 0.9.41, Tomcat 7.0.30 , Perl 5.16.1.1 Portable, XAMPP Control Panel 3.1.0 (from hackattack142) 2. entpacken 3. fertig 4. Php.exe steht in \xampplite\php\ Installation von PHP von www.php.net. 1. PHP herunterladen von http://windows.php.net/download/ Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik GDlib auf dem eigenen Webserver 3 Arbeiten mit der GDlib • GDlib zum Erzeugen von Grafiken mit PHP • in der php.ini aktivieren: extensions=php_gd2.dll • überprüfen auf Verfügbarkeit mit <?php phpinfo(); ?> • kann png, jpg, gif Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik 4 GDlib Beispiel GDlib - ein einfaches Beispiel <?php // gd_einfach $x=20; if (isset($_GET['x'])) $x=$_GET['x']; $image = imagecreate($x,$x); $farbe_body=imagecolorallocate($image,255,0,0); header("Content-Type: image/jpeg"); imagejpeg($image); ?> Grafik Aufruf in HTML <html><body> Ich bin ein dynamisches Bild:<br> <img src="INC/gd_einfach.php?x=120"> </body</html> Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik 5 GD-Lib nutzen GDlib - Grafik in Datei speichern <?php // gd_einfach2 $x=20; if (isset($_GET['x'])) $x=$_GET['x']; $image = imagecreate($x,$x); $farbe_body=imagecolorallocate($image,255,0,0); header("Content-Type: image/jpeg"); imagejpeg($image,"gd_einfach2.jpg",80); ?> (Achtung, ggf. derzeit Probleme mit aktueller XAMPP Version) Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik PHP Schnellkurs 6 Anwendungsmöglichkeit 1 grafischer Zähler ohne Grafik, aber mit Logging Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik 7 GD-Lib Anwendung GD Lib Anwendungsmöglichkeit 2 Rohbild n löschen Rohbild m, m<n Rohbild n pixelreduziertes Startbild pixelreduziertes Bild „neu“ nein Vergleich aller Pixel Abweichung groß? ja Rohbild n retten, Bild „neu“ wird zum Startbild Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik 8 PHP Schnellkurs Dateioperationen Mit PHP sind viele Operationen im Dateisystem möglich: • copy Datei kopieren • file liest die gesamte Datei in ein Array ein • fopen öffnet eine Datei oder eine URL, fclose schließt • is_dir ermittelt, ob Name ein Verzeichnis ist • readfile liest eine Datei und sendet sie zum Browser • fwrite schreibt Stringvariable in Datei • fread kann Datei in eine Stringvariable lesen • …… Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik 9 Client-Server mit PHP Client-Server-Konzept auch über Dateioperationen möglich Beispiel Erfassungsprogramm cron Job geplante Task Webserver Client- programm Serverprogramm Erfassungsdatei Datenbank Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik 10 Client Server mit PHP Clientprozess <?php //009.php Client $x="Client009"; $y=35; // z.B. Tastatureingabe oder Temperaturmessgerät oder aus lokaler Datei $server= "http://localhost/php/INC/ logger.php?x=$x&y=$y"; $fp = fopen ( $server, 'r' ); $string = fread ( $fp,100); fclose ( $fp ); echo $string; ?> Serverprozess <?php //logger.php if (!isset($x)) $x='keine Angabe'; if (!isset($y)) $y='keine Angabe'; $IP=getenv("REMOTE_ADDR"); $Ausgabe=time().";$IP;$x;$y\r \n"; $fh=fopen("logger.log","a"); fwrite($fh,$Ausgabe); fclose($fh); echo "ok $x $y :)"; ?> Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik 11 MySQL Datenhaltung im relationalen Datenbankmanagementsystem MySQL Webserver Apache Client oder Browser PHP-Modul PHPMyAdmin z.B. SQL direkt server.php z.B. CRUD TCP/IP muss nicht auf gleicher Hardware laufen MySQL ISAM Dateien Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik 12 MySQL CRUD Einfaches Beispiel: Bearbeitung der Produkt-Kundendatenbank Fachkonzept: Bestellung Hauptfunktion CRUD: Bestellung Zeile einfügen 1. Teilfunktion Create Bestellungen ansehen 2. Teilfunktion Read Bestellung ändern 3. Teilfunktion Update Bestellung löschen 4 Teilfunktion Delete MySQL-Verwaltung mit PHPMyAdmin leistet CRUD. Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik MySQL 13 SQL DDL Datenbank anlegen: CREATE DATABASE `bwi50101` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik 14 MySQL SQL DDL Tabelle anlegen: CREATE DATABASE `bwi50101` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE TABLE `bwi50101`.`logger` ( `timestamp` INT, `ip` VARCHAR( 15 ) NOT NULL , `client` VARCHAR( 255 ) NOT NULL , `wert` INT NOT NULL , INDEX ( `timestamp` , `ip` ) ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT = 'LogTabelle'; Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik 15 MySQL SQL DML einfach CRUD INSERT INTO `bwi50101`.`logger` ( `timestamp` , `ip` , `client` , `wert` ) VALUES ( '1334350560', '127.0.0.1', '100001', '4356' ); Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik 16 MySQL SQL DML einfach CRUD SELECT * FROM `logger` SELECT client, wert FROM `logger` WHERE ip = '127.0.0.1' Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik 17 MySQL SQL DML nicht ganz so einfach CRUD SELECT * FROM `client` SELECT timestamp, client, wert, kurzbez, langbez FROM logger JOIN client WHERE logger.client = client.kurzbez and logger.client = '100001' Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik 18 MySQL SQL DML einfach CRUD UPDATE`bwi50101`.`client`SET`langbez`='Dies ist irgend ein Client' WHERE`client`.`kurzbez`='100002'; Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik 19 MySQL SQL DML einfach CRUD Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik 20 MySQL und PHP 1. Verbindung zur Datenbank <?php // db_auf.php // Datenbank öffnen // Claus Brell 1.12.2003, 27.09.2006, 26.10.2012 $mydb=mysql_connect('localhost','root',); // $mydb=mysql_connect('host:port','user','passw'); if (!$mydb) die (">>keine Verbindung zum DBMS"); else if echo ">>DBMS Verbindung ok, handle=".$mydb."\n"; // WARTUNG $dbname='bwi50101'; mysql_select_db($dbname,$mydb) or die (">>keine Verbindung zur Datenbank"); ?> Einbinden mit: include ("INC/db_auf.php"); Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik 21 PHP Schnellkurs MySQL und PHP 2. SQL-Statement ausführen (grundsätzlich) Datenbank öffnen. SQL-Statement formulieren und in String-Variable packen. Zeiger auf Ergebnisliste setzen mit mysql_query(); Im Falle eines Selects alle Ergebniszeilen mit Schleife abfragen. Fehlerbehandlung. Datenbank schließen. Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik 22 MySQL und PHP 3. SQL-Statement ausführen (konkret: Datensätze lesen) CRUD (1) <?php /* 011_db_lesen.php Datenbankzugriff Datensätze lesen */ // Datenbank öffenen include("INC/db_auf.php"); $sql="SELECT * FROM `logger`;" ; // SQL-Statement $result=mysql_query($sql,$mydb); // Ergebnisliste holen if (!$result) echo "FEHLER mysql_query: ".mysql_error($mydb); // Fehlerbehandlung $anzahl=mysql_num_rows($result); echo "Anzahl Zeilen: ".$anzahl."<br>"; Quelltext geht weiter ----> Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik 23 sMySQL und PHP 3. SQL-Statement ausführen (konkret: Datensätze lesen) CRUD (2) // jetzt kommt die eigentliche Abfrage while ($zeile=mysql_fetch_row($result)) $liste[]=$zeile; // schließen mysql_close($mydb); // ausgeben mit Doppelschleife foreach ($liste as $zeile) { foreach ($zeile as $feld) echo "\t".$feld; //(*) echo "<br>"; } ?> (*) Alternativ: echo "<td>".$feld."</td>; Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik 24 MySQL und PHP 4. SQL-Statement ausführen (konkret: Datensatz einfügen) CRUD <?php /* 012_db_einfuegen.php Datenbankzugriff Datensatz einfügen*/ // Datenbank öffnen include("INC/db_auf.php"); $sql=" INSERT INTO logger (`timestamp` ,`ip` ,`client` ,`wert`) VALUES ('1334350590', '127.0.0.1','100003', '69') " ; // SQL-Statement $result=mysql_query($sql,$mydb); // Ergebnisliste holen if (!$result) echo "FEHLER mysql_query: ".mysql_error($mydb); // Fehlerbehandlung // schließen mysql_close($mydb); ?> ( CRUD ähnlich einfach) Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik 25 XML mit SimpleXML Ein Ausschnitt aus einer GPX-Datei (Log Garmin 60Csx, Südtirol, Jaufenpass): <?xml version="1.0" encoding="UTF-8" standalone="no" ?> <gpx xmlns="http://www.topografix.com/GPX/1/1" creator="" version="1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/ GPX/1/1/gpx.xsd"> <trk> <name>ACTIVE LOG103520</name> <trkseg> <trkpt lat="46.838130" lon="11.296021"> <ele>1962.564</ele> <time>2011-08-12T08:35:18Z</time> </trkpt> <trkpt lat="46.838168" lon="11.296002"> <ele>1965.615</ele> <time>2011-08-12T08:35:23Z</time> </trkpt> <trkpt lat="46.838178" lon="11.295977"> <ele>1969.894</ele> Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik 26 XML mit SimpleXML Beispielprogramm: GPX-Log Garmin lesen mit simpleXML: <?PHP /* 012_xml_lesen.php Einlesen einer xml-Datei Ausgabe der Knotenbezeichnungen */ $gpx = simplexml_load_file ('20110812-Wandern-SuedtirolJaufenpass.gpx'); $i=0; foreach($gpx->trk as $trk) foreach($trk->trkseg as $trkseg) foreach($trkseg->trkpt as $trkpt) { echo $i++. ";".$trkpt['lon']. ";".$trkpt['lat']."<br>"; } ?> Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik 27 XML mit SimpleXML Ein Ausschnitt aus einer GPX-Datei (Android-Smartphone, MyTrack): …..Höhenunterschied: 6 m (20 Fuß)Maximales Gefälle: 2 %Minimales Gefälle: -3 %Aufgezeichnet: 28.10.2012 11:04]]> </desc> </wpt> <trk> <name><![CDATA[28.10.2012 10:04 Run]]></name> <desc><![CDATA[]]></desc> <extensions><topografix:color>c0c0c0</topografix:color></extensions> <trkseg> <trkpt lat="51.293054" lon="6.523564"> <ele>114.4</ele> <time>2012-10-28T09:04:34.569Z</time ></trkpt> <trkpt lat="51.293054" lon="6.523564"><ele>82.2</ele>…… Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik 28 Datei hochladen Datei zum Hochladen auswählen: Im Formular: Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik Datei hochladen 29 Prof. Dr. rer. nat. Claus Brell, http://claus-brell.de, [email protected], Wirtschaftsinformatik, Statistik