12,275
edits
m (→Hallo Welt) |
m (→Hallo Welt) |
||
(13 intermediate revisions by 4 users not shown) | |||
Line 8: | Line 8: | ||
XAMP steht für: | XAMP steht für: | ||
* '''X''': Platzhalter für das Betriebssystem; gängig sind | * '''X''': Platzhalter für das Betriebssystem; gängig sind | ||
** '''L''' für Linux: [http://www.apachefriends.org/de/index.html LAMP] | |||
** '''M''' für Macintosh: [http://www.mamp.info/de/index.html MAMP] | ** '''M''' für Macintosh: [http://www.mamp.info/de/index.html MAMP] | ||
** '''W''' für Windows: [http://www.wampserver.com/ WAMP] | ** '''W''' für Windows: [http://www.wampserver.com/ WAMP] | ||
* '''A''': Apache - ein Open Source Webserver | * '''A''': Apache - ein Open Source Webserver | ||
* '''M''': MySQL - eine Open Source Datenbank | * '''M''': MySQL - eine Open Source Datenbank | ||
Line 24: | Line 24: | ||
<body> | <body> | ||
<?php | <?php | ||
echo | echo "<p>Hallo Welt!</p>"; | ||
echo | echo "<p>Da hat um " . date("H:i") . " Uhr jemand <i>Yippee!</i> gerufen...</p>"; | ||
?> | ?> | ||
</body> | </body> | ||
Line 34: | Line 34: | ||
Übrigens: Wer Mac OS X oder Linux benutzt, hat meist schon PHP auf dem Rechner! Öffne die Konsole bzw. das Terminal und tippe: <source lang="bash">php -info</source> | Übrigens: Wer Mac OS X oder Linux benutzt, hat meist schon PHP auf dem Rechner! Öffne die Konsole bzw. das Terminal und tippe: <source lang="bash">php -info</source> | ||
Der in OS X integrierte Apache-server wird von Apple als''Websharing'' (10.5) bzw ''Webfreigabe'' (10.6) bezeichnet und lässt sich über das Systemeinstellung ''Freigaben'' starten. Um das PHP parsing des Apache zu aktivieren müssen die Voreinstellungen des Apache-servers entsprechend [http://zathras.de/angelweb/activatingphponosx.htm angepasst] werden. | Der in OS X integrierte Apache-server wird von Apple als ''Websharing'' (10.5) bzw ''Webfreigabe'' (10.6, 10.7) bezeichnet und lässt sich über das Systemeinstellung ''Freigaben'' starten. Um das PHP parsing des Apache zu aktivieren müssen die Voreinstellungen des Apache-servers entsprechend [http://zathras.de/angelweb/activatingphponosx.htm angepasst] werden. | ||
Zum schnellen Testen von PHP Zeilen auf der Konsole kann man <tt>php -r</tt> (für "run") verwenden; der PHP-Ausdruck muss dabei in Anführungszeichen stehen: | Zum schnellen Testen von PHP Zeilen auf der Konsole kann man <tt>php -r</tt> (für "run") verwenden; der PHP-Ausdruck muss dabei in Anführungszeichen stehen: | ||
<source lang="bash">php -r "echo | <source lang="bash">php -r "echo 'Hallo Welt!';"</source> | ||
== Mischen von PHP und HTML == | == Mischen von PHP und HTML == | ||
PHP Quellcode wird mit den Schlüsselzeichen <tt> | PHP Quellcode wird mit den Schlüsselzeichen <tt style="color:red"><?php</tt> und <tt style="color:red">?></tt> umgeben. Man kann HTML und PHP mischen! | ||
<source lang="PHP"> | <source lang="PHP"> | ||
<p>Hallo <?php echo | <p>Hallo <?php echo "Welt"; ?>!</p> | ||
<?php | <?php | ||
$a = true; | $a = true; | ||
Line 66: | Line 66: | ||
$b = "4"; | $b = "4"; | ||
$c = $a + $b; | $c = $a + $b; | ||
echo | echo "Das Ergebnis ist " . $c . "!"; // Das Ergebnis ist die Zahl 9 | ||
</source> | </source> | ||
Line 74: | Line 74: | ||
Mit [http://de.php.net/manual/de/reserved.variables.php Vordefinierte Variablen] kann man sehr einfach an wichtige Informationen kommen, z.B. | Mit [http://de.php.net/manual/de/reserved.variables.php Vordefinierte Variablen] kann man sehr einfach an wichtige Informationen kommen, z.B. | ||
* $_GET['form_username'] - z.B. ein inputFeld eines Formulars | * $_GET['form_username'] - z.B. ein inputFeld eines Formulars, via GET versendet | ||
* $_SERVER['REQUEST_URI'] - die URI, die vom User verlangt wird (z.B. "http://url.de/index.php") | * $_POST['form_username'] - z.B. ein inputFeld eines Formulars via POST (empfohlen) | ||
* $_SERVER['PATH_INFO'] - bei "http://url.de/index.php/some/stuff?foo=bar" => "/some/stuff" | * $_SERVER['REQUEST_URI'] - die URI, die vom User verlangt wird (z.B. "http: //url.de/index.php") | ||
* $_SERVER['PATH_INFO'] - bei "http: //url.de/index.php/some/stuff?foo=bar" => "/some/stuff" | |||
Spezielle Variablen wie $_POST sind [[PHP#Arrays|Arrays]], die eckigen Klammern enthalten somit den Key mit dem man den Value im Array abfragen kann (siehe Arrays für weitere Erläuterung). | |||
== Operatoren == | == Operatoren == | ||
Line 111: | Line 114: | ||
|Verkettungsoperator | |Verkettungsoperator | ||
|<source lang="PHP">.</source> | |<source lang="PHP">.</source> | ||
|<source lang="PHP">echo | |<source lang="PHP">echo "Hallo " . "Welt";</source> | ||
|- | |- | ||
|Logische Operatoren | |Logische Operatoren | ||
Line 133: | Line 136: | ||
|Inkrement/Dekrement-Operatoren | |Inkrement/Dekrement-Operatoren | ||
| | | | ||
<source lang="PHP">++ | <source lang="PHP"> | ||
++ | |||
-- | |||
</source> | |||
|<source lang="PHP"> | |<source lang="PHP"> | ||
$a++; // Post-Inkrement ($a = $a + 1;) | $a++; // Post-Inkrement ($a = $a + 1;) | ||
++$a; // Pre-Inkrement | |||
$a--; // Post-Dekrement ($a = $a - 1;) | $a--; // Post-Dekrement ($a = $a - 1;) | ||
--$a; // Pre-Dekrement | |||
</source> | </source> | ||
|} | |} | ||
'''Unterschied zwischen Post- und Pre-Inkrement/Dekrement''' | |||
Der Post-Inkrement/Dekrement führt die Operation erst aus nachdem die Variable aus dem Speicher gelesen und an die entsprechende Stelle gesetzt wurde. Im Gegensatz dazu führt der Pre-Inkrement/Dekrement die Operation aus bevor die Variable aus dem Speicher gelesen wird. | |||
<source lang="PHP"> | |||
echo "Post Inkrement:\n"; | |||
$variable = 0; | |||
echo $variable++."\n"; // = 0 | |||
echo $variable."\n"; // = 1 | |||
echo "Pre Inkrement:\n"; | |||
$variable = 0; | |||
echo ++$variable."\n"; // = 1 | |||
echo $variable."\n"; // = 1 | |||
</source> | |||
== Kontrollstrukturen == | == Kontrollstrukturen == | ||
Line 180: | Line 201: | ||
// while(Bedingungszustand) { ... } | // while(Bedingungszustand) { ... } | ||
while($a > 10) { | while($a > 10) { | ||
echo | echo "Countdown: ".$a."<br/>"; | ||
$a--; | $a--; | ||
} | } | ||
Line 227: | Line 248: | ||
<source lang="PHP">mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )</source> | <source lang="PHP">mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )</source> | ||
''mixed'' meint, dass der Variablen-Typ unterschiedlich sein kann: | ''mixed'' meint, dass der Variablen-Typ unterschiedlich sein kann: | ||
* ''mixed'' am Anfang | * ''mixed'' am Anfang bezeichnet den Typ des von der Funktion zurückgelieferten Wertes (bei ''mixed'' ist das nicht genau spezifiziert; in diesem Fall also den ersetzten String) | ||
* ''str_replace'' ist der Funktionsname | * ''str_replace'' ist der Funktionsname | ||
* ''$search'' erwartet | * ''$search'' erwartet den zu ersetzenden String (alt) | ||
* ''$replace'' erwartet | * ''$replace'' erwartet den ersetzenden String (neu) | ||
* ''$subject'' erwartet den zu durchsuchenden String | * ''$subject'' erwartet den zu durchsuchenden String (Ausgangstext) | ||
* alle anderen Angaben, die in eckigen Klammern stehen sind ''optional'' | * alle anderen Angaben, die in eckigen Klammern stehen sind ''optional'' | ||
Wenn wir also im String $myString alle Vorkommen von "Hans" durch "Fritz" ersetzen wollen, dann: | Wenn wir also im String $myString alle Vorkommen von "Hans" durch "Fritz" ersetzen wollen, dann: | ||
Line 239: | Line 260: | ||
// $ergebnis enhält nun: "Fritz geht in die Welt." | // $ergebnis enhält nun: "Fritz geht in die Welt." | ||
</source> | </source> | ||
== Arrays == | |||
Arrays können mehrere Werte an bestimmten Positionen speichern. Das Abrufen der Werte (Values) kann über die Position im Array (Index) oder über ein vorher definiertes Schlüsselwort (Key) geschehen. | |||
Ein Array wird mit dem Schlüsselwort <tt>array()</tt> erstellt: | |||
<source lang="PHP">// array( key => value {, more key => value entries…} ); | |||
// 'key' may only be integer or string! 'value' may be anything | |||
$myArray = array("Nachname"=>"Mustermann", "Vorname"=>"Max", "Telefon"=>12345); | |||
// add new element to array | |||
$myArray["Spitzname"] = "Maxie"; | |||
// read elements from array | |||
echo $myArray["Vorname"] . " " . $myArray["Nachname"]; | |||
</source> | |||
Bei Zugriff via Index ist darauf zu achten, dass die erste Position Null ist! Hat ein Array z.B. 23 Werte, ist der letzte Wert auf Position 22. Ein Zugriff auf Position 23 ist unbedingt zu vermeiden, da in diesem Fall versucht wird, auf etwas zuzugreifen, das nicht existiert. | |||
<source lang="PHP">echo $myArray[0];</source> | |||
Die Positionierung in Arrays wird durch folgendes Beispiel deutlicher: | |||
<source lang="PHP">// This array is the same as ... | |||
array(5 => 43, 32, 56, "b" => 12); | |||
// ...this array | |||
array(5 => 43, 6 => 32, 7 => 56, "b" => 12); | |||
</source> | |||
Elemente eines Arrays können mit der <tt>foreach()</tt> Schleife prima durchlaufen werden, z.B.: | |||
<source lang="PHP"> | |||
// foreach (array_expression as $value) | |||
foreach($myArray as $value) { | |||
echo $value . "<br/>"; | |||
} | |||
// oder: foreach (array_expression as $key => $value) | |||
foreach($myArray as $key => $value) { | |||
echo $key . "=>" . $value . "<br/>" | |||
</source> | |||
'''Siehe auch: [http://de.php.net/manual/de/language.types.array.php PHP.net Arrays]''' | |||
== Includes == | == Includes == | ||
Line 287: | Line 347: | ||
// first, check if any parameter given, eg: index.php?id=kontakt | // first, check if any parameter given, eg: index.php?id=kontakt | ||
if(isset($_GET['id'])) { | if(isset($_GET['id'])) { | ||
// Hier fehlt noch eine Fehlerprüfung und Test auf relative Pfadangaben | |||
$id = $_GET['id']; | $id = $_GET['id']; | ||
} else { | } else { | ||
Line 293: | Line 354: | ||
} | } | ||
// Debug (welchen Wert hat $id? Nicht raten, zeigen!) | // Debug (welchen Wert hat $id? Nicht raten, zeigen!) | ||
echo | echo "<p>Aktuelle Seite ist: " . $id; | ||
// now include content | // now include content | ||
include($id . ".inc.php"); | include($id . ".inc.php"); | ||
Line 313: | Line 374: | ||
Natürlich fehlt bei diesem Beispiel eine Fehlerprüfung, z.B. wenn es ein Dokument nicht gibt, aber im Prinzip ist das schon ein ziemlich einfaches CMS :) | Natürlich fehlt bei diesem Beispiel eine Fehlerprüfung, z.B. wenn es ein Dokument nicht gibt, aber im Prinzip ist das schon ein ziemlich einfaches CMS :) | ||
'''WICHTIG!'''<br/> | |||
'''Das obige Beispiel ist möglicherweise unsicher, weil es theoretisch Lese-Zugriff auf alle möglichen Dateien mit der Endung "inc.php" gibt. So kann man die per GET an index.php übermittelte 'id' mit einer relativen Pfadangabe dazu bringen, Dateien außerhalb des Verzeichnisses anzuzeigen. Z.B. <tt>index.php?id=/</tt>, damit bekommt man Zugriff auf das Wurzelverzeichnis ("/") des Servers. Eine von vielen möglichen Lösungen ist z.B. die angeforderten includes zu testen und nur solche durchlassen, die in einem bestimmten Verzeichnis liegen. Oder man kann id-Werte blockieren, die bestimmte Sonderzeichen wie Schrägstriche enthalten.''' | |||
== Ressourcen == | == Ressourcen == | ||
Line 323: | Line 388: | ||
* [http://openbook.galileocomputing.de/php4/ Galileo OpenBook PHP] | * [http://openbook.galileocomputing.de/php4/ Galileo OpenBook PHP] | ||
* [http://en.wikibooks.org/wiki/Php WikiBooks: PHP] | * [http://en.wikibooks.org/wiki/Php WikiBooks: PHP] | ||
* [http://www.feierfeil.at/php/grundlagen.php PHP-Grundlagen] | |||
* [http://www.phpbox.de/grundlagen/programmieren.php phpbox.de] | |||
{{Template:Webprogramming}} | {{Template:Webprogramming}} | ||
[[Category:PHP]] | |||
[[Category:Webtechnologien]] | |||
[[Category:OS X]] | |||
[[Category:Linux]] | |||
[[Category:PHP]] | |||
[[Category:Webtechnologien]] | |||
[[Category:OS X]] | |||
[[Category:Linux]] |