PHP für Fortgeschrittene GDlib MySQL XML http

Werbung
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
Herunterladen