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)]
    ....
?>







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.
?>




Sind „expose_php“ Konfigurationseinstellung auf „off“ gesetzt, sind Teile der Informationen wie Credits und Zend Logos deaktiviert.





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!";
}
?>



Ausgabe im Browser:







<?php
    echo "Ausgabe 1";   // Einzeiliger Kommentar
    
    /** 
     * Mehrzeiliger 
     * Kommentar im
     * php Dokument
     */
    echo "Ausgabe 2";
    
    /* Code Blöcke auskommentieren
    echo "Ausgabe 1";
    echo "Ausgabe 2";
    */
?>







echo


<?php
// Ausgabe via Echo Befehl/Anweisung
echo 'Ausgabe via Echo Befehl!<br />';
echo "Ausgabe via Echo Befehl (in doppelten Anführungszeichen)!<br />";
?>


Ausgabe im Browser:





<?php
// Ausgabe via Prozedur (Methode/Funktion)
echo ('Ausgabe via Echo Methode!<br />');
echo ("Ausgabe via Echo Methode (in doppelten Anführungszeichen)!<br />");
?>


Ausgabe im Browser:





<?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 />";
?>



Diese Schreibweise gilt auch für print Befehl und für echo/print Methode



Ausgabe im Browser:





<?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 />';
?>


Ausgabe im Browser:





<?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 />";
?>


Ausgabe im Browser:





<?php
// Mit vorangestellten \ kann man ein nachfolgendes Zeichen entwerten
echo "Zitat: \"Wer nicht wagt der nicht Gewinnt!\".";
echo "Hier ein Backslash \.";
?>


Ausgabe im Browser:





print



<?php
// Ausgabe via Print Befehl
print 'Ausgabe via Print Befehl!<br />';
print "Ausgabe via Print Befehl (in doppelten Anführungszeichen)!<br />";
?>



Ausgabe im Browser:





<?php
// Ausgabe via Prozedur (Methode/Funktion)
print ('Ausgabe via Print Methode!<br />');
print ("Ausgabe via Print Methode (in doppelten Anführungszeichen)!<br />");
?>



Ausgabe im Browser:





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;
?>



Ausgabe im Browser:







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;




Wird eine Variable in einfachen Hochkommata wird der Variablename, in doppelten Hochkommata der Wert ausgegeben.





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;
?>



Ausgabe im Browser:





Datentypen


PHP unterstützt folgende Datentypen:

  • ganze Zahlen.
  • Zahlen mit Kommastellen.
  • Strings (Zeichenketten).
  • Arrays (Listen).
  • Objekte.



FIXME



Zeichenketten (Strings)



Strings (Zeichenketten) müssen in 'String' oder String eingeschlossen und können mit 'Obst' . 'Menge' miteinander verkettet werden.




<?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)



FIXME



Numerisch indizierte Arrays


Die Elemente werden automatisch nummeriert und beginnt bei Index [0].

FIXME



Assoziative Arrays



FIXME



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



FIXME



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.


Ergibt der erste Operand true, wird der zweite Operand nicht mehr ausgewertet und das Ergebnis ist true, da der erste Operand das Ergebnis festgelegt hat.




...
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.


Ergibt der erste Operand false, ist das Ergebnis ebenfalls false, der zweite Operand wird nicht mehr geprüft.




...
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.


Sind beide Operanden true, ist das Ergebnis false.




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




OperatorBedeutung 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



FIXME




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&uuml;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&uuml;ck!<br />";
  echo "Bitte Produkt nachbestellen!";
}
else
{
  echo "Von Produkt sind noch $anzahl St&uuml;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" />
&nbsp;passwort: <input type="password" name="pass" value="" id="pass" /></p>
<input type="submit" value="Senden" />
<input type="reset" value="Zur&uuml;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&uuml;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&uuml;ck vorhanden.<br />";
  echo "Diese Menge ist in Ordnung!";
}
else
{
  if($anzahl >= 50)
  {
    echo "Von Produkt sind 50 oder mehr St&uuml;ck vorhanden.<br />";
    echo "Produkt langsam nachbestellen!";
  }
  else
  {
    echo "Von Produkt sind weniger als 50 St&uuml;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&uuml;ck vorhanden.<br />";
  echo "Diese Menge ist in Ordnung!";
}
elseif($anzahl >= 50)
{
  echo "Von Produkt sind 50 oder mehr St&uuml;ck vorhanden.<br />";
  echo "Produkt langsam nachbestellen!";
}
else
{
  echo "Von Produkt sind weniger als 50 St&uuml;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>&nbsp;</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>&nbsp;</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>



Ausgabe im Browser:






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&uuml;cksetzen" /></p>
</form>
</body></html>




<?php
/**
 * PHP Auswertungsprogramm
 */
echo "Ihr Name,<br />";
echo "<p>" . $_POST["vorname"] . " " . $_POST["nachname"];
?>



FIXME



Cloud