PHP Grundlagen
PHP ist eine Serverseitige Interpreter Sprache, im Gegensatz zu HTML oder JavaScript übermittelt PHP den Quelltext nicht direkt an den Browser, sondern lässt ihn erst vom Interpreter des Webservers ausführen.
Die Ausgabe des Scriptes wird dann meistens als HTML Seite an den Client (Browser) übergeben. Es ist aber auch möglich andere Datentypen wie z.B. PDF Dateien zu generieren. Der PHP Quelltext bleibt auf dem Server, nur der generierte Code ist für den Besucher einsehbar. PHP kann Formulare auswerten und funktioniert mit verschiedenen Datenbanksystemen wie z.B. Postgresql, Mariadb und MySQL.
<?php [Anweisung(en)] .... ?>
PHP Serverinformation abrufen
phpinfo
Gibt Informationen über die aktuelle PHP Konfiguration, wie Server Informationen, PHP Version, Extensions, Pfade, Module als HTML Datei im CLI-Modus als reinen Text aus.
Syntax:
- phpinfo([optionen]);
Optionen:
Name | Wert | Beschreibung |
---|---|---|
INFO_GENERAL | 1 | Pfad zur php.ini, das Übersetzungsdatum, Infos zum Webserver, Infos zum System. |
INFO_CREDITS | 2 | Infos über PHP Entwickler. Siehe phpcredits(). |
INFO_CONFIGURATION | 4 | Lokaler und Master-Wert der PHP-Direktiven. Siehe ini_get(). |
INFO_MODULES | 8 | Infos über geladenene Module und deren Einstellungen. Siehe get_loaded_extensions(). |
INFO_ENVIRONMENT | 16 | Infos über Umgebungsvariablen. Siehe $_ENV. |
INFO_VARIABLES | 32 | Zeigt vordefinierten Variablen (Environment, GET, POST, Cookie, Server). |
INFO_LICENSE | 64 | Lizenz-Infos. |
INFO_ALL | -1 | Zeigt alle Informationen. |
<?php phpinfo(); // Zeigt alle Informationen. phpcredits(); // Zeigt PHP Entwicklerinfos. php_logo_guid(); // Gibt GUID des PHP-Logos aus. ini_get(); // Einzelne Konfigurationsoptionen der php.ini ausgeben. ini_set(); // Kann zur Laufzeit eine Konfigurationseinstellung verändern. get_loaded_extensions(); // Gibt ein Array mit den Namen aller einkompilierten und geladenen Extensions aus. ?>
Beispiele:
Lizenz Informationen ausgeben.
<?php phpinfo(INFO_LICENSE); ?>
Ausgabe im Browser:
SMTP Konfiguration anzeigen.
<?php echo "SMTP-SERVER: " . ini_get("SMTP") . "<br />"; echo "Port: " . ini_get("smtp_port"); ?>
Ausgabe im Browser:
Dieses Script prüft, ob GD-Libraries installiert sind.
<?php if(extension_loaded("gd")) { echo "GD-Bibliothek aktiviert<br />"; $gd = gd_info(); echo "Version: " . $gd["GD Version"] . "<br />"; echo "Grafikformate: "; if ($gd["JPG Support"]) echo "JPG"; if ($gd["PNG Support"]) echo "PNG"; } else { echo "GD-Bibliothek nicht aktiviert!"; } ?>
Kommentare
<?php echo "Ausgabe 1"; // Einzeiliger Kommentar /** * Mehrzeiliger * Kommentar im * php Dokument */ echo "Ausgabe 2"; /* Code Blöcke auskommentieren echo "Ausgabe 1"; echo "Ausgabe 2"; */ ?>
Ausgabeoptionen
echo
<?php // Ausgabe via Echo Befehl/Anweisung echo 'Ausgabe via Echo Befehl!<br />'; echo "Ausgabe via Echo Befehl (in doppelten Anführungszeichen)!<br />"; ?>
<?php // Ausgabe via Prozedur (Methode/Funktion) echo ('Ausgabe via Echo Methode!<br />'); echo ("Ausgabe via Echo Methode (in doppelten Anführungszeichen)!<br />"); ?>
<?php // Ausgabeformatierung via Html (Schriftart Arial und Größe 6) echo '<font size="6" face="Arial">Ausgabe via HTML Formatiert</font><br />'; echo "<font size='6' face='Arial'>Ausgabe via HTML Formatiert</font><br />"; ?>
<?php $anrede = 'Herr'; $vorname = 'Gnome'; $nachname = 'Linux'; echo 'Herzlich Willkommen, $anrede $vorname $nachname<br />'; // Hier werden nur die Variablennamen ausgegeben echo "Herzlich Willkommen, $anrede $vorname $nachname<br />"; echo 'Herzlich Willkommen, '. $anrede . ' ' . $vorname . ' ' . $nachname .'<br />'; echo "<font size='6' face='Arial'>Herzlich Willkommen, $anrede $vorname $nachname</font><br />"; echo '<font size="6" face="Arial">Herzlich Willkommen, '. $anrede . ' ' . $vorname . ' ' . $nachname .'</font><br />'; ?>
<?php $preis = 100; $mwst = 1.19; echo 'Betrag inkl Mwst.: $preis * $mwst<br />'; // Hier werden die Variablennamen ausgegeben echo "Betrag inkl. Mwst.: $preis * $mwst<br />"; echo "Betrag inkl. Mwst.: ($preis * $mwst)<br />"; echo 'Betrag inkl Mwst.: <font color="red">' .$preis * $mwst. '</font><br />'; echo "Betrag inkl Mwst.: <font color='red'>" .$preis * $mwst. "</font><br />"; ?>
<?php // Mit vorangestellten \ kann man ein nachfolgendes Zeichen entwerten echo "Zitat: \"Wer nicht wagt der nicht Gewinnt!\"."; echo "Hier ein Backslash \."; ?>
<?php // Ausgabe via Print Befehl print 'Ausgabe via Print Befehl!<br />'; print "Ausgabe via Print Befehl (in doppelten Anführungszeichen)!<br />"; ?>
<?php // Ausgabe via Prozedur (Methode/Funktion) print ('Ausgabe via Print Methode!<br />'); print ("Ausgabe via Print Methode (in doppelten Anführungszeichen)!<br />"); ?>
Ausgabeblock
<?php $anrede = 'Herr'; $vorname = 'Gnome'; $nachname = 'Linux'; $betrag = $preis * $mwst; echo <<<Ausgabeabschnitt Herzlich Willkommen, $anrede $vorname $nachname <br /> Betrag inkl. Mwst.: <font color="red">$ $betrag</font> <br /> Ausgabeabschnitt; ?>
Variablen, Datentypen, Operatoren
Variablen
In PHP findet keine Variablendeklaration statt. Variablen können sofort verwendet werden.
- Werden mit einem $ (Skalar) eingeleitet (initialisiert).
- Darf keine Leerzeichen enthalten.
- Keine Umlaute erlaubt.
- Keine Sonderzeichen außer Unterstrich.
- Darf nur aus Zahlen und Buchstaben bestehen, erstes Zeichen muss ein Buchstabe sein.
- Case sensitive.
- Keine von PHP reservierten Wörter.
Syntax:
- $variablenbezeichnung = Variablenwert;
Lokale und Globale Variablen
Die Verarbeitung der Lokalen und Globalen Variablen.
<?php // Globale Variablen $spruch = 'Be inspired!'; $spruch2 = 'Have fun!'; // Den Globalen Variablen Bereich auswerten bzw. analysieren kann // man in PHP mit Hilfe der Methode var_dump(). Diese Methode entspricht // von der Funktions- bzw. Arbeitsweise einer Analyse-Funktion. var_dump($GLOBALS); echo '<hr>'; echo $GLOBALS [spruch]; echo '<hr>'; function setzespruch() { $spruch = 'Wer nicht wagt der nicht gewinnt!'; echo $spruch; echo '<hr>'; echo 'Spruch: ' . $GLOBALS [spruch]; echo '<hr>'; // Zugriff auf die Variablen via Schlüsselwort global global $spruch; echo 'Spruch aus dem globalen Bereich: '. $spruch; } setzespruch(); echo '<hr>'; echo 'Welcher Spruch erscheint? ' . $spruch; ?>
Datentypen
PHP unterstützt folgende Datentypen:
- ganze Zahlen.
- Zahlen mit Kommastellen.
- Strings (Zeichenketten).
- Arrays (Listen).
- Objekte.
Zeichenketten (Strings)
<?php ... $summe = "<p>Einkauf: " . $menge . " " . $artikel1; $summe .= " Preis " . $zuzahlen . " " $artikel2 . "</p>"; ... ?>
BEISPIELE FÜR DIE UMWANDLUNG VON ZEICHENKETTEN
Zeichenkette | Wert | Datentyp |
„352“ | 352 | ganze Zahl |
„352xz“ | 352 | ganze Zahl |
„xz352“ | 0 | Zeichenkette |
„35.2“ | 35.2 | Zahl mit Nachkommastellen |
„35.2xz“ | 35.2 | Zahl mit Nachkommastellen |
„xz35.2“ | 0 | Zeichenkette |
„-352“ | -352 | ganze Zahl |
„35e2“ | 3500 | Zahl mit (möglichen) Nachkommastellen |
„35e-2“ | 0.35 | Zahl mit Nachkommastellen |
Eine Zeichenkette wird interpretiert, wenn sie nur Ziffern oder Zahlen mit Nachkommastellen hat, oder wenn neben den Zahlen ., e oder E gesetzt wird.
Mit der Funktion intval(); für ganze Zahlen und doubleval(); für Zahlen mit möglichen Nachkommastellen können Zeichenketten Variablen in Zahlen umgewandelt werden.
Beispiel:
<?php $wert1 = "456"; $wert2 = "76.9"; $wert1 = intval($wert1); $wert2 = doubleval($wert2); ?>
Arrays (Listen)
Numerisch indizierte Arrays
Die Elemente werden automatisch nummeriert und beginnt bei Index [0].
Assoziative Arrays
Operatoren
Rangordnung von Operatoren (von oben nach unten):
Operator | Bedeutung |
() | Klammern |
!- | Logisches NICHT, negatives Vorzeichen |
+ / % | Multiplikation, Division, Modulo-Operation |
+ - | Addition, Subtraktion |
< <= > >= | kleiner, kleiner oder gleich, größer, größer oder gleich |
== | Gleich |
!= | Ungleich |
&& | Logisches UND |
|| | Logisches ODER |
xor | Exclusives Oder |
= | Zuweisung |
Logische Operatoren
Logische Operatoren verbinden mehrere Bedingungen und vergleichen mit booleschen werten (true, false). Als Ergebnis wird dann ein boolscher Wert zurückgegeben.
Logisches ODER
Der Operator || ergibt true, wenn der erste, der zweite oder beide Operanden wahr sind.
... if($_POST['status'] == 10 || $_POST['status'] == 20) ...
Logisches ODER ||, wird benötigt falls nur eine der Bedingungen zutreffen soll.
Wahrheitstabelle für den logischen Operator ||:
Operand 1 | Operand 2 | Ergebnis || |
---|---|---|
true | false | true |
false | true | true |
true | true | true |
false | false | false |
Logisches UND
Der Operator && ergibt nur dann true, wenn der erste und der zweite Operator true ist.
... if($_POST['name'] == 'hans' && $_POST['pass'] == '1234') ...
Logisches UND && wird benötigt, falls alle Bedingungen zutreffen sollen.
Logisches Entweder-Oder
Der Operator xor ergibt dann true, wenn nur genau einer der beiden Operanden wahr ist.
if (($_POST[zahl] == 10) xor ($_POST[zahl] == 20) xor ($_POST[zahl] == 30)) { ....; }
Logisches entweder-oder xor wird benötigt, falls nur eine der Bedingungen zutreffen soll.
Wahrheitstabelle für den logischen Operator xor:
Operand 1 | Operand 2 | Ergebnis xor |
---|---|---|
true | false | true |
false | true | true |
true | true | false |
false | false | false |
Logisches NICHT
Mit dem logischen NICHT ! (unärer) Operator, wird der Wahrheitswert von Bedingungen umgekehrt.
$wert = true; $ergebnis =! $wert; // $ergebnis ergibt false.
Den boolschen Wert eines Operanden umkehren.
Rechenoperatoren in PHP
+ | Additon |
- | Subtraktion |
* | Multiplikation |
/ | Division |
% | Modulo (Rest) |
Beispiele:
<?php ... $Oregano = 5; $Tymian = 10; $Rosmarin = 13; $Rosmarin += 2; // neuer Wert Rosmarin = 15 $Salbei = 22; $Salbei -= 2; // neuer Wert Salbei 20 ... ?>
<?php /** * Variablen fuer Zahlen Multiplikation */ echo "Multiplikation mit PHP<br />"; $menge = 66; $preis = 3.33; $summe = $menge * $preis; // Ausgabe echo $summe; echo "<br />Multiplikation mit Exponentialzahlen<br />"; $menge = 66; $preis = 0.333e1; // oder $preis = 333e-2; $summe = $menge * $preis; // Ausgabe echo $summe; ?>
Berechnung der Exponentialzahlen
0.333e1 ⇒ 0.333 * 101 = 0.333 * 10 = 3.33
333e-2 ⇒ 333 *10-2 = 333 * 0.01 = 3.33
Vergleichsoperatoren
Operator | Bedeutung | Gilt……… |
== | gleich | …für Zahlen und Zeichenketten |
!= | ungleich | …für Zahlen und Zeichenketten |
> | größer als | …nur für Zahlen |
< | kleiner als | …nur für Zahlen |
>= | größer als oder gleich | …nur für Zahlen |
<= | kleiner oder gleich | …nur für Zahlen |
Fallunterscheidungen (Verzweigungen)
Ob Anweisungen ausgeführt werden sollen, hängt von einer oder mehrerer Bedingungen ab. Bedingungen werden durch Wahrheitswerte von Vergleichsoperatoren ausgewertet (Tabelle Vergleichsoperatoren). Die Bedingung(en) steht oder stehen dabei in Klammern und können mit logischen Operatoren miteinander Verknüpft werden. Die Anweisungen werden dabei in geschweiften Klammern eingeschlossen (Anweisungsblock). Eine einzelne Anweisung benötigt nicht unbedingt geschweifte Klammern.
if / if-else / elseif
Beispiel einer einfachen if Anweisung:
<?php /** * Einfache if Anweisung */ $anzahl = 49; if ($anzahl < 50) { echo 'Die Anzahl des Produkts untersteigt 50 Stück!<br />'; echo 'Bitte Produkt nachbestellen!'; } ?>
Beispiel einer einfachen if-else Anweisung:
<?php /** * Einfache if-else Anweisung */ $anzahl = 67; if ($anzahl < 50) { echo "Die Anzahl des Produkts untersteigt 50 Stück!<br />"; echo "Bitte Produkt nachbestellen!"; } else { echo "Von Produkt sind noch $anzahl Stück vorhanden.<br />"; echo "Die Menge ist in Ordnung."; } ?>
Vergleich von Zeichenketten:
<html> <body> <p>Bitte tragen Sie Benutzername und Passwort ein.</p> <form action="pfad zur php datei" method="post"> <p>name: <input type="text" name="name" value="" id="name" /> passwort: <input type="password" name="pass" value="" id="pass" /></p> <input type="submit" value="Senden" /> <input type="reset" value="Zurücksetzen" /> </form> </body> </html>
<?php /** * Auswertung der Anweisung */ if($_POST['name'] == 'Heidi' && $_POST['pass'] == 'admin') { echo '<font size="14">Hallo Heidi.....</font><br />'; echo '<a href="pfad">Logout</a>'; } else { echo '<font size="14" color="ff0000">Access Denied!</font><br />'; echo '<a href="pfad">Zurück</a>'; } ?>
Anweisungen lassen sich in sich verschachteln, dass mehrfache Verzweigungen möglich sind:
<?php /** * Verschachtelte Anweisung */ $anzahl = 67; if ($anzahl >= 100) { echo "Von Produkt sind 100 oder mehr Stück vorhanden.<br />"; echo "Diese Menge ist in Ordnung!"; } else { if($anzahl >= 50) { echo "Von Produkt sind 50 oder mehr Stück vorhanden.<br />"; echo "Produkt langsam nachbestellen!"; } else { echo "Von Produkt sind weniger als 50 Stück vorhanden.<br />"; echo "Produkt sofort nachbestellen!"; } } ?>
elseif ist eine Mischung aus if und else. Ist der Operator der ersten if Anweisung falsch wird nicht else, sondern elseif zuerst ausgeführt.
<?php /** * elseif */ $anzahl = 67; if ($anzahl >= 100) { echo "Von Produkt sind 100 oder mehr Stück vorhanden.<br />"; echo "Diese Menge ist in Ordnung!"; } elseif($anzahl >= 50) { echo "Von Produkt sind 50 oder mehr Stück vorhanden.<br />"; echo "Produkt langsam nachbestellen!"; } else { echo "Von Produkt sind weniger als 50 Stück vorhanden.<br />"; echo "Produkt sofort nachbestellen!"; } ?>
switch()
Switch-case ist eine alternative Schreibweise zu if-else. Eine switch() Anweisung wird von oben nach unten durchlaufen. Wenn ein Case (Fall) zutrifft, wird der Code innerhalb der geschweiften Klammern ausgeführt. Der Befehl break stoppt den Durchlauf, falls ein Case zutrifft. Die Anweisungen nach break werden nicht mehr ausgeführt. Ohne break werden alle Case's ausgeführt. Trifft kein Case zu, wird der default Case ausgeführt.
Beispiele:
<?php switch($name) { case 'Thomas': echo 'Hallo Thomas'; break; case 'Christoph': echo 'Hallo Christoph'; break; case 'Inka': echo 'Hallo Inka'; break; default: echo 'Unbekannter User'; break; } ?>
Beispiel: Dateiarchivauswahl mit switch-case. Hier befinden sich die Dateien im Verzeichnis „archiv/“, die Icons im Verzeichnis „icon/.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de"> <head> <title>Archivauswahlformular</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> <meta name="description" content="" /> <meta name="author" content="" /> <meta name="keywords" content="" /> <meta name="" /> </head> <body> <form name="formular" action="archivausgabe.php" method="post"> <table align="center" cellspacing="5" cellpadding="5" width="600" border="0"> <tr> <td><strong>Archiv (Auswahl)</strong></td> <td> </td> </tr> <tr> <td align="right">Archiv:</td> <td><input type="radio" name="archivauswahl" value="archiv/*.pdf" />PDF-Dokumente<br /> <input type="radio" name="archivauswahl" value="archiv/*.txt" />TXT-Dokumente<br /> <input type="radio" name="archivauswahl" value="archiv/*.png" />PNG-Dokumente<br /> <input type="radio" name="archivauswahl" value="archiv/*.*" />Alle-Dokumente<br /> </td> </tr> <tr> <td> </td> <td><input name="schalter" type="submit" value="Aufrufen" /></td> </tr> </table> </form> </body> </html>
Die Datei „archivausgabe.php“:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta name="author" content="" /> <meta name="description" content="" /> <meta name="keywords" content="" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Archivausgabe</title> <script language="javascript" type="text/javascript"> function browserfenster(pfad,titel,eigenschaften) { window.open(pfad,'Fenster','left=0,top=0,width=500,height=500'); } </script> <style type="text/css" media="screen"> .dateistil { font-family: Arial; width: 500px; } .dateistil a { display: block; border: 1px solid #000000; margin: 5px; padding: 5px; color: #0000FF; text-decoration: none; background-color: #dddddd; } .dateistil a:hover { background-color: #FFAA00; } </style> </head> <body> <!-- PHP (Anfang) --> <?php function dokumentausgeben($verzeichnis) { // Variable für Archiv $archivdateien = glob($verzeichnis); $dateityp = 'icon/Open.Folder.png'; // Ausgabe der Dateien des Archivs ($archivdateien) for ($i = 0; $i < count($archivdateien); $i++) { // Fallunterscheidung preg_match("/\w*$/i", $archivdateien[$i], $endung); $dateisuffix = $endung[0]; switch($dateisuffix) { case 'pdf': $dateityp = 'icon/PDF.File.png'; break; case 'txt': $dateityp = 'icon/TXT.File.png'; break; case 'png': $dateityp = 'icon/PNG.File.png'; break; default: $dateityp = 'icon/BIN.File.png'; break; } // Ausgabe Dateiname if (preg_match("/\w*\.\w*$/i", $archivdateien[$i], $dateibezeichner)) { $dateiname = $dateibezeichner[0]; } echo <<<Dateiausgabe <div class="dateistil"> <a href="#" onclick="browserfenster('$archivdateien[$i]')"><img src="$dateityp" border="0" align="absmiddle"/>$dateiname</a> </div> Dateiausgabe; }// for }// function // Funktionsaufruf dokumentausgeben($_POST[archivauswahl]); ?> <!-- PHP (Ende) --> </body> </html>
Formularauswertung
Ein Formular kann mit der Methode GET oder POST versendet werden.
<html><body> <form id="formular" name="formular" method="post" action="senden.php"> <h1>HTML Eingabeformular</h1> <p><input type="text" name="vorname" id="vorname" /> Vorname</p> <p><input type="text" name="nachname" id="nachname" /> Nachname</p> <p><input type="submit" name="senden" id="senden" value="Senden" /> <input name="reset" type="reset" id="reset" value="Zurücksetzen" /></p> </form> </body></html>
<?php /** * PHP Auswertungsprogramm */ echo "Ihr Name,<br />"; echo "<p>" . $_POST["vorname"] . " " . $_POST["nachname"]; ?>
Cloud