Das kleine PHP-Handbuch mit den wichtigsten PHP-Funktionen

Von den mehr als 3000 Funktionen und Sprachkonstrukten (array, isset, empty, ...) der PHP-Referenz sind hier die am häufigsten benutzten PHP-Funktionen aufgelistet, dies sind ein wenig mehr als 200 Funktionen und Sprachkonstrukte. Die Auflistung erfolgt in alphabetischer Reihenfolge. Hinweis: Bei Funktionen (z.B. touch(), ImagePNG(), ...) die Dateien - wie Bilder oder Textdateien - erstellen, verändern oder löschen; sollte das entsprechende Verzeichnis mit ausreichenden Zugriffsrechten ausgestattet sein. Zugriffsrechte auf 777 einstellen, sofern dies kein Sicherheitsrisiko darstellt. Voraussetzung für die vollständige Nutzung der Hinweise des kleinen PHP-Handbuches ist verfügbarer Webspace mit PHP-Unterstützung (PHP für LINUX/UNIX).



A B C D E F G H I J K L  
M N O P Q R S T U V W Anhang  
 

Für die Entwicklung und für erste Tests eines PHP-Programms hat sich das Serverpaket XAMPP sehr bewährt. Das Serverpaket XAMPP beinhaltet den Webserver Apache, das PHP- und Perl-Modul, den FTP-Server ProFTPd und die Datenbank MySQL. Das Serverpaket XAMPP (Download: http://www.apachefriends.org) ist konfiguriert und für Anfänger, sowie für PHP-Entwickler geeignet. XAMPP ist ein reiner Entwicklungsserver und für eine Produktivumgebung (Arbeitsserver) nicht geeignet. Für die Anzeige der Fehlermeldungen durch den PHP-Server, muss möglicherweise in der Datei php.ini ([...]/etc/php.ini) der Eintrag display_errors=Off auf display_errors=On umgestellt werden. Damit der PHP-Server die Änderungen einlesen kann, muss bei einem bereits gestarteten Server, der PHP-Server neu gestartet werden. Unter XAMPP geschieht dies durch folgenden Terminal-Befehl: sudo /opt/lampp/lampp stop und sudo /opt/lampp/lampp start
Hinweis: Der gleichzeitige Betrieb von zwei gleichwertigen Servern ist im Einzelfall zwar möglich, dies bleibt aber immer ein Experiment und ist für den normalen Betrieb nicht zu empfehlen.



Seitenanfang 

A

addslashes addcslashes Array-Funktionen array array_column array_pop array_push array_keys array_values array_reverse array_search in_array array_shift array_unshift array_merge current end next prev reset is_array key min max sort oben  addslashes(string str) Mit addslashes() werden alle Vorkommen von bestimmten Zeichen mit einem Backslash "\" geschützt. Dies ist vor allem für Datenbankabfragen wichtig. Der String (str) wird danach modifiziert zurückgegeben. Folgende Zeichen werden geschützt: einfache Anführungszeichen ('), doppelte Anführungszeichen ("), Backslash (\) und NUL (Null-Byte) Siehe auch: stripslashes() Beispiel <?php $string = "Mein 'erster' \Pokal"; $string_new = addslashes($string); echo $string . "<br>" . $string_new; ?> Ausgabe Mein 'erster' \Pokal Mein \'erster\' \\Pokal oben  addcslashes(string str, string charlist) Mit addcslashes() kann man eigene vordefinierte Sonderzeichen (charlist) mit einem Backslash "\" schützen lassen. Der String (string) wird danach modifiziert zurückgegeben. Siehe auch: htmlspecialchars() stripcslashes() stripslashes() Beispiel 1 <?php $string = "#Sicher+ist*sicher!"; $string_new = addcslashes($string , "#+*!"); echo $string . "<br>" . $string_new; ?> Ausgabe #Sicher+ist*sicher! \#Sicher\+ist\*sicher\! Beispiel 2 <?php // [...] $sql_command = 'SELECT * FROM capital_city WHERE id=2 ORDER BY date'; $current_sql_command = addcslashes($sql_command, '.\+*?[^]$(){}=!<>|:-'); if(preg_match("/^([a-zA-Z]{4,32})([ ]{1})(.{4,500})$/", $current_sql_command)) { // [...] echo "tue etwas"; } // [...] ?>
oben  Array-Funktionen Ein Array kann durch das Sprachkonstrukt array() erzeugt werden. Dies nimmt eine beliebige Anzahl kommaseparierter Schlüssel => Wert- Paare als Parameter entgegen. oben  array() Mit array() erzeugt man aus gegebenen Werten ein Array. Dabei ist array() nicht als reguläre Funktion zu sehen, sondern als Sprachkonstrukt. Mit dem Operator => können Sie Schlüsselwerte vorgeben. Zusätzlich haben Sie die Möglichkeit, innerhalb eines Arrays wiederum Arrays zu definieren und somit mehrdimensionale Arrays zu erzeugen. Siehe auch: list() unset() Beispiel 1 - numerisch indiziertes Array <?php $array = array("PHP",1,"Manual"); echo $array[0] . "<br>"; echo $array[1] . "<br>"; echo $array[2] . "<br>"; ?> Ausgabe 1 PHP 1 Manual Beispiel 2 - assoziatives Array <?php $array = array("Sorte1" => "Apfel", "Sorte2" => "Birnen", "Sorte3" => "Bananen"); for($x=0;$x<count($array);$x++) { $key = key($array); $val =$array[$key]; echo $key . ": " . $val . "<br>"; next($array); } echo $array["Sorte1"] . "<br>"; ?> Ausgabe 2 Sorte1: Apfel Sorte2: Birnen Sorte3: Bananen Apfel Die Elemente eines assoziativen Arrays (Syntax: Index => Wert), werden jeweils durch ein Komma getrennt. Index kann vom Typ String oder numerisch sein. Wird der Index weggelassen, erstellt die Funktion automatisch einen numerischen Index, der bei 0 beginnt. Ist der Index als Integer-Wert angegeben, wird der nächste generierte Index der größte Integer Index + 1. Beachten Sie, dass wenn zwei identische Indexe definiert sind, der letzte den ersten überschreibt (siehe auch: Beispiel 2). Beispiel 1 - zweidimensionales Array Dieses Beispiel zeigt wie man ein zweidimensionales Array erstellt, wie man Schlüssel für assoziative Arrays festlegt, und wie man numerische Indizes in normalen Arrays überspringt und fortsetzt. <?php $fruits = array ( "Früchte" => array ("a"=>"Orange", "b"=>"Banane", "c"=>"Apfel"), "Zahlen" => array (1, 2, 3, 4, 5, 6), "Löcher" => array("erstes", 5 => "zweites", "drittes") ); print "<pre>"; print_r($fruits); print "</pre>"; ?> Beispiel 2 - automatischer Index <?php $array = array( 1, 1, 1, 1, 1, 8=>1, 4=>1, 19, 3=>13); print "<pre>"; print_r($array); print "</pre>"; ?> Ausgabe 2 Array ( [0] => 1 [1] => 1 [2] => 1 [3] => 13 [4] => 1 [8] => 1 [9] => 19 ) Beispiel 3 - 1-basierter Index Das Beispiel erstellt ein auf dem Index 1 basierendes Array. Beachten Sie, dass Index '3' doppelt definiert ist, und den letzten definierten Wert 13 behält. Index 4 wurde nach dem Index 8 definiert, und der nächste generierte Index (Wert 19) ist 9, da der größte Index 8 war. Hinweis: Die Funktion print_r() ist nur hilfreich während der Entwicklung von PHP-Skripts, um den Inhalt von Arrays zu überprüfen. <?php $erstesquartal = array(1 => 'Januar', 'Februar', 'März'); print "<pre>"; print_r($erstesquartal); print "</pre>"; ?> Ausgabe 3 Array ( [1] => 'Januar' [2] => 'Februar' [3] => 'März' ) Beispiel 4 - multidimensionale Arrays Da der Wert eines Arrays irgendetwas sein kann, kann dieser Wert wiederum ein Array (numerisch indizierte und assoziative Arrays) sein. Somit können Sie auch multidimensionale Arrays erzeugen. <?php $fruits = array ("früchte" => array("a" => "Orange", "b" => "Banane", "c" => "Apfel" ), "nummern" => array(1, 2, 3, 4, 5, 6 ), "löcher" => array("erstens", 5 => "zweitens", "drittens" ) ); print "<pre>"; print_r($fruits); print "</pre>"; ?> oben  array_column(array $input , mixed $column_key [, mixed $index_key = NULL ]) Die Funktion array_column() gibt die Werte einer einzelnen Spalte (mixed $column_key) von einem übergebenen Array (array $input) als Array zurück. Die Funktion array_column() wird vorwiegend für ein vereinfachtes Extrahieren von Spalten aus mehrdimensionalen Arrays verwendet. Die Funktion array_column() gibt ein Array von Werten zurück, die eine einzelne Spalte aus dem übergebenen Array (array $input) darstellt. Siehe auch: array_search() extension_loaded() ini_get() print_r() var_dump() Parameter-Liste input ... ein mehrdimensionales Array oder ein Array mit Objekten column_key ... die angegebene Reihe oder Spalte mit den Werten die für die Rückgabe verwendet werden soll index_key ... der Rückgabewert der Funktion wird als Array-Index (Array-Schlüssel) verwendet; dieser Array-Index kann sowohl ein numerischer Index oder ein assoziativer Index (String) sein Beispiel 1 <?php $records = array( array( 'id' => 2135, 'first_name' => 'John', 'last_name' => 'Doe' ), array( 'id' => 3245, 'first_name' => 'Sally', 'last_name' => 'Smith' ), array( 'id' => 5342, 'first_name' => 'Jane', 'last_name' => 'Jones' ), array( 'id' => 5623, 'first_name' => 'Peter', 'last_name' => 'Doe' ) ); $first_names = array_column($records, 'first_name'); print '<pre>'; print_r($first_names); print '</pre>'; ?> Ausgabe 1 Array ( [0] => John [1] => Sally [2] => Jane [3] => Peter ) Beispiel 2 <?php if(extension_loaded('mysqli') && (!empty(@ini_get('mysqli.allow_local_infile')) || !empty(@ini_get('mysqli.allow_persistent')))) { $host_name ='localhost'; $db_user_name ='my_user'; $db_password ='my_password'; $db_name ='world'; if($db_connect = @mysqli_connect($host_name, $db_user_name, $db_password, $db_name)) { $sql_db_tables_array = array_column(@mysqli_fetch_all($db_connect->query('SHOW TABLES')),0); $sql_db_tables_array_count = count($sql_db_tables_array); // [...] // siehe: phpinfo() } // [...] echo "tue etwas"; } ?> Beispiel 3 <?php $characters = [ [ 'name' => 'Gandalf', 'race' => 'Ainur' ], [ 'name' => 'Aragorn', 'race' => 'Men' ], [ 'name' => 'Legolas', 'race' => 'Elves' ] ]; $index = array_search('Legolas', array_column($characters, 'name')); var_dump($characters[$index]['race']); // Ausgabe: "Elves" // Die Funktionen array_search() und array_column() durchsuchen das Array $characters nach dem Namen "Legolas" und geben den ersten gefunden Index zurück. ?> Ausgabe 3 string(5) "Elves" Beispiel 4 <?php $userdb = [ [ "uid" => '100', "name" => 'Sandra Shush', "url" => 'urlof100', ], [ "uid" => '5465', "name" => 'Stefanie Mcmohn', "pic_square" => 'urlof100', ], [ "uid" => '40489', "name" => 'Michael', "pic_square" => 'urlof40489', ] ]; $key = array_search(40489, array_column($userdb, 'uid')); echo $key; ?> Ausgabe 4 2 oben  array_pop(array_name) Die Funktion array_pop() löscht das letzte Element aus dem Array (array_name). Die Funktion gibt den Wert des letzten Elements von array zurück. Wenn array leer ist (oder kein Array), wird NULL zurückgegeben. Diese Funktion erzeugt einen Fehler der Stufe E_WARNING wenn sie auf etwas angewendet wird, das kein Array ist. Hinweis: Diese Funktion setzt nach ihrer Anwendung den array-Zeiger zurück (entspricht: reset()). Siehe auch: array_push() array_shift() array_unshift() Beispiel <?php $array_1 = array("birnen", "bananen", "kirschen"); array_pop($array_1); for($x=0;$x<count($array_1);$x++) { echo $array_1[$x] . "<br>"; } ?> Ausgabe birnen bananen oben  array_push(array_name, mixed var [, ...]) Die Funktion array_push() hängt ein oder mehrere neue Elemente (var) an das Array (array_name) an. Die Funktion gibt die neue Anzahl der Elemente des Arrays zurück. Hinweis: Wenn Sie array_push() verwenden, um nur ein Element an ein Array anzuhängen, ist es besser $array[] = zu benutzen, da dies den zusätzlichen Aufwand vermeidet, eine Funktion aufzurufen. <?php $var=123; $array[] = $var; ?> Hinweis: array_push() gibt eine Warnung aus, wenn das erste Argument kein Array ist. Dies unterscheidet sich vom Verhalten von $var[], welches ein neues Array erzeugt. Beispiel <?php $array_1 = array("birnen", "bananen", "kirschen"); array_push($array_1,"orangen","fruit"); for($x=0;$x<count($array_1);$x++) { echo $array_1[$x] . "<br>"; } ?> Ausgabe birnen bananen kirschen orangen fruit oben  array_keys(array $array) array_keys( array $array , mixed $search_value [, bool $strict = FALSE ]) Die Funktion array_keys() gibt die Schlüssel des Arrays (input) zurück. Fehlt das Argument search_value, liefert die Funktion die Schlüssel aller Einträge; andernfalls gibt sie nur die Schlüssel der Einträge zurück, die den angegebenen Wert haben. Siehe auch: array_values() Anhang: Vergleichs-Operatoren Parameter-Liste array ... Ein Array mit den zurückzugebenden Schlüsseln. search_value ... Wenn angegeben, werden nur Schlüssel mit diesen Werten zurückgegeben. strict ... Ist der Parameter $strict auf TRUE gesetzt, so wird nach identischen Elementen (identisch: ===, vom gleichen Typ) gesucht. Beispiel <?php $array_1 = array("monitor","maus"); $array_2 = array("a"=>"monitor","b"=>"maus"); $array_1 = array_keys($array_1); $array_2 = array_keys($array_2); echo implode("-",$array_1) . "<br>"; echo implode("-",$array_2) . "<br>"; ?> Ausgabe 0-1 a-b oben  array_values(array input) Die Funktion array_values() ändert ein assoziatives Array (input) in ein numerisch indiziertes Array. Beachten Sie im Beispiel, wie mit einem neuen, numerischen Schlüssel auf das Element des Arrays zugegriffen wird. Beispiel <?php $array = array("version"=>"PHP4"); echo $array['version'] . "<br>"; $array = array_values($array); echo $array[0]; ?> Ausgabe PHP4 PHP4 oben  array_reverse(array_name [, bool $preserve_keys = FALSE ]) Die Funktion array_reverse() dreht die Reihenfolge aller Elemente innerhalb eines Arrays (array_name) um. Es wird ein neues Array mit umgekehrter Reihenfolge der Elemente zurückgegeben. Parameter-Liste array ... Das Eingabe-Array. preserve_keys ... Wenn auf TRUE gesetzt, bleiben die Schlüssel erhalten. Nicht numerische Schlüssel sind nicht von diesem Parameter betroffen und bleiben immer erhalten. Beispiel 1 <?php $array_1 = array("php","perl", "asp"); echo implode(" - ",$array_1) ."<br>"; $array_2 = array_reverse($array_1); echo implode(" - ",$array_2); ?> Ausgabe 1 php - perl - asp asp - perl - php Beispiel 2 - Sortierung von Array-Elementen (Reverse) Das PHP-Skript sortiert eine Liste mit vollständigen Dateipfaden, ohne Berücksichtigung des Dateipfades. Bei dieser Sortierung wird nur der Dateiname berücksichtigt. Hinweis: PHP-Skript ist unvollständig (siehe auch: opendir(), readdir(), ...). <?php // [...] /* das Array $filename_array enthaelt die unsortierte Liste der Dateinamen mit ihrem kompletten Dateipfad */ $filename_array_count=count($filename_array); $filename_array_sort_tmp = array(); $filename_array_sort = array(); for($y=0; $y<$filename_array_count; $y++) { $filename_array_sort_a=explode("/", $filename_array[$y]); $filename_array_sort_b=array_reverse($filename_array_sort_a); $filename_string_sort_b=implode("/", $filename_array_sort_b); array_push($filename_array_sort_tmp, $filename_string_sort_b); unset( $filename_array_sort_a); unset( $filename_array_sort_b); unset($filename_string_sort_b); } // Flags: SORT_REGULAR (Default-Wert), SORT_NUMERIC, SORT_STRING, SORT_LOCALE_STRING sort($filename_array_sort_tmp, SORT_REGULAR); $filename_array_sort_tmp_count=count($filename_array_sort_tmp); for($z=0; $z<$filename_array_sort_tmp_count; $z++) { $filename_array_sort_a=explode("/", $filename_array_sort_tmp[$z]); $filename_array_sort_b=array_reverse($filename_array_sort_a); $filename_string_sort_b=implode("/", $filename_array_sort_b); array_push($filename_array_sort, $filename_string_sort_b); unset( $filename_array_sort_a); unset( $filename_array_sort_b); unset($filename_string_sort_b); } unset($filename_array_sort_tmp); $filename_array_sort_count=count($filename_array_sort); /* das Array $filename_array_sort enthaelt nun die sortierte Liste nach den Dateinamen, ohne Beruecksichtigung der Namen des Dateipfades, Namen der Verzeichnisse */ // [...] ?> oben  array_search( mixed $needle, array $haystack [, bool $strict = FALSE]) Die Funktion array_search() sucht in einem Array (haystack) nach einem Wert (needle). Ist der Wert needle in dem Array enthalten, liefert die Funktion den Schlüssel des Elements als Ergebnis zurück. Kann die Funktion den gesuchten Wert nicht finden, gibt sie als Ergebnis False zurück. Hat der Parameter strict den Wert true, sucht die Funktion nur Elemente, deren Wert denselben Datentyp hat wie needle, Default-Wert ist false. Hinweis: Wenn needle in haystack mehrfach gefunden wurde, so wird der erste passende Schlüssel zurückgegeben. Um die Schlüssel für alle gefundenen Werte zurückzugeben, können Sie stattdessen array_keys() mit dem optionalen Parameter search_value verwenden. Die Funktion array_search() kann sowohl das boolsche FALSE zurückliefern, als auch einen nicht-boolschen Wert, welcher zu FALSE ausgewertet wird. Siehe auch: array_keys() in_array() Parameter-Liste needle ... Der zu suchende Wert. Hinweis: Wenn needle ein String ist, wird der Vergleich unter Berücksichtigung der Groß-/Kleinschreibung vorgenommen. haystack ... Das Array. strict ... Ist der dritte Parameter strict auf TRUE gesetzt, so wird array_search() nach identischen Elementen (identisch: ===, Elemente vom gleichen Typ) in haystack suchen. Beispiel <?php $array_1 = array ( 'a' => 'PHP', 'b' => 'ASP', 'c' => 'PERL'); if($x = array_search('PHP', $array_1)) { echo $array_1[$x] . ' wurde gefunden!'; } ?> Ausgabe PHP wurde gefunden! oben  in_array(mixed $needle, array $haystack [, bool $strict = FALSE]) Die Funktion in_array() sucht in einem Array (haystack) nach einem Suchwort (needle) und gibt true bei Erfolg, sonst false zurück. Hat der Parameter strict den Wert true, sucht die Funktion nur Elemente, deren Wert denselben Datentyp hat wie needle. Default-Wert ist false. Falls Sie den Schlüssel des gefundenen Elements benötigen, so nutzen Sie die Funktion array_search(). Siehe auch: array_search() Parameter-Liste needle ... Der gesuchte Wert. Hinweis: Ist needle ein String, so wird bei der Suche Groß- und Kleinschreibung beachtet. haystack ... Das zu durchsuchende Array. strict ... Wenn der dritte Parameter auf TRUE gesetzt wird, vergleicht in_array() nicht nur den Wert sondern auch den Typ des gesuchten Wertes needle mit den Elementen des Arrays. Beispiel <?php $var_array = array("PHP", "ASP", "PERL", "C++"); if(in_array("PHP", $var_array)) echo "Skriptsprache ist PHP"; ?> Ausgabe Skriptsprache ist PHP oben  array_shift(array_name) Die Funktion array_shift() entfernt das erste Element aus einem Array (array_name) und gibt dieses Element zurück. Die Funktion gibt den ersten Wert zurück oder NULL, wenn array leer oder kein Array ist. Hinweis: Diese Funktion setzt nach ihrer Anwendung den array-Zeiger zurück (entspricht: reset()). Siehe auch: array_unshift() array_push() array_pop() Beispiel <?php $array_1 = array("php","asp"); echo array_shift($array_1) . "<br>"; print "<pre>"; print_r ($array_1); print "</pre>"; ?> Ausgabe php Array ( [0] => asp ) oben  array_unshift(array_name, mixed var [, ...]) Die Funktion array_unshift() fügt neue Elemente (var) am Anfang eines Arrays (array_name) ein. Die bereits vorhandenen Elemente werden nach hinten geschoben. Die Funktion gibt die neue Anzahl der in array enthaltenen Elemente zurück. Hinweis: Die Liste von Elementen werden als Ganzes eingefügt, sodass die eingefügten Elemente dieselbe Reihenfolge haben. Die numerischen Schlüssel werden so modifiziert, dass bei 0 zu zählen begonnen wird, Strings als Schlüssel bleiben unverändert. Siehe auch: array_shift() array_push() array_pop() Beispiel <?php $array_1 = array("php","asp"); array_unshift($array_1,"perl","c++"); echo implode(" - ",$array_1); ?> Ausgabe perl - c++ - php - asp oben  array_merge(array_name1, array_name2 [, array ...]) Die Funktion array_merge() verbindet mehrere Arrays zu einem Array. Es ist darauf zu achten, dass bei gleichnamigen String-Schlüsseln der Wert des ersten Arrays überschrieben wird. Bei identischen numerischen Schlüsseln wird dagegen der Schlüssel hochgezählt und das Element somit angehängt. Die Funktion gibt das resultierende Array zurück. Bei Aufruf ohne Argument wird ein leeres array zurückgeliefert. Beispiel 1 <?php $array_1 = array("Jetzt"," wollen"); $array_2 = array(" wir"," mal"); $array_3 = array(" die"," Arrays"," verbinden"); $array_4 = array_merge($array_1, $array_2, $array_3); for($x=0;$x<count($array_4);$x++) { echo $array_4[$x]; } ?> Ausgabe 1 Jetzt wollen wir mal die Arrays verbinden Beispiel 2 <?php $array_1 = array("Sorte1" => "Bananen"); $array_2 = array("Sorte2" => "Kirschen"); $array_3 = array("Sorte1" => "Kiwis"); $array_4 = array_merge($array_1, $array_2, $array_3); for($x=0;$x<count($array_4);$x++) { $key = key($array_4); $val =$array_4[$key]; echo $key . " - " . $val; echo "<br>"; next($array_4); } ?> Ausgabe 2 Sorte1 - Kiwis Sorte2 - Kirschen Beispiel 3 <?php $array_1[0] = "Bananen"; $array_2[0] = "Kirschen"; $array_3[0] = "Kiwis"; $array_4 = array_merge($array_1, $array_2, $array_3); for($x=0;$x<count($array_4);$x++) { $key = key($array_4); $val =$array_4[$key]; echo $key . " - " . $val; echo "<br>"; next($array_4); } ?> Ausgabe 3 0 - Bananen 1 - Kirschen 2 - Kiwis oben  current(array_name) Die Funktion current() gibt aktuelle Elemente eines Arrays (array) zurück. Mit den Funktionen next() und prev() können Sie den Zeiger auf das aktuelle Element schrittweise ändern. Zeigt der interne Zeiger hinter das Ende der Elementenliste, gibt current() FALSE zurück. Hinweis: Diese Funktion kann sowohl das boolsche FALSE zurückliefern, als auch einen nicht-boolschen Wert, welcher zu FALSE ausgewertet wird. Siehe auch: end() next() prev() reset() Beispiel <?php $array_1 = array("PHP","ASP","Perl"); for($x=0; $x<3; $x++) { echo current($array_1) . "<br>"; next($array_1); } ?> Ausgabe PHP ASP Perl oben  end(array_name) Die Funktion end springt zum letzten Element eines Arrays (array_name) und liefert dessen Wert zurück. An die Funktion muss eine echte Variable übergeben werden und nicht beispielsweise der Rückgabewert einer Funktion. Die Funktion gibt den Wert des letzten Arrayelements zurück oder FALSE bei einem leeren Array. Beispiel <?php $fruits = array('apple', 'banana', 'cranberry'); echo end($fruits); // cranberry ?> Ausgabe cranberry oben  next(array_name) Die Funktion next() springt zum nächsten Element eines Arrays (array_name), der interne Zeiger wird um eins erhöht und die Funktion liefert dessen Wert zurück. Sind keine Elemente mehr vorhanden, wird FALSE zurückgegeben. Hinweis: Diese Funktion kann sowohl das boolsche FALSE zurückliefern, als auch einen nicht-boolschen Wert, welcher zu FALSE ausgewertet wird. Um ein Array, das möglicherweise FALSE Elemente enthält, ordnungsgemäß zu durchlaufen, kann foreach() verwendet werden. Um dennoch next() verwenden zu können, und ordnungsgemäß zu prüfen, ob das Ende des Arrays erreicht wurde, sollte geprüft werden, ob der key() NULL ist. Siehe auch: key() Beispiel <?php $transport = array('zu Fuß', 'Fahrrad', 'Auto', 'Flugzeug'); echo current($transport) . "<br>"; // $mode = 'zu Fuß'; echo next($transport) . "<br>"; // $mode = 'Fahrrad'; echo next($transport) . "<br>"; // $mode = 'Auto'; echo prev($transport) . "<br>"; // $mode = 'Fahrrad'; echo end($transport); // $mode = 'Flugzeug'; ?> Ausgabe zu Fuß Fahrrad Auto Fahrrad Flugzeug oben  prev(array_name) Die Funktion prev() springt zum vorherigen Element eines Arrays (array_name), der interne Zeiger wird um eins verringert und die Funktion liefert dessen Wert zurück. Sind keine Elemente mehr vorhanden, wird FALSE zurückgegeben. Hinweis: Diese Funktion kann sowohl das boolsche FALSE zurückliefern, als auch einen nicht-boolschen Wert, welcher zu FALSE ausgewertet wird. Es ist nicht möglich, den Anfang eines Arrays von einem boolean FALSE-Wert zu unterscheiden. Dieser Fall kann unterschieden werden, indem geprüft wird, dass der key() des prev() Elements nicht NULL ist. Siehe auch: key() Beispiel <?php $transport = array('zu Fuß', 'Fahrrad', 'Auto', 'Flugzeug'); echo current($transport) . "<br>"; // $mode = 'zu Fuß'; echo next($transport) . "<br>"; // $mode = 'Fahrrad'; echo next($transport) . "<br>"; // $mode = 'Auto'; echo prev($transport) . "<br>"; // $mode = 'Fahrrad'; echo end($transport); // $mode = 'Flugzeug'; ?> Ausgabe zu Fuß Fahrrad Auto Fahrrad Flugzeug oben  reset(array_name) Die Funktion reset() springt zum ersten Element eines Arrays (array_name), liefert dessen Wert zurück oder FALSE, wenn das Array leer ist. Der interne Zeiger wird auf 0 (Null) gesetzt. Hinweis: Diese Funktion kann sowohl das boolsche FALSE zurückliefern, als auch einen nicht-boolschen Wert, welcher zu FALSE ausgewertet wird. Beispiel <?php $array = array('step one', 'step two', 'step three', 'step four'); // normalerweise steht der interne Zeiger auf dem ersten Element echo current($array) . "<br />\n"; // "step one" // Zwei Elemente überspringen next($array); next($array); echo current($array) . "<br />\n"; // "step three" // Zeiger zurücksetzen auf das erste Element reset($array); echo current($array) . "<br />\n"; // "step one" ?> Ausgabe step one step three step one oben  is_array(mixed var) Die Funktion is_array() überprüft, ob eine Variable (var) vom Typ Array ist. Sie liefert true zurück, wenn es sich bei der Variablen um ein Array handelt, sonst false. Beispiel <?php $a = 1.4; $b = array("Banane", "Birne"); if(!is_array($a)) echo "\$a ist kein array"; echo "<br>"; if(is_array($b)) echo "\$b ist ein array"; ?> Ausgabe $a ist kein array $b ist ein array oben  key(array_name) Die Funktion key() liefert den Schlüssel des aktuellen Elements innerhalb des Arrays (array_name). Ist das Array kein Assoziativarray, so wird der numerische Index des aktuellen Elements zurückgegeben (0,1,2,3,4,.....,n ). Hinweis: Die key() Funktion gibt einfach den Schlüssel des Arrayelements zurück, auf das momentan durch den internen Zeiger gezeigt wird. Sie bewegt den Zeiger in keiner Weise. Zeigt der interne Zeiger über das Ende der Elementliste hinaus oder ist das Array leer, gibt key() NULL zurück. Beispiel <?php $array_1 =array("Script1"=>"PHP","Script2"=>"ASP"); for($x=0;$x<sizeof($array_1);$x++) { echo key($array_1) ." : ". current($array_1) . "<br>"; next($array_1); } ?> Ausgabe Script1 : PHP Script2 : ASP oben  min(mixed $arg1, mixed $arg2, mixed $argn) Mit min() kann man sich den kleinsten Wert der übergebenen Argumente (arg1 bis argn) zurückgeben lassen. Dabei ist darauf zu achten, dass mindestens zwei Werte vorhanden sein müssen, um eine Überprüfung vornehmen zu können. Sollten Sie dennoch nur einen Wert übergeben wollen, so muss dieses Argument ein Array sein. Hinweis: Wird ein leeres Array übergeben, liefert die Funktion FALSE zurück und löst einen E_WARNING-Fehler aus. Seien Sie auch vorsichtig, wenn Sie Argumente verschiedenen Typs übergeben, da min() in diesem Fall unvorhersehbare Ergebnisse liefert. Siehe auch: max() Beispiel <?php $array_1 = array (5, 2, 45, 12, 9, 13, 22); echo min($array_1); echo '<br>'; echo min(1, 2, 3, 4, 5, 6, 7); ?> Ausgabe 2 1 oben  max(mixed $arg1, mixed $arg2, mixed $argn) Mit max() kann man sich den größten Wert der übergebenen Argumente (arg1 bis argn) zurückgeben lassen. Dabei ist darauf zu achten, dass mindestens zwei Werte vorhanden sein müssen, um eine Überprüfung vornehmen zu können. Sollten Sie dennoch nur einen Wert übergeben wollen, so muss dieses Argument ein Array sein. Hinweis: Wird ein leeres Array übergeben, liefert die Funktion FALSE zurück und löst einen E_WARNING-Fehler aus. Seien Sie auch vorsichtig, wenn Sie Argumente verschiedenen Typs übergeben, da max() in diesem Fall unvorhersehbare Ergebnisse liefert. Siehe auch: min() Beispiel <?php $array_1 = array(5, 2, 45, 12, 9, 13, 22); echo max ($array_1) . '<br>'; echo max (1, 2, 3, 4, 5, 6, 7); ?> Ausgabe 45 7 oben  sort(array_name [, int $sort_flags] ) Die Funktion sort() sortiert ein Array (array_name) aufsteigend nach den Werten. Die Zuordnung von Schlüssel und Wert bleibt nicht erhalten, ein vorher assoziatives Array wird in ein numerisch indiziertes Array umgewandelt. Die Funktion gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Parameter-Liste array ... Das Eingabe-Array. sort_flags ... Im Parameter sort_flags können Sie Flags für den Sortiertyp übergeben: SORT_REGULAR - vergleicht die Felder normal (ohne die Typen zu ändern, Default-Wert) SORT_NUMERIC - vergleicht die Felder numerisch SORT_STRING - vergleicht Felder als Strings SORT_LOCALE_STRING - vergleicht die Einträge als Strings, basierend auf den aktuellen lokalen PHP-Einstellungen In der unten stehenden Tabelle sehen Sie für diese Funktion die Wertigkeit der Zeichen innerhalb der Sortierreihenfolge(siehe: Sortierreihenfolge - von oben links nach unten rechts). Sortierreihenfolge (SORT_REGULAR, Default): sort() ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ € § ´ Ä Ö Ü ä ö ü Beispiel <?php $array_name = array( 'b' => 'PHP', 'd' => 'ASP', 'a' => 'Perl'); sort($array_name); print "<pre>"; print_r($array_name); print "</pre>"; ?> Ausgabe Array ( [0] => ASP [1] => PHP [2] => Perl ) Hinweis: Diese Funktion weist den Elementen des Arrays array neue Schlüssel zu. Bestehende Schlüssel, die Sie eventuell zugewiesen haben, werden entfernt statt einfach nur die Schlüssel neu anzuordnen. Seien Sie vorsichtig bei der Sortierung von Arrays mit unterschiedlichen Typen, da es mit sort() zu unvorhersehbaren Ergebnissen kommen kann.
Seitenanfang 

B

Backticks base64_encode base64_decode basename break oben  Backticks - Operatoren zur Programmausführung PHP unterstützt einen Operator zur Ausführung externer Programme: Die sog. Backticks (``). Die Backticks sind keine einfachen Anführungszeichen, sondern entsprechen auf den meisten Tastaturen den Tasten für die französischen Accents (rechts neben dem Fragezeichen). PHP versucht den Text zwischen den Backticks als Kommandozeilen-Befehl auszuführen. Zurückgegeben wird die Ausgabe des aufgerufenen Programms (d. h. die Ausgabe kann einer Variablen zugewiesen werden). Bei sehr vielen Dateien im aktuellen Verzeichnis ist ratsam die Ausgabe in eine Datei umzuleiten, z.B. `ls -lh > ./output.txt` (Voraussetzung: ausreichende Schreibrechte für die Erstellung der Textdatei). Hinweis: Webhoster können über die Parameter disable_functions und disable_classes in der Datei php.ini die Ausführung bestimmter Funktionen unterbinden. Übliche Funktionen deren Ausführung Webhoster aus Sicherheitsgründen unterbinden, sind z.B.: highlight_file, diskfreespace, exec, passthru, system, popen, show_source, php_uname, ini_alter, ini_restore, ini_set, getrusage, mysql_list_dbs, get_current_user, set_time_limit, getmyuid, getmypid, dl, leak, chgrp und auch die Backticks. Siehe auch: exec() Beispiel: Linux-Befehl ls <?php $output = `ls -lh`; echo "<pre>$output</pre>"; ?> oben  base64_encode(string data) Mit base64_encode() kann man eine Zeichenkette (data) von einem lesbaren 8-Bit-Zeichen-Format in einen Base64-Code konvertieren. Bei der Konvertierung zu einem Base64-Code benötigen die Daten gegenüber der ursprünglichen Größe ca. 33% mehr Speicher, können aber sehr gut komprimiert werden. Diese Funktion ist sehr nützlich für Datenübertragungen (z.B. E-Mails), welche das 8-Bit-Zeichen-Format nicht einwandfrei übertragen können. In der unten stehenden Tabelle können Sie in etwa die Größenveränderungen sehen. Es wurde eine Zeichenkette mit 1055 Zeichen erzeugt und jeweils komprimiert. Hinweis: Die Funktion base64_encode() kann man auch nutzen für die Kodierung von Passwörtern (Kodierung ist keine Verschlüsselung). Siehe auch: base64_decode()
Format Original Komprimiert Speicher
 
8Bit-Zeichen-Format 1,03kb 691Byte 100%
Base64-Code 1,40kb 958Byte 136%
Hinweis: Base64-kodierte Daten benötigen ungefähr 33% mehr Speicher als die Originaldaten. 

Beispiel
<?php
$string = "Erst einmal diese Zeichenkette umwandeln";
echo "<b>Ursprüngliche Zeichenkette:</b><br>";
echo $string . "<br><br>";
echo "<b>Base64-kodierte Zeichenkette:</b><br>";
$code = base64_encode($string);
echo $code . "<br><br>";
$code_1 = base64_decode($code);
echo "<b>Base64-dekodierte Zeichenkette:</b><br>";
echo $code_1 . "<br>";
?>

Ausgabe
Ursprüngliche Zeichenkette:
Erst einmal diese Zeichenkette umwandeln

Base64-kodierte Zeichenkette:
RXJzdCBlaW5tYWwgZGllc2UgWmVpY2hlbmtldHRlIHVud2FuZGVsbg==

Base64-dekodierte Zeichenkette:
Erst einmal diese Zeichenkette umwandeln

oben 
base64_decode(string encoded_data [, bool $strict = FALSE ])
Mit base64_decode() kann man eine Zeichenkette (encoded_data) vom Base64-Code in ein lesbares 8-Bit-Zeichen-Format konvertieren. Diese Funktion ist
sehr nützlich, um wieder lesbare Daten zu bekommen, nachdem Text für die Datenübertragung in E-Mails (da diese oftmals 8-Bit-Zeichen nicht einwandfrei
übertragen) konvertiert wurde.
Siehe auch:
base64_encode()

Parameter-Liste
data ... Die zu dekodierenden Daten.
strict ... Ist der strict-Parameter gleich TRUE, dann gibt die base64_decode()-Funktion FALSE zurück, wenn die Eingabe Zeichen enthält, die nicht im
Base64-Alphabet vorkommen. Andernfalls werden ungültige Zeichen stillschweigend ausgesondert.

Beispiel:
<?php
$string = "Erst einmal diese Zeichenkette umwandeln";
echo "<b>Ursprüngliche Zeichenkette:</b><br>";
echo $string . "<br><br>";
echo "<b>Base64-kodierte Zeichenkette:</b><br>";
$code = base64_encode($string);
echo $code . "<br><br>";
$code_1 = base64_decode($code);
echo "<b>Base64-dekodierte Zeichenkette:</b><br>";
echo $code_1 . "<br>";
?>

Ausgabe
Ursprüngliche Zeichenkette:
Erst einmal diese Zeichenkette umwandeln

Base64-kodierte Zeichenkette:
RXJzdCBlaW5tYWwgZGllc2UgWmVpY2hlbmtldHRlIHVud2FuZGVsbg==

Base64-dekodierte Zeichenkette:
Erst einmal diese Zeichenkette umwandeln

oben 
basename(string $path [, string $suffix ])
Die Funktion basename() gibt letzten Namensteil einer Pfadangabe zurück. basename() arbeitet nur mit der Zeichenkette und beachtet nicht das eigentliche
Dateisystem oder Pfadbestandteile wie etwa "..". Hinweis: basename() beachtet die Spracheinstellungen (locale); soll sie daher die korrekte Namensbasis in
Pfaden mit einem Mehrbytezeichensatz erkennen, muss die passende Spracheinstellung (locale) mit der setlocale() Funktion gesetzt werden.
Siehe auch:
dirname()
pathinfo()

Parameter-Liste
path ... Ein Pfad. Hinweis: Unter Windows wird sowohl der Slash (/) als auch der Backslash (\) als Trennzeichen bei Pfadangaben benutzt. Unter anderen
Betriebssystemen hingegen nur der Slash (/).
suffix ... Wenn der Namensteil mit suffix endet, wird dieser ebenfalls abgetrennt.

Beispiel
<?php
echo "1) ".basename("/etc/sudoers.d", ".d") . "<br>" .PHP_EOL;
echo "2) ".basename("/etc/sudoers.d"). "<br>" .PHP_EOL;
echo "3) ".basename("/etc/passwd"). "<br>" .PHP_EOL;
echo "4) ".basename("/etc/"). "<br>" .PHP_EOL;
echo "5) ".basename("."). "<br>" .PHP_EOL;
echo "6) ".basename("/");
?>

Ausgabe
1) sudoers
2) sudoers.d
3) passwd
4) etc
5) .
6) 

oben 
break [int Sequenz = 1]
Mit break wird die aktuelle for-, foreach-, while-, do-while- oder switch-Anweisung abgebrochen und somit die Schleife verlassen. Da alle drei Parameter
bei einer for-Schleife optional sind, kann es zu dem Umstand kommen, dass ohne eine Iterationsvariable aus der for-Schleife eine Endlosschleife wird.
break akzeptiert ein optionales numerisches Argument, das angibt, aus wievielen der es umschließenden verschachtelten Strukturen ausgebrochen
werden soll. Der Standardwert (Sequenz) ist 1; nur aus der unmittelbar umschließenden Verschachtelung wird ausgebrochen.
Siehe auch:
for()
foreach()
while()

Beispiel 1
<?php
$x='';
for( ;; ) {
   echo $x++ . '<br>';
   if($x == 3) {
      break;
   }
}
?>

Ausgabe 1
1
2

Beispiel 2
<?php
$arr = array('eins', 'zwei', 'drei', 'vier', 'stop', 'fünf');
foreach ($arr as $val) {
   if ($val == 'stop') {
       break; /* Sie könnten hier auch 'break 1;' schreiben. */
   }
   echo "$val<br />\n";
}

/* Nutzung des optionalen Arguments. */
$i = 0;
while (++$i) {
   switch ($i) {
       case 5:
           echo "Bei 5<br />\n";
           break 1;  /* Verlässt nur das switch. */
       case 10:
           echo "Bei 10; bricht ab<br />\n";
           break 2;  /* Verlässt das switch und das while. */
       default:
           break;
   }
}
?>

Ausgabe 2
eins
zwei
drei
vier
Bei 5
Bei 10; bricht ab


Seitenanfang 

C

chmod clearstatcache chdir chop chr closedir continue copy count crc32 oben  chmod(string filename, int mode) Mit der Funktion chmod() kann man die Zugriffsrechte einer Datei ändern. Dabei wird der neue Zugriffswert (mode) der Datei (filename) als Oktalzahl angegeben. Bei der Rechtevergabe kann man für den Eigentümer/Owner, Gruppe/Group und den Rest der Welt/Public verschiedene Zugriffsrechte vergeben. Die Standardwerte für die Zugriffsrechte von Dateien sind 0644 und für Verzeichnisse 0755. Erstellt ein PHP-Skript z.B. eine Textdatei (Logbucheinträge, Seitenstatistiken, Daten die von PHP-Dateien ausgewertet werden, ...), erhält sie automatisch das aktuelle Standardzugriffsrecht vom Server. Mit chmod() kann nun der Standardwert z.B. von 0644 auf 0600 geändert werden. Damit kann nur noch das PHP-Skript auf diese Datei (Lese- und Schreibrecht) zugreifen. Webseiten-Besucher die den Namen dieser Textdatei kennen, haben nun keinen Zugriff mehr auf diese Textdatei. Ist das SUID- und SGID-Bit (SUID .. set user id - 4, SGID .. set group id - 2) nicht gesetzt, so steht beim Oktalwert für die Zugriffsrechte immer eine Null (0) am Anfang, ansonsten eine 4 oder 2. Für die Erstellung von PHP-Skripts spielt das SUID- und SGID-Bit keine Rolle, so ist der Wert Null (0) immer die richtige Wahl ist. Die Funktion gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Hinweis: Die Zeichenketten wie etwa "g+w" (group +write) funktionieren hier nicht korrekt und sollten auch nicht verwendet werden. Die Funktion chmod() wird unter dem Betriebssystem Windows nichts bewirken. Der aktuelle Nutzer ist der Nutzer mit dem PHP läuft. Dies ist möglicherweise nicht der gleiche Nutzer wie der, den sie für den Shell-, FTP oder SFTP-Zugang nutzen. Auf den meisten Betriebssystemen können die Zugriffsrechte nur durch den Besitzer der Datei geändert werden. Diese Funktion kann auch nicht mit entfernten Dateien arbeiten, da der Zugriff auf die Datei, die bearbeitet werden soll, über das Dateisystem des Servers möglich sein muss. Siehe auch: umask() decoct() fileperms() clearstatcache() substr() Werte für mode: SUID/SGID = 0 Lesen/Read = r = 4 Schreiben/Write = w = 2 Ausführen/Execute = x = 1 Einige Werte für die Zugriffsrechte von Verzeichnisse:
  User Group World Oktal
drwxrwxrwx rwx rwx rwx 0777
drwxr-xr-x rwx r-x r-x 0755
drwx------ rwx --- --- 0700
drwxr-x--- rwx r-x --- 0750
drwxr-xr-- rwx r-x r-- 0754

Beispiel
<?php
$datei = "zahl.txt";
$chmod = decoct(fileperms($datei));
echo "CHMOD vorher: " . $chmod;
chmod ($datei, 0777);
clearstatcache();
echo "<br>";
$chmod = decoct(fileperms($datei));
clearstatcache();
echo "CHMOD nachher: " . $chmod;
echo "<br>";
echo "OKTALWERT nachher: " . substr($chmod, 2);
echo "<br>";
echo "Hinweis: Mit der Funktion substr() kann die Ausgabe auf den üblichen Oktalwert  gekürzt werden.";
?>

Ausgabe
CHMOD vorher: 100644
CHMOD nachher: 100777
OKTALWERT nachher: 0777
Hinweis: Mit der Funktion substr() kann die Ausgabe auf den üblichen Oktalwert gekürzt werden.

oben 
clearstatcache([bool $clear_realpath_cache = FALSE [, string $filename ]])
Mit clearstatcache() kann man den Zwischenspeicher mit den Dateistatuswerten löschen. Die unten stehenden Funktionen verursachen auf vielen Servern einen
beträchtlichen Zeit- und Ressourcenverbrauch. Die Funktion clearstatcache() gibt keinen Wert zurück.
Siehe auch:
chmod()

Parameter-Liste
clear_realpath_cache ... Ob der realpath Zwischenspeicher geleert werden soll.
filename ... Leere den realpath und den Stat Zwischenspeicher nur für einen bestimmten Dateinamen; wird nur genutzt, wenn clear_realpath_cache TRUE ist.

Funktionsliste:
file_exists()
fileatime()
filectime()
filemtime()
fileinode()
filegroup()
fileowner()
fileperms()
filesize()
filetype()
is_dir()
is_executable()
is_file()
is_link()
is_readable()
is_writeable()
lstat()
stat()

Beispiel
<?php
$datei = "zahl.txt";
chmod ($datei, 0600);
$chmod = decoct(fileperms($datei));
echo "CHMOD: " . $chmod;
echo "<br>";
chmod ($datei, 0777);
$chmod = decoct(fileperms($datei));
clearstatcache();
echo "CHMOD: " . $chmod;
echo "<br>";
$chmod = decoct(fileperms($datei));
echo "CHMOD: " . $chmod;
?>

Ausgabe
CHMOD: 100600
CHMOD: 100600
CHMOD: 100777

oben 
chdir(string directory)
Mit chdir() kann man sich in den Verzeichnissen auf dem Server bewegen. Falls der Wechsel nicht möglich war, wird false, sonst true zurückgegeben.
Die Funktion chdir() erzeugt einen Fehler des Levels E_WARNING bei Misserfolg.
Siehe auch:
getcwd()

Beispiel
<?php
$wechsel1 = chdir("neu");
echo $wechsel1 . "<br>";
$wechsel2 = chdir("../");
echo $wechsel2 . "<br>";
$wechsel3 = chdir("neus"); //Gibt es gar nicht!
echo $wechsel3;
?>

Ausgabe
1
1
Warning: ChDir: No such file or directory (errno 2) in /www/users/test/index.php on line 6

oben 
chop(string str [, string $character_mask ])
Mit chop() kann man nicht sichtbare Zeichen am Ende einer Zeichenkette (str) entfernen. So werden unter anderem Leerzeichen und Zeilenumbrüche (\n)
entfernt. Die Funktion chop() ist ein Alias für: rtrim().
Siehe auch:
trim()

Ohne den zweiten Parameter entfernt chop() diese Zeichen:
" " (ASCII 32 (0x20)), ein einfaches Leerzeichen.
"\t" (ASCII 9 (0x09)), ein Tabulator.
"\n" (ASCII 10 (0x0A)), ein Zeilenvorschub (line feed).
"\r" (ASCII 13 (0x0D)), ein Wagenrücklauf-Zeichen (carriage return).
"\0" (ASCII 0 (0x00)), das NULL-Byte.
"\x0B" (ASCII 11 (0x0B)), ein vertikaler Tabulator.

Parameter-Liste
str ... Die Eingabezeichenkette.
character_mask ... Sie können mittels des character_mask-Parameters eigene Zeichen angeben, die Sie entfernen lassen möchten. Führen Sie
einfach alle zu löschenden Zeichen auf. Mittels .. können Sie einen Bereich von Zeichen benennen.

Beispiel 1
<?php
$string_a = "PHP ";
$string_b = "3/4";
$string_c = chop($string_a);
// $string_c = rtrim($string_a);
echo $string_a . $string_b;
echo "<br>";
echo $string_c . $string_b;
?>

Ausgabe 1
PHP 3/4
PHP3/4

Beispiel 2
<?php
$string_a = "PHP /";
$string_b = "3/4";
$string_c = chop($string_a, "/ ");
// $string_c = rtrim($string_a, "/ ");
echo $string_a . $string_b;
echo "<br>";
echo $string_c . $string_b;
?>

Ausgabe 2
PHP /3/4
PHP3/4

oben 
chr(int ascii)
Mit chr() kann man sich das ASCII-Zeichen mit der angegebenen Nummer (ascii) zurückgeben lassen. Bei ASCII handelt es sich um einen 8-Bit-Zeichensatz,
bei dem jeder Zahl von 0-255 genau ein Zeichen zugewiesen ist.
Siehe auch:
Anhang: Zeichen-»Salat« verhindern

Der Zeichensatz gliedert sich wie folgt:
0-31 .. Steuerzeichen
32-126 .. amerikanisch und englische Tastaturzeichen
127-255 .. Sonderzeichen und Umlaute

Beispiel
<?php
echo chr(123); 
echo "<br>";
echo chr(90); 
echo "<br>";
echo chr(125);
?>

Ausgabe
{
Z
}

oben 
closedir(int dir_handle)
Mit closedir() kann man ein Verzeichnis schließen, das man vorher mit opendir() geöffnet hat. Konnte das Verzeichnis geschlossen werden, wird nichts
zurückgegeben, sonst erfolgt eine Fehlermeldung.
Siehe auch:
opendir()

Beispiel
<?php
$dir = "/etc/php5/";
// Oeffnet ein bekanntes Verzeichnis, liest das Verzeichnis in eine Variable
// ein und schlieszt es danach
if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        $directory = readdir($dh);
        closedir($dh);
    }
}
?>

oben 
continue [int Sequenz = 1]
Mit continue kann man einen Schleifendurchlauf abbrechen und zum nächsten Durchlauf übergehen. continue akzeptiert ein optionales numerisches
Argument, das angibt, wie viele Ebenen umschließender Schleifen bis zu ihrem Ende übersprungen werden sollen. Die Voreinstellung (Sequenz)
ist 1, so dass zum Ende der aktuellen Schleife gesprungen wird.
Siehe auch:
Anhang: Arithmetische Operatoren

Beispiel 1
<?php
for($x=1;$x<10;$x++) {
   if($x % 2) continue;
   echo $x . "<br>";
}
?>

Ausgabe 1
2
4
6
8

Beispiel 2
<?php
$i = 0;
while ($i++ < 5) {
    echo "Äußere<br />\n";
    while (1) {
        echo "Mittlere<br />\n";
        while (1) {
            echo "Innere<br />\n";
            continue 3;
        }
        echo "Das hier wird nie ausgegeben.<br />\n";
    }
    echo "Das hier ebenfalls nicht.<br />\n";
}
?>

Ausgabe 2
Äußere
Mittlere
Innere
Äußere
Mittlere
Innere
Äußere
Mittlere
Innere
Äußere
Mittlere
Innere
Äußere
Mittlere
Innere

oben 
copy(string source, string dest [, resource $context ])
Mit copy() kann man eine Quell-Datei (source) zu einem neuen Ziel (dest) kopieren. Es ist zu beachten, dass eine eventuell schon vorhandene Datei gleichen Namens
überschrieben wird. Bei Erfolg wird true, sonst false zurückgegeben.
Siehe auch:
unlink()

Parameter-Liste
source ... Pfad zu der Quelldatei.
dest ... Der Zielpfad. Wenn dest ein URL ist, kann der Kopiervorgang fehlschlagen, wenn der Wrapper nicht das Überschreiben existierender Dateien unterstützt.
Hinweis: Wenn die Zieldatei schon existiert, wird sie überschrieben.
context ... context ist ein optionaler Parameter. PHP bietet eine Menge von Kontextoptionen und -parametern, die in Zusammenhang mit allen Dateisystem- und
Streamwrappern genutzt werden können. Ein Kontext wird mit stream_context_create() erzeugt. Optionen werden mit stream_context_set_option() gesetzt und
Parameter mit stream_context_set_params().

Beispiel
<?php
$datei = "counter.txt";
$datei_name = "counter_new.txt";
if(@copy($datei, "tmp/$datei_name")) {
   echo "Datei wurde kopiert";
   echo "<br>";
   echo "Neuer Dateiname: $datei_name";
}
else
{
echo "Datei konnte nicht kopiert werden!";
}
?>

Ausgabe
Datei wurde kopiert
Neuer Dateiname: counter_new.txt

oben 
count(mixed $array_or_countable [, int $mode = COUNT_NORMAL ])
Die Funktion count() zählt die Menge der Elemente innerhalb eines Arrays (array_or_countable) und gibt die Anzahl zur weiteren Bearbeitung zurück. Diese
Funktion ist sehr nützlich bei Schleifen, um den erhaltenen Wert für die Durchläufe zu nutzen. Die Funktion count() liefert die Anzahl von Elementen in
array_or_countable. Ist der Parameter weder ein Array noch ein Objekt mit implementiertem Countable Interface, wird 1 zurückgegeben. Es besteht eine
Ausnahme, wenn array_or_countable NULL ist, wird 0 zurückgegeben. 
Siehe auch:
for()
sizeoff()

Parameter-Liste
array_or_countable ... Ein Array oder Countable Objekt.
mode ... Wenn der optionale Parameter mode auf COUNT_RECURSIVE (oder 1) gesetzt ist, wird count() rekursiv durch das Array zählen. Dies kann besonders
nützlich sein, um alle Elemente eines mehrdimensionalen Arrays zu zählen. Hinweis: count() kann Rekursion erkennen, um eine Endlosschleife zu vermeiden,
wird aber jedes Mal, wenn es das tut, ein E_WARNING erzeugen (im Fall, dass das Array sich selbst mehr als einmal enthält), und gibt dann eine höhere
Anzahl zurück als möglicherweise erwartet.

Beispiel
<?php
$array = array("banane","birne","apfel");
echo  count($array);
?>

Ausgabe
3

oben 
crc32(string str)
Mit crc32() kann man aus einem String (str) den polynomischen CRC32-Wert berechnen lassen. Diese zyklisch redundante polynomische Prüfsumme, welche eine
Länge von 32 Bit besitzt, wird genutzt, um die Integrität von übermittelten Daten zu prüfen. Dadurch wird eine wesentlich bessere Datenübertragungssicherheit
gewährleistet.
Siehe auch:
md5()

Beispiel
<?php
$var = "PHP 3/4 - Die Befehlsreferenz";
echo crc32($var); 
?>

Ausgabe
1300494289


- Seitenanfang 

D

date dechex decoct die dirname oben  date(string format [, int timestamp = time()]) Mit date() kann man eine Zeitangabe formatieren oder auswerten. Die Zeitangabe wird an den Parameter timestamp übergeben. Die Funktion date() gibt eine formatierte Datums-Zeichenkette zurück. Falls ein nicht numerischer Wert als timestamp übergeben wird, wird FALSE zurückgegeben und ein Fehler der Stufe E_WARNING erzeugt. Wird der optionale Parameter timestamp leer gelassen, so nimmt die Funktion date() automatisch die aktuelle Serverzeit an. Jeder Aufruf der Datums- und Zeitfunktionen generiert eine E_NOTICE-Warnung, wenn die Zeitzone ungültig ist und eine E_STRICT-Nachricht oder eine E_WARNING-Warnung, wenn die Systemeinstellung oder die TZ-Umgebungsvariable (TZ ... Time Zone) genutzt wird. Hinweis: Der Zeitstempel des Verarbeitungsbeginns der HTTP-Anfrage wird seit PHP 5.1 in $_SERVER['REQUEST_TIME'] bereitgestellt. Siehe auch: time() mktime() gmdate() Parameter-Liste format ... Das Muster des auszugebenden Datums-/Zeit-String (* .. Ausgabe mit führenden Nullen). a - "am" oder "pm" (am .. Ante meridiem (Vormittag), pm .. Post meridiem (Nachmittag)) A - "AM" oder "PM" (AM .. Ante meridiem (Vormittag), PM .. Post meridiem (Nachmittag)) B - Swatch-Internet-Zeit ( 000 bis 999 ) c - ISO 8601 Datum, ( 2004-02-12T15:19:21+00:00 ) d - Tag des Monats *( 01 - 31 ) D - Tag der Woche ( Wed - 3stellig) e - Zeitzonen-Bezeichner, ( UTC, GMT, Atlantic/Azores ) F - Monatsangabe ( December - ganzes Wort ) g - Stunde im 12-Stunden-Format (1-12 ) G - Stunde im 24-Stunden-Format (0-23 ) h - Stunde im 12-Stunden-Format *(01-12 ) H - Stunde im 24-Stunden-Format *(00-23 ) i - Minuten *( 00-59 ) I (großes i) - 1 bei Sommerzeit, 0 bei Winterzeit j - Tag des Monats ( 1-31 ) l (kleines L) - ausgeschriebener Wochentag ( Monday ) L - Schaltjahr = 1 , kein Schaltjahr = 0 m - Monat *(01-12 ) M - Monatsangabe ( Feb - 3stellig , englische Schreibweise z.B. für Oktober => Oct) n - Monat (1-12 ) o - Jahreszahl der Kalenderwoche gemäß ISO-8601. Dies ergibt den gleichen Wert wie Y, außer wenn die ISO-Kalenderwoche (W) zum vorhergehenden oder nächsten Jahr gehört ( 1999 oder 2003 ) O - Zeitunterschied zur Greenwich time (GMT) in Stunden ohne Doppelpunkt zwischen Stunden und Minuten ( +0200 ) P - Zeitunterschied zur Greenwich time (GMT) in Stunden mit Doppelpunkt zwischen Stunden und Minuten ( +02:00 ) r - Gemäß RFC 2822 formatiertes Datum ( Thu, 21 Dec 2000 16:01:07 +0200 ) s - Sekunden *( 00 - 59 ) S - Englische Aufzählung ( th für 2(second)) t - Anzahl der Tage des Monats ( 28 - 31 ) T - Zeitzoneneinstellung des Servers, Abkürzung der Zeitzone ( z.B. CEST, EST, MDT, ... ) u - Mikrosekunden, Beachten Sie, dass date() immer die Ausgabe 000000 erzeugen wird, da es einen Integer als Parameter erhält, wohingegen DateTime::format() Mikrosekunden unterstützt, wenn DateTime mit Mikrosekunden erzeugt wurde. ( 654321 ); Hinweis: Weil diese Funktion nur Integer-Zeitstempel akzeptiert, ist die Formatanweisung u nur nützlich, wenn man die Funktion date_format() mit von Benutzern angegebenen Timestamps aus der Funktion date_create() verwendet. U - Sekunden seit Beginn der UNIX-Epoche ( 1.1.1970 ) v - Millisekunden, Es gelten dieselben Anmerkungen wie für u. ( 654 ) w - Wochentag ( 0(Sonntag) bis 6(Samstag) ) W - ISO-8601 Wochennummer des Jahres, die Woche beginnt am Montag Beispiel: 42 (die 42. Woche im Jahr) Y - Jahreszahl, vierstellig ( 2001 ) y - Jahreszahl, zweistellig ( 01 ) z - Tag des Jahres ( z.B. 148 - entspricht 29.05.2001, von 0 beginnend ); Hinweis: Das Z-Format gibt beim Gebrauch von gmdate() immer 0 zurück. Z - Offset der Zeitzone in Sekunden. Der Offset für Zeitzonen westlich von UTC ist immer negativ und für Zeitzonen östlich von UTC immer positiv. ( -43200 bis 50400 ) GMT (Greenwich Mean Time ) oder UTC (Universal Time Coordinated) ist auf die Zeit am Nullmeridian, der durch Greenwich / England verläuft, bezogen. Die Sommerzeit findet bei GMT und UTC keine Beachtung. timestamp ... Der optionale Parameter timestamp ist ein Unix Timestamp als integer oder die aktuelle lokale Zeit wenn kein timestamp übergeben wurde. Er entspricht dann also dem Ergebnis der Funktion time(). Beispiel <?php echo date("d M Y") . "<br>"; echo date("Y m d") . "<br>"; echo date("d n y") . "<br>"; echo date("D, d m Y") . "<br>"; echo date("l, d m Y") . "<br>"; echo date("l dS of F Y h:i:s A") . "<br>"; echo "Dieser Monat hat " . date("t") . " Tage.<br>"; $tstamp=time() + 150000; echo date("d.m.Y", $tstamp) . " (Ausgabe des aktuellen Datums zum Zeitpunkt des Aufrufs, plus 150000 Sekunden)<br>"; ?> Ausgabe 05 Feb 2021 2021 02 05 05 2 21 Fri, 05 02 2021 Friday, 05 02 2021 Friday 05th 2021f February 2021 11:48:28 AM Dieser Monat hat 28 Tage. 07.02.2021 (Ausgabe des aktuellen Datums zum Zeitpunkt des Aufrufs, plus 150000 Sekunden) oben  dechex(int number) Mit dechex() wird eine dezimale Zahl (number) in eine hexadezimale Zahl konvertiert. Der größte konvertierbare Wert ist PHP_INT_MAX * 2 + 1 (oder -1), auf 32-bit Platformen ist dies 4294967295 in Dezimaldarstellung und das dechex() ffffffff zurück geben lässt. Siehe auch: hexdec() decoct() Anhang: Typen von Integer-Zahlen Beispiel <?php echo dechex(42) . "<br>"; echo PHP_INT_MAX * 2 + 1; ?> Ausgabe 2a 1.844674407371E+19 oben  decoct(int number) Mit decoct() wird eine dezimale Zahl (number) in oktale Darstellung konvertiert. Der größte konvertierbare Wert variiert abhängig von der verwendeten Plattform. Unter 32 Bit ist dies üblicherweise 4294967295 (dezimal) bzw. 37777777777 (oktal). Auf 64-Bit-Plattformen liegt das Limit üblicherweise bei 9223372036854775807 (dezimal) bzw. 777777777777777777777 (oktal). Siehe auch: hexdec() dechex() Anhang: Typen von Integer-Zahlen Beispiel <?php echo decoct(42); ?> Ausgabe 52 oben  die([string message]) die(int $status) Mit die() kann man ein laufendes Skript abbrechen und eine eigene Fehlermeldung (message) an den Browser senden. Diese Funktion wird oftmals genutzt, um zu überprüfen, ob eine Datei geöffnet werden konnte oder eine Verbindung zu einer Datenbank aufgenommen wurde. Eine Rückkehr zur Skriptausführung ist nach dem Aufruf von die() nicht mehr möglich. Dieses Sprachkonstrukt entspricht dem Sprachkonstrukt exit. Hinweis: Es wird kein Wert zurückgegeben. Siehe auch: exit Parameter-Liste message oder status ... Falls eine Zeichenkette übergeben wird, gibt diese Funktion beim Beenden den status aus. Falls status eine Ganzzahl ist, wird dieser Wert als Exit-Status verwendet anstatt ausgegeben zu werden. Ein Exit-Status sollte im Bereich von 0 bis 254 liegen, weil der Exit-Status 255 von PHP reserviert ist und deshalb nicht benutzt werden sollte. Der Status 0 wird verwendet, um ein Programm erfolgreich zu beenden. Beispiel 1 <?php $file = '/www/user/php.php3'; if(file_exists($file)) { $file_name = fopen($file, 'r') or die ("Konnte Datei <b>$file</b> nicht öffnen"); fclose($file); } ?> Ausgabe 1 Datei /www/user/php.php3 wurde nicht gefunden Beispiel 2 <?php $file = '/www/user/php.php3'; $file_name = @fopen ($file, 'r') or die ("Konnte Datei <b>$file</b> nicht öffnen"); fclose($file); ?> Ausgabe 2 Konnte Datei /www/user/php.php3 nicht öffnen oben  dirname(string $path [, int $levels = 1 ]) Gibt den Pfad eines übergeordneten Verzeichnisses zurück. Sind keine Pfadtrenner in path, wird ein Punkt ('.') zurückgegeben, das aktuelle Verzeichnis kennzeichnend. Ansonsten ist die zurückgegebene Zeichenkette der Pfad (path) mit dem abschließenden Slash (/) entfernt. Die Funktion dirname() arbeitet nur mit der Eingabe Zeichenkette und beachtet nicht das eigentliche Dateisystem oder Pfadbestandteile wie etwa "..". Hinweis: dirname() beachtet die Spracheinstellungen (locale); soll sie daher die korrekte Namensbasis in Pfaden mit einem Mehrbytezeichensatz erkennen, muss die passende Spracheinstellung (locale) mit der setlocale() Funktion gesetzt werden. Siehe auch: basename() pathinfo() Parameter-Liste path ... Ein Pfad. Unter Windows wird sowohl der Slash (/) als auch der Backslash (\) als Trennzeichen bei Pfadangaben benutzt. Unter anderen Betriebssystemen hingegen nur der Slash (/). levels ... Die Anzahl an übergeordneten Ebenen. Die Anzahl der Ebenen muss eine Zahl größer 0 sein. Beispiel <?php echo dirname("/etc/passwd") . "<br>" . PHP_EOL; echo dirname("/etc/") . "<br>" . PHP_EOL; echo dirname(".") . "<br>" . PHP_EOL; echo dirname("C:\\") . "<br>" . PHP_EOL; echo dirname("/usr/local/lib", 2); ?> Ausgabe /etc / . . /usr
Seitenanfang 

E

echo empty exit explode exec extension_loaded oben  echo(string arg1 [, string [argn]...]) Mit echo() werden alle Strings (arg1) ausgegeben. Da es sich bei echo() um keine Funktion handelt, sondern um ein Sprachkonstrukt, kann man die Klammern auch einfach weglassen. Hinweis: Es wird kein zusätzlicher Zeilenumbruch angehängt. Und echo besitzt zusätzlich eine Syntax-Kurzform, Sie können also ein öffnendes PHP-Tag von einem Gleichheitszeichen gefolgt notieren (Ich habe <?=$foo?> foo.). Der Hauptunterschied zu print ist, dass echo eine Liste von Argumenten entgegennimmt und keinen Rückgabewert hat. Siehe auch: print Beispiel 1 <?php $string = "PHP 3/4 - Die Befehlsreferenz"; echo $string; echo "<br>"; echo "PHP 3/4 <br>"; echo "Auch über mehrere <br>Zeilen anwendbar"; ?> Ausgabe 1 PHP 3/4 - Die Befehlsreferenz PHP 3/4 Auch über mehrere Zeilen anwendbar Beispiel 2 <?php // Zeichenketten können entweder individuell als mehrere Argumente oder // miteinander verbunden als einzelnes Argument übergeben werden echo 'Dieser ', 'String ', 'besteht ', 'aus ', 'mehreren Parametern.' ; echo "<br>"; echo 'Dieser ' . 'String ' . 'wurde ' . 'mit ' . 'Stringverkettung erzeugt.' . "\n"; ?> Ausgabe 2 Dieser String besteht aus mehreren Parametern. Dieser String wurde mit Stringverkettung erzeugt. oben  empty(mixed $var) empty() liefert true zurück, wenn eine Variable (var) nicht definiert, leer oder gleich 0 (Null) ist. In allen anderen Fällen wird false als Antwort geliefert. Hinweis: Es wird keine Warnung erzeugt, wenn die Variable nicht existiert. Das bedeutet, dass empty() im Wesentlichen das kurzgefasste Äquivalent zu if(!isset($var) || $var == false) echo '$var ist entweder nicht definiert, leer oder Null'; ist. Hinweis: empty ist ein Sprachkonstrukt und keine Funktion. Siehe auch: isset() Folgende Werte werden als leer angesehen: "" (eine leere Zeichenkette) 0 (0 als Integer) 0.0 (0 als Fließkommazahl) "0" (0 als Zeichenkette) NULL FALSE array() (ein leeres Array) Beispiel <?php $a = "24"; $b = "0"; $c = ""; if(!empty($a)) echo "Variable \$a ist gefüllt <br>"; if(empty($b)) echo "Variable \$b ist empty <br>"; if(empty($c)) echo "Variable \$c ist empty <br>"; if(empty($d)) echo "Variable \$d ist empty <br>"; ?> Ausgabe Variable $a ist gefüllt Variable $b ist empty Variable $c ist empty Variable $d ist empty oben  exit([string message]) exit(int $status) Mit exit() kann man ein laufendes Skript abbrechen und eine eigene Fehlermeldung (message) an den Browser senden. Diese Funktion wird oftmals genutzt, um zu überprüfen, ob eine Datei geöffnet werden konnte oder eine Verbindung zu einer Datenbank aufgenommen wurde. Eine Rückkehr zur Skriptausführung ist nach dem Aufruf von exit() nicht mehr möglich. exit ist ein Sprachkonstrukt und kann ohne Klammern aufgerufen werden, wenn kein status übergeben wird. Hinweis: Es wird kein Wert zurückgegeben. Siehe auch: die() Parameter-Liste message oder status ... Falls eine Zeichenkette übergeben wird, gibt diese Funktion beim Beenden den status aus. Falls status eine Ganzzahl ist, wird dieser Wert als Exit-Status verwendet anstatt ausgegeben zu werden. Ein Exit-Status sollte im Bereich von 0 bis 254 liegen, weil der Exit-Status 255 von PHP reserviert ist und deshalb nicht benutzt werden sollte. Der Status 0 wird verwendet, um ein Programm erfolgreich zu beenden. Beispiel 1 Im Beispiel stimmt Username und Passwort überein - das Skript wird normal ausgeführt. <?php $passwort = "wolf"; $user = "admin"; if($user == "admin" && $passwort == "wolf") { echo "Hallo Admin<br>"; } else { exit; } echo "Admin ist eingeloggt!"; ?> Ausgabe 1 Hallo Admin Admin ist eingeloggt! Beispiel 2 <?php $dateiname = '/pfad/zur/datei'; $datei = @fopen($dateiname, 'r') or exit("kann Datei $dateiname nicht öffnen"); ?> Ausgabe 2 kann Datei /pfad/zur/datei nicht öffnen oben  explode(string $delimiter , string $string [, int $limit = PHP_INT_MAX ]) Mit explode() zerlegt man eine Zeichenkette (string) anhand eines vordefinierten Trennzeichens (delimiter). Die zerlegte Zeichenkette wird in ein Array übergeführt, der ursprüngliche String bleibt erhalten. Der Parameter limit ist optional und bewirkt, dass die Anzahl der Elemente im Ergebnis-Array begrenzt werden; das letzte Element des Ergebnis-Arrays enthält dann den Rest des Strings. Hinweis: Ist delimiter ein leerer String (""), so gibt explode() FALSE zurück. Enthält delimiter einen Wert, der nicht in string vorkommt und wird ein negativer Wert für limit verwendet, wird ein leeres array zurückgegeben. Für alle anderen Werte von limit wird ein array zurückgegeben, das den string als einziges Element enthält. Siehe auch: implode() Parameter-Liste delimiter ... Die Begrenzungszeichenkette. string ... Die Eingabezeichenkette. limit ... Ist der Parameter limit angegeben und positiv, enthält das zurückgegebene Array maximal limit Elemente, wobei das letzte Element den Rest von string beinhaltet. Ist der Parameter limit negativ, werden alle Teilstrings bis auf die letzten limit-Teile zurückgegeben. Wenn der Parameter limit gleich 0 ist, wird er wie 1 behandelt. Beispiel 1 <?php $string = "PHP 3/4 - Die Befehlsreferenz"; echo $string; echo "<br>"; $array = explode(" ",$string); for($x=0;$x<count($array);$x++){ echo $array[$x]; } ?> Ausgabe 1 PHP 3/4 - Die Befehlsreferenz PHP3/4-DieBefehlsreferenz Beispiel 2 <?php $pizza = "Teil1 Teil2 Teil3 Teil4 Teil5 Teil6"; $teile = explode(" ", $pizza); echo $teile[0] . "<br>"; // Teil1 echo $teile[1]; // Teil2 ?> Ausgabe 2 Teil1 Teil2 oben  exec(string $command [, array &$output [, int &$return_var ]]) Mit der Funktion exec() kann man ein externes Programm ausführen. Ohne die Angabe des optionalen Parameters array übergibt die Funktion lediglich die letzte Zeile der Befehlsrückgabe (Terminalausgabe). Ist der Parameter array angegeben, wird dieses mit jeder Zeile der Befehlsausgabe gefüllt. Ist der Parameter return_var angegeben, so wird der Rückgabestatus (0 .. erfolgreiche Programmausführung) des ausgeführten Befehls in diese Variable geschrieben. Beachten Sie, wenn Eingaben der Webseitenbenutzer an diese Funktion übergeben werden, dass diese Befehle dem System Schaden zufügen können. Wird mit exec() ein Programm - mit dem entsprechenden Parameter - im Hintergrund gestartet, so sollte man sicherstellen, dass die Ausgabe des externen Programms in eine Datei umgeleitet wird. Andernfalls wird PHP solange laufen, bis das externe Programm beendet ist. Warnung: Falls Sie es erlauben, dass Dateneingaben von Benutzern an diese Funktion weitergereicht werden, sollten Sie escapeshellarg() oder escapeshellcmd() verwenden. Bei Verwendung dieser Funktionen stellen Sie sicher, dass kein Benutzer Ihr System überlisten kann, beliebige Kommandos auszuführen. Hinweis: Webhoster können über die Parameter disable_functions und disable_classes in der Datei php.ini die Ausführung bestimmter Funktionen unterbinden. Übliche Funktionen deren Ausführung Webhoster aus Sicherheitsgründen unterbinden sind z.B. : highlight_file, diskfreespace, exec, passthru, system, popen, show_source, php_uname, ini_alter, ini_restore, ini_set, getrusage, mysql_list_dbs, get_current_user, set_time_limit, getmyuid, getmypid, dl, leak, chgrp und auch die Backticks. Siehe auch: Backticks Parameter-Liste command ... Der auszuführende Befehl output ... Ist der Parameter output angegeben, wird dieses mit jeder Zeile der Befehlsausgabe gefüllt. Am Ende einer jeweiligen Zeile stehende Whitespaces wie beispielsweise ein \n wird nicht in dieses Array übernommen. Beachten Sie, dass wenn das Array bereits Elemente enthält, die Funktion exec() die Ausgabe an das Array anhängt. Wenn Sie dieses nicht wünschen, rufen Sie die Funktion unset () für das Array auf, bevor Sie es als Parameter der Funktion exec() übergeben. return_var ... Ist der Parameter return_var zusammen mit dem Parameter output angegeben, so wird der Rückgabestatus des ausgeführten Befehls in diese Variable geschrieben. Beispiel <?php $last_line=exec("ping -c 4 web.de", $rueckgabe_array, $rueckgabe_status); if($rueckgabe_status == 0) { echo "<b style=\"color:green\">Ping erfolgreich</b><br><br>"; echo "Letzte Zeile der Ausgabe: " . $last_line . "<br><br>"; echo "Alle Zeilen:<br>"; $rueckgabe_array_count = count($rueckgabe_array); for($x=0;$x<$rueckgabe_array_count;$x++) { echo $rueckgabe_array[$x] . "<br>"; } } else { echo"<b style=\"color:red\">Ping nicht erfolgreich</b>"; } ?> oben  extension_loaded(string name) Mit extension_loaded() kann man feststellen, ob eine Bibliothek (name) geladen ist. Wenn die angegebene Bibliothek geladen ist, wird true, sonst false zurückgegeben. Siehe auch: phpinfo() get_loaded_extensions() ini_get() Beispiel 1 <?php if(extension_loaded("mysqli")) echo "MySQLi"; ?> Ausgabe 1 MySQLi Beispiel 2 <?php // [...] if(extension_loaded('mysqli') && (!empty(@ini_get('mysqli.allow_local_infile')) || !empty(@ini_get('mysqli.allow_persistent')))) { // [...] // siehe: phpinfo() echo "MySQLi steht zur Verfügung"; } // [...] ?> Ausgabe 2 MySQLi steht zur Verfügung
Seitenanfang 

F

fclose feof fgets fgetcsv file fileperms fileatime filectime filemtime filetype flock file_exists function_exists filesize floor flush fopen fputs for foreach fread ftell fsockopen Funktionen fwrite oben  fclose(fp) Mit fclose() kann man eine offene Datei (fp) schließen. Der Datei-Zeiger muss gültig sein, d.h. die Datei, auf die gezeigt wird muss zuvor mit fopen() geöffnet worden sein. Die Funktion gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Siehe auch: fopen() Beispiel <?php $file = '/www/user/index.php'; $file_name = fopen($file, 'r') or die ("Konnte Datei <b>$file</b> nicht öffnen"); fclose($file); ?> Ausgabe Warning: fopen("/www/user/index.php","r") - No such file or directory in /www/users/test_php/index.php on line 3 Konnte Datei /www/user/index.php nicht öffnen oben  feof(int fp) Mit feof() kann man überprüfen, ob der Dateizeiger am Ende der Datei (fp) steht. Die Funktion gibt TRUE zurück, wenn der Dateizeiger an EOF (End Of Line, Dateiende) steht. Es wird FALSE zurückgegeben, falls ein Fehler auftritt (inklusive Zeitüberschreitung) oder der Dateizeiger nicht am Dateiende (EOF) steht. Beachten Sie bitte, dass es sich bei dem Dateizeiger fp um einen gültigen Zeiger auf eine offene Datei handeln muss. Folgende Funktionen erstellen einen Dateizeiger: fopen(), popen(), fsockopen(). Hinweis: Wenn der übergebene Dateizeiger nicht gültig ist, können sie eine Endlosschleife erhalten, denn feof() gibt nicht TRUE zurück. Siehe auch: fopen() fclose() Beispiel 1 <?php $zaehler_anmelden = "./selfphp.txt"; $fp = fopen($zaehler_anmelden,"r"); while(!feof($fp)) { $str = fgets($fp,200); echo $str; echo "<br>"; } fclose($fp); ?> Ausgabe 1 - Inhalt der Textdatei Variablen-Funktionen Array-funktionen Image-funktionen PDF-Funktionen MySQL-Funktionen Beispiel 2 - Beispiel mit einem ungültigen Dateizeiger <?php // wenn die Datei nicht gelesen werden kann oder nicht existiert gibt fopen FALSE zurueck $file = @fopen("no_such_file", "r"); // FALSE von fopen wird eine Warnung ausloesen und hier in einer Endlosschleife resultieren while (!feof($file)) { } fclose($file); ?> Ausgabe 2 Warning: feof() expects parameter 1 to be resource, boolean given in /opt/lampp/htdocs/www/work-x/Laboretum/script1a.php on line 22 [...] oben  fgets(int fp, [, int $length]) Mit fgets() kann man aus einer Datei (fp) eine Zeile mit der Länge length (in Byte) auslesen. Der Zeiger auf eine Datei muss gültig sein und auf eine Datei verweisen, die vorher erfolgreich mit fopen() geöffnet und nicht bereits von fclose() geschlossen wurde. Der Parameter length ist optional. Wurde keine Länge length übergeben, so wird solange gelesen bis das Zeilenende erreicht wurde. Gibt eine Zeichenkette zurück, die aus einer Datei gelesen wurde. Wenn keine Daten mehr aus dem Dateizeiger zu lesen sind oder wenn ein Fehler auftritt, wird FALSE zurückgegeben. Siehe auch: file() fread() readfile() Beispiel <?php $zaehler_anmelden = "./counter.txt"; if(file_exists($zaehler_anmelden)) { $fp = fopen($zaehler_anmelden,"r"); $zahl = fgets($fp,10); fclose($fp); $zahl++; echo "Counterstand: " . $zahl; } ?> Ausgabe Counterstand: 9 oben  fgetcsv(int fp, [, int $length = 0 [, string $delimiter = "," [, string $enclosure = '"' [, string $escape = "\\" ]]]]) Mit fgetcsv() kann man aus einer CSV-Datei (fp) eine Zeile auslesen und den Inhalt der Zeile anhand eines Trennzeichens (Delimiter) in seine Bestandteile zerlegen lassen. Sollten Sie den optionalen Parameter Delimiter weglassen, so wird der voreingestellte Wert ein Komma (,) genutzt. Der zweite Parameter (length) muss größer sein als die längste Zeile in der Datei, da sonst die Funktion fgetcsv() das Ende der Zeile nicht finden wird. Sollten leere Zeilen in der Datei vorkommen, so wird das nicht als Fehler interpretiert. Sie bekommen in diesem Fall ein Array mit einem leeren Feld zurück. Beachten Sie bitte, dass Sie als Trennzeichen nur ein einzelnes Zeichen nehmen sollten, da es sonst zu ungewollten Nebeneffekten kommen kann. Betrachten Sie dazu folgendes Beispiel: Die gelesene Zeile hat den Inhalt: 01.08.2001##62.159.232.250##www.selfphp3.de Wenn Sie diese Zeile mit fgetcsv($fp, 500, "##") lesen, erhalten Sie ein Array mit 5 Feldern, da nur eine Raute als Trennzeichen berücksichtigt wird. Beachten Sie bitte, dass es sich bei dem Dateizeiger fp um einen gültigen Zeiger auf eine offene Datei handeln muss, der mit fopen() erzeugt wurde. Die Funktion gibt ein numerisch indexiertes Array zurück, das die gelesenen Felder enthält. Bei einen ungültiger Dateizeiger gibt die Funktion NULL zurück oder FALSE bei anderen Fehlern, einschließlich Dateiende. Ein leere Zeile in einer CSV Datei wird als ein Array zurückgegeben, das ein einzelnes null-Feld (NULL repräsentiert eine Variable ohne Wert) enthält und wird nicht als Fehler behandelt. Siehe auch: fopen() fclose() file() fread() readfile() count() Parameter-Liste handle ... Ein gültiger Dateizeiger auf eine Datei, die zuvor mit fopen() geöffnet wurde. length ... Muss größer als die längste Zeile (in Zeichen), die in der CSV Datei vorhanden ist, sein (dies erlaubt die Erkennung abschließender Zeilenende-Zeichen, EOF). Andernfalls wird die Zeile in Blöcke von length Zeichen aufgeteilt, es sei denn, die Aufteilung würde innerhalb einer Feldbegrenzung erfolgen. Wird dieser Parameter ausgelassen, so ist die maximale Zeilenlänge nicht begrenzt, was die Funktion ein wenig langsamer werden lässt. delimiter ... Der optionale Parameter delimiter setzt das Feld-Trennzeichen (nur ein Zeichen). enclosure ... Der optionale Parameter enclosure setzt das Feld-Begrenzungs-Zeichen (höchstens ein Zeichen). Eine leere Zeichenkette ("") deaktiviert den proprietären Maskierungsmechanismus. escape ... Der optionale Parameter escape setzt das Maskierungs-Zeichen (nur ein Zeichen). Hinweis: Normalerweise wird ein enclosure-Zeichen in einem Feld maskiert, indem es verdoppelt wird; allerdings kann das escape-Zeichen alternativ dazu verwendet werden. So haben standardmäßig die Werte "" und \" dieselbe Bedeutung. Außer der Möglichkeit, das enclosure-Zeichen durch das escape-Zeichen maskiert werden können, hat letzteres keine besondere Bedeutung - es ist nicht einmal dazu geeignet, sich selbst zu maskieren. Beispiel //Inhalt der Datei statistik.csv: 01.08.2001#62.159.232.250#www.selfphp3.de 02.08.2001#212.82.34.222#www.selfphp4.de 02.08.2001#http://suchen.abacho.de#62.159.232.250 03.08.2001#http://www.fireball.de#212.185.44.15 <?php $statistik = "./statistik.csv"; $fp = fopen($statistik,"r"); $y=0; while($zeile = fgetcsv($fp,500,"#")) { $y++; echo "<b>Besucher $y:</b>"; echo "<br>Datum/HTTP_REFERER/REMOTE_ADDR<br>"; for($x=0; $x < count($zeile); $x++) { echo "$zeile[$x]"; echo "<br>"; } echo "<br>"; } fclose($fp); ?> Ausgabe Besucher 1: Datum / HTTP_REFERER / REMOTE_ADDR 01.08.2001 62.159.232.250 www.selfphp3.de Besucher 2: Datum / HTTP_REFERER / REMOTE_ADDR 02.08.2001 212.82.34.222 www.selfphp4.de Besucher 3: Datum / HTTP_REFERER / REMOTE_ADDR 02.08.2001 http://suchen.abacho.de 62.159.232.250 Besucher 4: Datum / HTTP_REFERER / REMOTE_ADDR 03.08.2001 http://www.fireball.de 212.185.44.15 oben  file(string filename [, int $flags = 0 [, resource $context ]]) Mit file() kann man eine komplette Datei (filename) zeilenweise in ein Array einlesen. Das nicht sichtbare Zeilenumbruchzeichen (\n) am Ende jeder Zeile wird als letztes Zeichen des entsprechenden Array-Element übernommen. Die Funktion gibt die Datei in einem Array zurück. Jedes Element des Arrays entspricht einer Zeile in der Datei. Im Fehlerfall gibt file() FALSE zurück. Hinweis: Jede Zeile in dem resultierenden Array enthält das Zeilenende, außer es wird flags FILE_IGNORE_NEW_LINES verwendet. Erzeugt einen Fehler der Stufe E_WARNING, wenn die Datei nicht existiert. Siehe auch: fopen() readfile() fgets() fgetcsv() count() Parameter-Liste filename ... Pfad zur Datei flags ... Der optionale Parameter flags kann aus einer oder mehreren der folgenden Konstanten bestehen: FILE_USE_INCLUDE_PATH .. suche nach der Datei im include_path (wird in der php.ini bestimmt) FILE_IGNORE_NEW_LINES .. entferne Zeilenende am Ende jedes Array-Elements FILE_SKIP_EMPTY_LINES .. leere Zeilen überspringen context ... context ist ein optionaler Parameter. PHP bietet eine Menge von Kontextoptionen und -parametern, die in Zusammenhang mit allen Dateisystem- und Streamwrappern genutzt werden können. Ein Kontext wird mit stream_context_create() erzeugt. Optionen werden mit stream_context_set_option() gesetzt und Parameter mit stream_context_set_params(). Beispiel // Inhalt der Datei statistik.csv: 01.08.2001#62.159.232.250#www.selfphp3.de 02.08.2001#212.82.34.222#www.selfphp4.de 02.08.2001#http://suchen.abacho.de#62.159.232.250 03.08.2001#http://www.fireball.de#212.185.44.15 <?php $datei = "./statistik.csv"; if(file_exists($datei)) { $array = file($datei); for($x = 0; $x < count($array); $x++) { echo $array[$x]; echo "<br>"; } } ?> Ausgabe 01.08.2001#62.159.232.250#www.selfphp3.de 02.08.2001#212.82.34.222#www.selfphp4.de 02.08.2001#http://suchen.abacho.de#62.159.232.250 03.08.2001#http://www.fireball.de#212.185.44.15 oben  fileperms(string filename) Mit fileperms() kann man sich die Zugriffsrechte einer Datei (filename) zurückgeben lassen. Als Rückgabewert erhalten Sie die Zugriffsrechte (numerischer Modus) und im Fehlerfall wird eine E_WARNING ausgegeben. Beachten Sie bitte, dass das Ergebnis zwischengespeichert wird. Siehe auch: clearstatcache() chmod() fileatime() filectime() filemtime() Beispiel <?php $datei = 'index.php'; $id = fileperms($datei); $id = decoct($id); echo "Zugriffsrechte der Datei $datei: $id"; echo "<br>"; echo "Zugriffsrechte - gekürzt über substr() - der Datei $datei: " . substr($id, -4); ?> Ausgabe Zugriffsrechte der Datei index.php: 100644 Zugriffsrechte - gekürzt über substr() - der Datei index.php: 0644 oben  fileatime(string filename) Mit fileatime() kann man sich das Datum und die Uhrzeit des letzten Zugriffs auf eine Datei (filename) liefern lassen. Als Rückgabewert dieser Funktion erhalten Sie das Datum im UNIX-Timestamp-Format (Beginn der UNIX-Epoche - 01.01.1970 , 0:00:00 GMT), im Fehlerfall wird false und eine E_WARNING ausgegeben. Beachten Sie bitte, dass das Ergebnis zwischengespeichert wird. Hinweis: Der atime-Wert einer Datei soll sich immer dann ändern, wenn die Dateiblöcke einer Datei gelesen werden. Dies kann in Bezug auf die Performance des Systems sich als Nachteil erweisen, falls eine Anwendung regelmäßig auf eine sehr große Anzahl an Dateien oder Verzeichnissen zugreift. Einige Unix Dateisysteme können so eingebunden werden, dass atime-Änderungen ausgeschaltet werden. Siehe auch: clearstatcache() fileperms() filectime() filemtime() Beispiel <?php $datei = 'statistik.csv'; $zeit = fileatime($datei); echo "Letzter Zugriff auf die Datei $datei: $zeit"; echo "<br>"; echo "Formatiert (GMT): " . gmdate("d M Y H:i:s", $zeit); ?> Ausgabe Letzter Zugriff auf die Datei statistik.csv: 1612779166 Formatiert (GMT): 08 Feb 2021 10:12:46 oben  filectime(string filename) Mit filectime() kann man sich das Datum und die Uhrzeit der letzten Änderung einer Datei (filename) zurückgeben lassen. Als Rückgabewert dieser Funktion erhalten Sie das Datum im UNIX-Timestamp-Format (Beginn der UNIX-Epoche - 01.01.1970 , 0:00:00 GMT), im Fehlerfall wird false und eine E_WARNING ausgegeben. Beachten Sie bitte, dass das Ergebnis zwischengespeichert wird. Hinweis: Bei den meisten Unix Dateisystemen gilt eine Datei als geändert, sobald ihre Inode-Daten geändert wurden; d.h. wenn die Rechte, Eigentümer, Gruppe oder andere Metadaten des Inodes aktualisiert werden. Beachten Sie auch, dass es bei den meisten Unix Dateisystemen keine Zeitangabe für die Erstellung von Unix Dateien gibt. Siehe auch: clearstatcache() fileperms() fileatime() filemtime() Beispiel <?php $datei = 'statistik.csv'; $zeit = filectime($datei); echo "Letzte Änderung des Dateizeigers Inode: $zeit"; echo "<br>"; echo "Formatiert (GMT): " . gmdate("d M Y H:i:s", $zeit); ?> Ausgabe Letzte Änderung des Dateizeigers Inode: 1612779162 Formatiert (GMT): 08 Feb 2021 10:12:42 oben  filemtime(string filename) Diese Funktion gibt Datum und Uhrzeit zurück, wann die Datenblöcke einer Datei beschrieben wurden, d.h. der Zeitpunkt, wann der Inhalt einer Datei zuletzt geändert wurde. Als Rückgabewert dieser Funktion erhalten Sie das Datum im UNIX-Timestamp-Format (Beginn der UNIX-Epoche - 01.01.1970, 0:00:00 GMT), im Fehlerfall wird false und eine E_WARNING ausgegeben. Beachten Sie bitte, dass das Ergebnis zwischengespeichert wird. Siehe auch: clearstatcache() fileperms() fileatime() filectime() Beispiel <?php $datei = 'statistik.csv'; $zeit = filemtime($datei); echo "Letzte Änderung der Datei: $zeit"; echo "<br>"; echo "Formatiert (GMT): " . gmdate("d M Y H:i:s", $zeit); ?> Ausgabe Letzte Änderung der Datei: 1612779162 Formatiert (GMT): 08 Feb 2021 10:12:42 oben  filetype(string $filename) Liefert den Typ der übergebenen Datei. Mögliche Werte sind fifo, char, dir, block, link, file, socket und unknown. Gibt FALSE und eine E_WARNING zurück, wenn ein Fehler auftrat. filetype() erzeugt auch eine E_NOTICE-Meldung, wenn der stat-Aufruf fehlschlägt oder der Dateityp unbekannt ist. Hinweis: Die Ergebnisse dieser Funktion werden gecached. Siehe auch: clearstatcache() mime_content_type() Parameter-Liste filename ... Pfad zu der Datei. Beispiel <?php echo filetype('/etc/passwd'); // file echo filetype('/etc/'); // dir ?> oben  flock(int fp, int operation [, int wouldblock]) Mit flock() kann man eine Datei (fp) für bestimmte Zugriffe (operation) verriegeln. Dies ist oftmals sehr nützlich, um Dateien, die Sie gerade beschreiben wollen, vor dem Zugriff von anderen Benutzern zu schützen. Beachten Sie bitte, dass es sich bei dem Dateizeiger fp um einen gültigen Zeiger auf eine offene Datei handeln muss, der mit fopen() erzeugt wurde. Im Erfolgsfall gibt diese Funktion true zurück, sonst false. Folgende Arten der Verriegelung sind im Parameter operation möglich: LOCK_SH (1) - Verriegelung für Lesezugriff LOCK_EX (2) - exklusive Verriegelung für Schreibzugriffe LOCK_UN (3) - gibt eine Verriegelung wieder frei LOCK_NB (4) - Verhindert, dass die Funktion während der Verriegelung blockiert. Diese Konstante können Sie zusätzlich zu den anderen 3 Konstanten angeben. Im optionalen Parameter wouldblock gibt die Funktion den Wert true zurück, falls die Funktion während der Verriegelung blockiert. Siehe auch: fopen() fclose() trim() fgets() fputs() Beispiel <?php $zaehler = "counter.txt"; //Inhalt der Datei counter.txt: 52369 $fp = fopen($zaehler,"r"); $zahl = trim(fgets($fp,10)); fclose($fp); $zahl++; $fp = fopen($zaehler,"w"); flock($fp,2); fputs($fp, $zahl); flock($fp,3); fclose($fp); echo $zahl; ?> Ausgabe 52370 oben  file_exists(string filename) Mit file_exists() kann man überprüfen, ob eine Datei oder ein Verzeichnis (filename) auf dem Server existiert. Im Erfolgsfall gibt diese Funktion true, sonst false zurück. Hinweis: Diese Funktion gibt FALSE für symbolische Links zurück, die auf nicht existierende Dateien verweisen. Siehe auch: exit is_dir() is_file() Beispiel 1 <?php $datei = 'statistik.csv'; if(file_exists($datei)) { echo "Die Datei $datei ist existent"; } else { echo "Die Datei $datei ist nicht existent"; } ?> Beispiel 2 <?php $dir='statistik_dir'; if(!file_exists($dir)) { print "<b>ERROR:</b> DIRECTORY <b>" . $dir . "</b> NOT FOUND!!"; exit; } ?> oben  function_exists('string function_name') Mit function_exists() kann man überprüfen, ob eine Funktion (function_name) vorhanden ist. Wenn die Funktion existiert, gibt function_exists() true, sonst false zurück. Hinweis: Bitte beachten Sie, dass ein Funktionsname existieren kann, auch wenn die Funktion selbst nicht genutzt werden kann, weil Konfigurations- oder Kompilierungsoptionen dies verhindern können (z.B. kann dies der Fall bei den Grafik-Funktionen sein). Diese Funktion gibt FALSE für Sprachkonstrukte wie include_once und echo zurück. Siehe auch: get_loaded_extensions() ini_get() Beispiel <?php $array = array("edit_db_data", "check_form_data", "change_system_data"); // Funktion: Pruefung und Aufbereitung der Formular-Daten fuer die Aufnahme in die CSV-Datenbank function check_form_data($form_data='') { if(isset($form_data)) { $form_data = htmlspecialchars($form_data, ENT_QUOTES); $form_data = preg_replace('/\r\n|\r|\n/', '<br>', $form_data); // gerader Strich (|) ist reserveiert als Feldtrenner $form_data = preg_replace('/\|/', '&#124;', $form_data); return $form_data; } else { return FALSE; } } for($x=0;$x<count($array);$x++){ if(function_exists($array[$x])) { echo "Funktion " . $array[$x] . " ist existent<br>"; } else { echo "Funktion " . $array[$x] ." ist nicht existent<br>"; } } ?> Ausgabe Funktion edit_db_data ist nicht existent Funktion check_form_data ist existent Funktion change_system_data ist nicht existent oben  filesize(string filename) Mit filesize() kann man sich die Größe einer Datei (filename) in Byte zurückgeben lassen. Als Rückgabewert dieser Funktion erhalten Sie die Größe der Datei, im Fehlerfall wird false und eine E_WARNING ausgegeben. Siehe auch: move_uploaded_file() Beispiel <?php $file_name = './counter.txt'; if(file_exists($file_name)) { $file_name_size = filesize($file_name); echo "Größe der Datei $file_name: " . $file_name_size . " Byte"; } ?> Ausgabe Größe der Datei ./counter.txt: 4 Byte oben  floor(float $value) Liefert den abgerundeten Wert (nächste ganze Zahl als Fließkommazahl), die kleiner oder gleich dem Parameter value ist, zurück. Dieser ist nach wie vor vom Typ float und nicht vom Typ integer wegen des größeren Wertebereichs von float. Diese Funktion gibt im Falle eines Fehlers (z.B. bei der Übergabe eines Arrays) FALSE zurück. Siehe auch: round() Beispiel <?php echo floor(4.3) . "<br>"; // 4 echo floor(9.999) . "<br>"; // 9 echo floor(-3.14); // -4 ?> oben  flush() Mit dem Aufruf der Funktion flush(), unabhängig davon wie PHP läuft (CGI oder WEB-Server), wird der gesamte Ausgabe-Puffer geleert. Dabei wird versucht den gesamten Inhalt an den Browser des Webseitenbenutzers zu schicken. Diese Funktion ist eher für Testläufe mit Hilfe von Endlosschleifen oder sich selbstaufrufenden Funktionen interessant. Es wird kein Wert zurückgegeben. Hinweis: Die Funktion flush() hat keinen Einfluss auf das Pufferverhalten des Webservers oder des Browsers auf der Clientseite. Es hat auch keinen Einfluss auf mit ob_start() erstellte Ausgabepuffer. Daher müssen Sie sowohl ob_flush() als auch flush() aufrufen, um den Ausgabepuffer zu leeren. Siehe auch: sleep() Beispiel <?php $i=0; while($i < 100) { // [...] echo "Hier steht irgend etwas ...!!"; ob_flush(); // flush() - sendet den Inhalt des Ausgabepuffers flush(); sleep(1); $i++; } ?> oben  fopen(string $filename , string $mode [, bool $use_include_path = FALSE [, resource $context ]]) Mit fopen() kann man eine Datei (filename) öffnen. Der Parameter mode legt fest, auf welche Weise und für welche Zugriffsarten die Datei geöffnet wird. Im Erfolgsfall gibt die Funktion einen Dateizeiger zurück. Sollte das Öffnen der Datei scheitern, so wird false zurückgeliefert. Hinweis: Diese Funktion kann ebenfalls gelingen, wenn filename ein Verzeichnis ist. Im Zweifelsfall sollte vor dem Aufruf von fopen() mit is_dir() geprüft werden, ob filename eine Datei oder ein Verzeichnis ist. Siehe auch: fwrite() flock() fclose() trim() fputs() Folgende Verbindungsmöglichkeiten gibt es: "http://" - Öffnen per http "php://stdin" - Öffnen per stdio stream "php://stdout" - Öffnen per stdio stream "php://stderr" - Öffnen per stdio stream Alles andere - Öffnen vom lokalen Dateisystem Folgende Werte für den Parameter mode gibt es: a - Öffnet die angegebene Datei nur zum Schreiben und positioniert den Dateizeiger auf das Ende der Datei. Sollte die angegebene Datei nicht existieren, so wird versucht diese Datei anzulegen. a+ - Öffnet die angegebene Datei zum Lesen und Schreiben und positioniert den Dateizeiger auf das Ende der Datei. Sollte die angegebene Datei nicht existieren, so wird versucht sie anzulegen. r - Öffnet die angegebene Datei zum Lesen und positioniert den Dateizeiger auf den Anfang der Datei. r+ - Öffnet die angegebene Datei zum Lesen und Schreiben und positioniert den Dateizeiger auf den Anfang der Datei. w - Öffnet die angegebene Datei zum Schreiben und positioniert den Dateizeiger auf den Anfang der Datei. Die Länge der Datei wird auf 0 Byte gesetzt. Sollte die angegebene Datei nicht existieren, so wird versucht sie anzulegen. w+ - Öffnet die angegebene Datei zum Lesen und Schreiben und positioniert den Dateizeiger auf den Anfang der Datei. Sollte die angegebene Datei nicht existieren, so wird versucht sie anzulegen. Bedenken Sie, dass die Datei mit b geöffnet werden muss, falls Sie ein System nutzen, welches zwischen Binär- und Textdateien unterscheidet (z.B. Windows). include_path ... Für die Bearbeitung von Binärdateien können Sie an jede dieser Modusdefinitionen ein b anhängen. Wird der optionale Parameter use_include_path auf 1 oder TRUE gesetzt, so wird auch innerhalb des Include-Pfads (wird in der php.ini gesetzt) nach der Datei gesucht. context ... context ist ein optionaler Parameter. PHP bietet eine Menge von Kontextoptionen und -parametern, die in Zusammenhang mit allen Dateisystem- und Streamwrappern genutzt werden können. Ein Kontext wird mit stream_context_create() erzeugt. Optionen werden mit stream_context_set_option() gesetzt und Parameter mit stream_context_set_params(). Beispiel 1 <?php $fp = fopen("/www/users/php/counter.txt","r"); // Absoluter Pfad $fp = fopen("counter.txt","r"); // Relativ Pfad $fp = fopen("/www/users/php/selfphp.gif","wb"); $fp = fopen("http://www.selfphp3.de/","r"); $fp = fopen("sftp://user:password@selfphp3.de/","r"); $fp = fopen("d:/daten/statistik.csv","a"); ?> Beispiel 2 <?php $zaehler = "counter.txt"; //Inhalt der Datei counter.txt: 52369 $fp = fopen($zaehler,"r"); $zahl = trim(fgets($fp,10)); fclose($fp); $zahl++; $fp = fopen($zaehler,"w"); flock($fp,2); fputs($fp, $zahl); flock($fp,3); fclose($fp); echo $zahl; ?> Ausgabe 2 52370 oben  fputs(resource fp, string str [, int length]) Mit fputs() kann man bestimmte Daten (str) an die aktuelle Position des Dateizeigers in eine Datei (fp) schreiben. Wird der dritte optionale Wert für die Länge (length) des Strings nicht angegeben, so wird der gesamte String an die Position des Dateizeigers geschrieben. Wird die Länge angegeben, so wird der String auf die vorgegebene Länge gekürzt. Die Funktion gibt die Anzahl der geschriebenen Bytes zurück oder FALSE bei einem Fehler. Bedenken Sie, dass die Datei mit "b" geöffnet werden muss, falls Sie ein System nutzen, welches zwischen Binär- und Textdateien unterscheidet (z.B. Windows). Hinweis: Die Funktion fputs ist ein Alias von fwrite(). Siehe auch: fwrite() trim() flock() fclose() fopen() fread() file() Parameter-Liste fp ... Eine Dateisystemressource (resource), wie sie in der Regel von fopen() zurückgegeben wird. str ... Die zu schreibende Zeichenkette. length ... Wenn der length Parameter angegeben wird, wird das Schreiben nach length Bytes beendet, oder wenn das Ende von string erreicht ist, je nachdem was eher eintritt. Sollte der length Parameter gesetzt sein, so ist zu beachten, dass die magic_quotes_runtime Konfigurations-Option ignoriert wird und somit keine Schrägstriche mehr von der Zeichenkette string entfernt werden. Hinweis: Falls magic_quotes_runtime aktiviert ist (php.ini), werden die meisten Funktionen die Daten von einer beliebigen externen Quelle zurückgeben, inklusive Datenbanken und Textdateien, die in den Daten enthaltenen Anführungszeichen mit einem Backslash geschützt zurückgeben. Einige Funktionen die von magic_quotes_runtime betroffen sind: file() fgets() fwrite() fread() fputs() exec() mysqli_fetch_row() mysqli_fetch_array() mysqli_fetch_object() [...] Beispiel 1 Das Schreiben in einen Netzwerkstream kann enden, bevor die gesamte Zeichenkette geschrieben wurde. Der Rückgabewert von fwrite() kann wie folgt überprüft werden: <?php function fwrite_stream($fp, $string) { for($written = 0; $written < strlen($string); $written += $fwrite) { $fwrite = fwrite($fp, substr($string, $written)); if($fwrite === false) { return $written; } } return $written; } ?> Beispiel 2 <?php $zaehler = "counter.txt"; //Inhalt der Datei counter.txt: 52369 $fp = fopen($zaehler, "r"); $zahl = trim(fgets($fp,10)); fclose($fp); $zahl++; $fp = fopen($zaehler, "w"); flock($fp,2); fputs($fp, $zahl); flock($fp,3); fclose($fp); echo "Counterstand: " . $zahl; ?> Ausgabe 2 Counterstand: 52370 Beispiel 3 <?php $zaehler = "counter.txt"; //Inhalt der Datei counter.txt: 52370 $fp = fopen($zaehler, "r"); $zahl = trim(fgets($fp,10)); fclose($fp); $zahl++; $fp = fopen($zaehler, "w"); flock($fp,2); fputs($fp,$zahl,3); flock($fp,3); fclose($fp); $fp = fopen($zaehler, "r"); $zahl = trim(fgets($fp,10)); fclose($fp); echo "Counterstand: " . $zahl; ?> Ausgabe 3 Counterstand: 523 Beispiel 4 Wird zweimalig in den Dateizeiger geschrieben, werden die Daten an das Ende des Dateiinhalts angehängt. <?php $fp = fopen('data.txt', 'w'); fwrite($fp, '1'); fwrite($fp, '23'); fclose($fp); // der Inhalt von 'data.txt' ist nun 123 und nicht 23! ?> oben  for() Mit for wird ein Schleifendurchlauf abgearbeitet. Dabei gibt man einen Start- und einen Endwert ein. Die Schleife endet erst bei Erreichen des Endwertes. Da alle drei Parameter bei einer for-Schleife optional sind, kann es zu dem Umstand kommen, dass ohne eine Iterationsvariable aus der for-Schleife eine Endlosschleife wird. Siehe auch: break while() Beispiel <?php // Endlosschleife: for(;;) { for($x=1; $x<15; $x++) { echo "Dieses ist der" . $x . ". Durchlauf <br>"; } ?> Ausgabe Dieses ist der 1. Durchlauf [...] Dieses ist der 14. Durchlauf oben  foreach() Mit der Funktion foreach() ist es auf einfache Weise möglich ein Array auszulesen. Gegenüber einer for-Schleife vereinfacht sich die Syntax. Dabei wird das Array vom Anfang bis zum Ende durchlaufen. Siehe auch: for() while() Beispiel 1 <?php $var = array ( 'Birnen', 'Bananen', 'Äpfel' ); foreach($var as $value) { echo 'Wert: ' . $value . '<br>' . "\n"; } ?> Ausgabe 1 Wert: Birnen Wert: Bananen Wert: Äpfel Beispiel 2 - MySQLi-Feldtypen (Datenbank) <?php // [...] $types_array=array(); $constants = get_defined_constants(true); foreach($constants['mysqli'] as $c => $n) if(preg_match('/^MYSQLI_TYPE_(.*)/', $c, $m)) $types_array[$n] = $m[1]; $types_array_count = count($types_array); // [...] print "<pre>"; print_r ($types_array); print "</pre>"; ?> Ausgabe 2 Array ( [0] => DECIMAL [1] => CHAR [2] => SHORT [3] => LONG [4] => FLOAT [5] => DOUBLE [6] => NULL [7] => TIMESTAMP [8] => LONGLONG [9] => INT24 [10] => DATE [11] => TIME [12] => DATETIME [13] => YEAR [14] => NEWDATE [247] => INTERVAL [248] => SET [249] => TINY_BLOB [250] => MEDIUM_BLOB [251] => LONG_BLOB [252] => BLOB [253] => VAR_STRING [254] => STRING [255] => GEOMETRY [245] => JSON [246] => NEWDECIMAL [16] => BIT ) oben  fread(resource $handle, int $length) Mit fread() kann man Binärdaten aus einer Datei (handle) lesen. Der zweite Parameter für die Länge (length, in Bytes anzugeben) bestimmt, wie viel der Datei gelesen werden soll (max. bis zum Dateiende, EOF). Die Funktion gibt die ausgelesene Zeichenkette zurück. Im Fehlerfall wird FALSE zurückgegeben. Das Lesen wird beendet, sobald eine der folgenden Bedingungen eintritt: - length Bytes wurden gelesen - das Dateiende (EOF, end of file) wurde erreicht - ein Paket wird vollständig verfügbar oder bei Netzwerk-Stream kommt es zu einer Zeitüberschreitung - Falls dieser Netzwerk-Stream beim Lesen gepuffert wird und der Stream keine reguläre Datei repräsentiert, wird maximal einmal ein Stück bis zur maximalen Chunkgröße (normalerweise 8192 Bytes, Chunk .. Datenstück, Datenbereich, Datenprobe) gelesen. Abhängig von den bisher gepufferten Daten können die zurückgelieferten Daten größer als die Chunkgröße sein. Hinweis: Die Funktion fread() beginnt immer an der aktuellen Position des Dateizeigers zu lesen. Verwenden Sie ftell(), um herauszufinden wo dieser Zeiger steht oder die Funktion rewind(), um den Zeiger an der Anfang zurückzustellen. Auf Systemen, welche zwischen Binär- und Textdateien (z.B. Windows) unterscheiden, muss die Datei mit fopen() und dem Mode-Parameter 'b' geöffnet werden. Und wenn etwas gelesen werden soll, was keine normale lokale Datei ist, wie etwa Streams von entfernten Dateien oder von fsockopen(), so wird das Lesen beendet sobald ein Paket verfügbar ist. Das bedeutet, dass man die Daten in Stücken einsammeln muss. Siehe auch: fgets() file() fopen() fwrite() filesize() ftell() rewind() trim() Beispiel 1 Inhalt der Datei statistik.csv: 01.08.2001#62.159.232.250#www.selfphp3.de 02.08.2001#212.82.34.222#www.selfphp4.de 02.08.2001#http://suchen.abacho.de#62.159.232.250 03.08.2001#http://www.fireball.de#212.185.44.15 <?php $file_content = 'statistik.csv'; if(file_exists($file_content)) { $fp = fopen($file_content, 'r'); $str = fread($fp, filesize($file_content)); fclose($fp); print "<pre>"; echo $str; print "</pre>"; } ?> Ausgabe 1 01.08.2001#62.159.232.250#www.selfphp3.de 02.08.2001#212.82.34.222#www.selfphp4.de 02.08.2001#http://suchen.abacho.de#62.159.232.250 03.08.2001#http://www.fireball.de#212.185.44.15 Beispiel 2 <?php $file_content = 'statistik.csv'; if(file_exists($file_content)) { $fp = fopen($file_content, 'r'); $str = fread($fp, 10); fclose($fp); echo $str; } ?> Ausgabe 2 01.08.2001 oben  ftell(resource $handle) Die Funktion gibt die aktuelle Position des Dateizeigers als Integerzahl zurück, der durch handle referenziert wurde. Der Dateizeiger muss gültig sein und auf eine erfolgreich durch fopen() geöffnete Datei zeigen. ftell() liefert undefinierte Ergebnisse für reine Anfüge-Streams (geöffnet mittels fopen() und einem 'a' Flag). Wenn ein Fehler auftritt, wird FALSE zurückgegeben. Siehe auch: fread() Beispiel Inhalt der Datei statistik.csv: 01.08.2001#62.159.232.250#www.selfphp3.de 02.08.2001#212.82.34.222#www.selfphp4.de 02.08.2001#http://suchen.abacho.de#62.159.232.250 03.08.2001#http://www.fireball.de#212.185.44.15 <?php $file_content = 'statistik.csv'; if(file_exists($file_content)) { $fp = fopen($file_content, 'r'); $str = fread($fp, 10); $datei_zeiger_postion = ftell($fp); echo $datei_zeiger_postion . "<br>"; fclose($fp); echo $str; } ?> Ausgabe 10 01.08.2001 oben  fsockopen(string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]]) Initialisiert eine Socket-Verbindung zu der in hostname angegebenen Ressource. PHP unterstützt Ziele im Internet und Unixdomänen, wie sie unter Liste der unterstützten Socket-Transporter beschrieben sind. Eine Liste unterstützter Transportarten können Sie auch mittels stream_get_transports() ermitteln. Der Socket wird standardmäßig im Blocking Mode geöffnet. Sie können auf den Non-Blocking-Modus wechseln, indem Sie die Funktion stream_set_blocking() nutzen. Die Funktion stream_socket_client() ist ähnlich, bietet aber eine reichhaltigere Auswahl von Optionen an, einschließlich blockierungsfreier Verbindungen und der Möglichkeit einen Streamkontext zu übergeben. Die Funktion fsockopen() gibt einen Zeiger auf eine Datei zurück, der zusammen mit den anderen Dateifunktionen (wie fgets(), fwrite(), fclose() und feof()) verwendet werden kann. Wenn der Aufruf fehlschlägt, wird FALSE und eine E_WARNING zurückgegeben. Siehe auch: fopen() fgets() fwrite() fclose() feof() Parameter-Liste hostname ... Ist OpenSSL-Support installiert, können Sie dem Parameter hostname entweder ein ssl:// oder ein tls:// voranstellen, um eine SSL- oder TLS-Verbindung aufzubauen, die via TCP/IP mit dem entfernten Server verbunden wird. port ... Die Portnummer. Diese kann ausgelassen und mit -1 übersprungen werden, wenn der Transport keinen Port verwendet, so wie unix://. errno ... Sofern unterstützt, enthält der Parameter die Fehlernummer des Systemlevels, die beim Aufruf der connect()-Funktion auftrat. Wenn der Rückgabewert von errno 0 ist und die Funktion FALSE zurückgibt, ist dies ein Zeichen, dass der Fehler vor dem connect()-Aufruf auftrat. Dies ist meist der Fall, wenn es ein Problem beim Initialisieren des Sockets gibt. errstr ... Die Fehlermeldung als String. timeout ... Der Connection-Timeout in Sekunden. Hinweis: Wenn Sie einen Timeout für das Lesen oder Schreiben von Daten über den Socket setzen wollen, verwenden Sie stream_set_timeout(), da der timeout-Parameter von fsockopen() nur für das reine Konnektieren des Sockets gedacht ist. Beispiel 1 <?php $fp = fsockopen("www.example.com", 80, $errno, $errstr, 30); if(!$fp) { echo "$errstr ($errno)<br />\n"; } else { $out = "GET / HTTP/1.1\r\n"; $out .= "Host: www.example.com\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); while(!feof($fp)) { echo fgets($fp, 128); } fclose($fp); } ?> Beispiel 2 Das folgende Beispiel zeigt, wie Sie den Tag und die Zeit vom UDP-Service "daytime" (Port 13) Ihrer Maschine abfragen können. <?php $fp = fsockopen("udp://127.0.0.1", 13, $errno, $errstr); if(!$fp) { echo "ERROR: $errno - $errstr<br />\n"; } else { fwrite($fp, "\n"); echo fread($fp, 26); fclose($fp); } ?> oben  Funktionen - vom PHP-Programmierer definierte Funktionen Für Funktionsnamen gelten in PHP die gleichen Regeln wie für andere Bezeichner. Ein gültiger Funktionsname beginnt mit einem Buchstaben oder Unterstrich gefolgt von einer beliebigen Anzahl von Buchstaben, Ziffern und Unterstrichen. Eine Funktion kann wie folgt definiert werden: function foo ($arg_1, $arg_2, ..., $arg_n) { echo "Beispielfunktion.\n"; return $retval; } Hinweis: Weil return ein Sprachkonstrukt und keine Funktion ist, sind die Klammern um das Argument nicht erforderlich und von deren Verwendung wird sogar abgeraten. Jeder beliebige korrekte PHP-Code kann in einer Funktion vorkommen. Die Funktionen müssen definiert sein, bevor man auf sie verweist. Siehe auch: Anhang: Zeichen-»Salat« verhindern Anhang: Variablen: Hinweise zur Schreibweise Beispiel 1 - Zeichenersetzung von länderspezifischen Zeichen durch den entsprechenden HTML-Code (Hinweis: Textkodierung ist UTF-8) Falls Sie sich schon einmal Webseiten angesehen haben, die ein Zeichensatz verwenden den Ihr Rechner nicht kennt, wird Ihnen ein mehr oder weniger großer Zeichensalat entgegenspringen. Die Zeichenersetzung von länderspezifischen Zeichen durch den entsprechenden HTML-Code sorgt für die korrekte Darstellung von länderspezifischen Zeichen. Hinweis: Die Arrays können beliebig erweitert bzw. gekürzt werden. Die Zeichen die dem ASCII-Code 32 bis 126 (englisches Alphabet a-z, A-Z, Zahlen 0-9 und einige Sonderzeichen) entsprechen brauchen nicht durch den HTML-Code ersetzt werden, da sie von jedem Rechner - selbst von japanischen oder chinesischen Rechnern - richtig interpretiert werden. <?php // [...] function standard_char_substitution($GbookDataRecordArray='') { if(!empty($GbookDataRecordArray) && is_array($GbookDataRecordArray)) { // Zeichenersetzung: STANDARD $CharStandardArray = array("&", "\\", "\"","'", "\$", "ä", "ö", "ü", "Ä", "Ö", "Ü", "ß", "ç", "ñ", "æ", "á", "à", "é", "è", "í", "ì", "ó", "ò", "ú", "ù", "ë", "ï", "ê", "«", "»", "%", "|", "<", ">", "€"); // Zeichenersetzung: STANDARD - HTML-Code $CharStandardReplacementArray = array("&amp;", "&#92;", "&quot;", "&#39;", "&#36;", "&auml;", "&ouml;", "&uuml;","&Auml;", "&Ouml;", "&Uuml;", "&szlig;", "&ccedil;", "&ntilde;", "&aelig;", "&aacute;", "&agrave;", "&eacute;", "&egrave;", "&iacute;", "&igrave;", "&oacute;", "&ograve;", "&uacute;", "&ugrave;", "&euml;", "&iuml;", "&ecirc;", "&laquo;", "&raquo;", "&#37;", "&#124;", "&lt;", "&gt;", "&euro;"); $CharStandardReplacementArrayCount = count($CharStandardReplacementArray); $GbookDataRecordArrayCount = count($GbookDataRecordArray); for($x=0; $x<$GbookDataRecordArrayCount; $x++) { for($y=0; $y<$CharStandardReplacementArrayCount; $y++) { $GbookDataRecordArray[$x] = @strip_tags($GbookDataRecordArray[$x]); // HTML-Tags entfernen $GbookDataRecordArray[$x] = str_replace($CharStandardArray[$y], $CharStandardReplacementArray[$y], $GbookDataRecordArray[$x]); } } } return $GbookDataRecordArray; } // HINWEIS: die Funktion guestbook_char_substitution() erst nach der Funktion standard_char_substitution() aufrufen function guestbook_char_substitution($GbookDataRecordArray='') { if(!empty($GbookDataRecordArray) && is_array($GbookDataRecordArray)) { $GbookDataRecordArrayCount = count($GbookDataRecordArray); for($x=0; $x<$GbookDataRecordArrayCount; $x++) { // doppelte Leerzeichen durch den HTML-Code ersetzen $GbookDataRecordArray[$x] = str_replace(' ', '&nbsp;&nbsp;', $GbookDataRecordArray[$x]); // Zeilenumbrueche der Textfelder werden in HTML-Code umgesetzt $GbookDataRecordArray[$x] = preg_replace('/\r\n|\r|\n/', '<br />', $GbookDataRecordArray[$x]); } } return $GbookDataRecordArray; } $guestbook_user_entering_array = array(); // Uebergabe von Texten an das Array $guestbook_user_entering_array // [...] // Zeichenersetzung: spezielle Zeichen in den HTML-Code uebersetzen if(!empty($guestbook_user_entering_array) && is_array($guestbook_user_entering_array)) { // Funktionsaufruf $guestbook_user_entering_array = standard_char_substitution($guestbook_user_entering_array); $guestbook_user_entering_array = guestbook_char_substitution($guestbook_user_entering_array); } // [...] ?> Beispiel 2 Zeichenersetzung, um die Übergabe von HTML-Code und speziellen Zeichen von Webseitenbenutzern an eine Datenbank zu verhindern (Hinweis: einige Zeichen haben für Datenbanken eine besondere Bedeutung). Einige Sonderzeichen wurden hier aufgenommen, da sie für die Nachbildung von ein- oder mehrdimensionalen Arrays in CSV-Dateien verwendet werden und sie dürfen deshalb in den Texten nicht enthalten sein. Hinweis: Das &-Zeichen und sein HTML-Code &amp; bzw. das #-Zeichen und sein HTML-Code &#35; sollten am Anfang stehen, da sonst das &-Zeichen bzw. #-Zeichen im HTML-Code (z.B. &#39;) wieder entfernt würde. <?php // [...] function standard_char_substitution($GbookDataRecordArray='') { if(!empty($GbookDataRecordArray) && is_array($GbookDataRecordArray)) { // Zeichenersetzung: STANDARD $CharStandardArray = array("&", "\\", "\"","'", "\$", "%", "|", "<", ">"); // Zeichenersetzung: STANDARD - HTML-Code $CharStandardReplacementArray = array("&amp;", "&#92;", "&quot;", "&#39;", "&#36;", "&#37;", "&#124;", "&lt;", "&gt;"); $CharStandardReplacementArrayCount = count($CharStandardReplacementArray); $GbookDataRecordArrayCount = count($GbookDataRecordArray); for($x=0; $x<$GbookDataRecordArrayCount; $x++) { for($y=0; $y<$CharStandardReplacementArrayCount; $y++) { $GbookDataRecordArray[$x] = @strip_tags($GbookDataRecordArray[$x]); // HTML-Tags entfernen $GbookDataRecordArray[$x] = str_replace($CharStandardArray[$y], $CharStandardReplacementArray[$y], $GbookDataRecordArray[$x]); } } } return $GbookDataRecordArray; } $guestbook_user_entering_array = array(); // Uebergabe von Texten an das Array $guestbook_user_entering_array // [...] // Zeichenersetzung: spezielle Zeichen in den HTML-Code uebersetzen if(!empty($guestbook_user_entering_array) && is_array($guestbook_user_entering_array)) { // Funktionsaufruf $guestbook_user_entering_array = standard_char_substitution($guestbook_user_entering_array); } // [...] ?> oben  fwrite(resource fp, string str [, int length]) Mit fwrite() kann man bestimmte Daten (str) an die aktuelle Position des Dateizeigers in eine Datei (fp) schreiben. Wird der dritte optionale Wert für die Länge (length) des Strings nicht angegeben, so wird der gesamte String an die Position des Dateizeigers geschrieben. Wird die Länge angegeben, so wird der String auf die vorgegebene Länge gekürzt. Die Funktion gibt die Anzahl der geschriebenen Bytes zurück oder FALSE bei einem Fehler. Bedenken Sie, dass die Datei mit "b" geöffnet werden muss, falls Sie ein System nutzen, welches zwischen Binär- und Textdateien unterscheidet (z.B. Windows). Siehe auch: trim() flock() fclose() fputs() - Die Funktion fputs ist ein Alias von fwrite(). fopen() fread() file() Parameter-Liste fp ... Eine Dateisystemressource (resource), wie sie in der Regel von fopen() zurückgegeben wird. str ... Die zu schreibende Zeichenkette. length ... Wenn der length Parameter angegeben wird, wird das Schreiben nach length Bytes beendet, oder wenn das Ende von string erreicht ist, je nachdem was eher eintritt. Sollte der length Parameter gesetzt sein, so ist zu beachten, dass die magic_quotes_runtime Konfigurations-Option ignoriert wird und somit keine Schrägstriche mehr von der Zeichenkette string entfernt werden. Hinweis: Falls magic_quotes_runtime aktiviert ist (php.ini), werden die meisten Funktionen die Daten von einer beliebigen externen Quelle zurückgeben, inklusive Datenbanken und Textdateien, die in den Daten enthaltenen Anführungszeichen mit einem Backslash geschützt zurückgeben. Einige Funktionen die von magic_quotes_runtime betroffen sind: file() fgets() fwrite() fread() fputs() exec() mysqli_fetch_row() mysqli_fetch_array() mysqli_fetch_object() [...] Beispiel 1 <?php $text = "Dieser Text wird gespeichert"; $fp = fopen("members.txt","w"); fwrite($fp,$text,11); fclose($fp); $fp = fopen("members.txt","r"); $str = fgets($fp,30); fclose($fp); echo $str; ?> Ausgabe Dieser Text Beispiel 2 Eine Zeile in eine neue Datei schreiben. <?php // [...] $logbook_filepath = './logbook.txt'; $logbook_time = time() + (3600 * 24 * 14); $logbook_content = $logbook_time . "\n"; if(!file_exists($logbook_filepath)) { @touch($logbook_filepath); @chmod($logbook_filepath, 0600); if($file_write = @fopen($logbook_filepath,'w')) { @flock($file_write,2); @fwrite($file_write,$logbook_content); @flock($file_write,3); @fclose($file_write); } } $fp = fopen($logbook_filepath, "r"); $str = fgets($fp,30); fclose($fp); echo $str; // [...] ?> Beispiel 3: Eine neue Zeile in eine bestehende Textdatei anhängen. <?php // [...] $logbook_filepath = './logbook.txt'; $logbook_line_number = '00234'; $logbook_new_line = " " . $logbook_line_number . " |"; $logbook_new_line .= " " . date("D d.m.Y - H:i:s") . " |"; $logbook_new_line .= " " . $_SERVER['REMOTE_ADDR'] . " |"; $logbook_new_line .= " " . $_SERVER['REMOTE_PORT'] . " |"; $logbook_new_line .= " " . $_SERVER['HTTP_USER_AGENT'] . "\n"; if($file_write = @fopen($logbook_filepath,'a')) { @flock($file_write,2); @fwrite($file_write,$logbook_new_line); @flock($file_write,3); @fclose($file_write); } $ilne_array = file($logbook_filepath); print "<pre>"; print_r($ilne_array); print "</pre>"; // [...] ?>
Seitenanfang 

G

getcwd get_defined_constants get_loaded_extensions gettimeofday gmdate oben  getcwd() Mit getcwd() kann man sich das Arbeitsverzeichnis zurückgeben lassen (von der Datei ausgehend, welche man gerade aufgerufen hat). Dabei wird der komplette Pfad ab dem Dokumenten-Root (Wurzelverzeichnis) zurückgegeben. Gibt bei Erfolg das aktuelle Arbeitsverzeichnis zurück, im Fehlerfall FALSE. Hinweis: Auf einigen Unix-Varianten gibt getcwd() FALSE zurück, wenn eines der darüber liegenden Verzeichnisse keine Lese- oder Suchrechte haben, auch wenn das aktuelle Verzeichnis diese hat. Wurde der PHP-Interpreter mit ZTS (Zend Thread Safety) kompiliert, kann sich das aktuelle Arbeitsverzeichnis, das von getcwd() zurückgegeben wird, von dem was von Betriebssystemschnittstellen zurückgegeben wird, unterscheiden. Externe Bibliotheken, die sich nach dem aktuellen Arbeitsverzeichnis richten, sind davon betroffen. Beispiel <?php echo getcwd(); ?> Ausgabe /data/members/free/tripod/de/c/h/o/choreograph23/htdocs oben  get_defined_constants([bool $categorize = FALSE]) Mit get_defined_constants() kann man sich die Namen und Werte aller definierten Konstanten anzeigen lassen. Diese beeinhaltet auch alle Konstanten, die mit define() definiert wurden. Es ist möglich dem optionalen Parameter categorize einen Wert (true) zu übergeben. Das zurückgegebene Array ist dann kategorisch eingeteilt (siehe: Beispiel 2). Es spielt dabei keine Rolle welchen Wert man dem Parameter categorize übergibt, ob "a", "b", "TRUE", "SELFPHP" oder "Damir", völlig egal. Ist categorize (Default-Wert = false) leer, wird die Einteilung in Kategorien nicht vorgenommen. Siehe auch: get_loaded_extensions() Beispiel 1 <?php define("MY_CONSTANT", 1); print "<pre>"; print_r(get_defined_constants()); print "</pre>"; ?> Ausgabe 1 Array ( [E_ERROR] => 1 [E_RECOVERABLE_ERROR] => 4096 [E_WARNING] => 2 [E_PARSE] => 4 [E_NOTICE] => 8 [E_STRICT] => 2048 [E_DEPRECATED] => 8192 [E_CORE_ERROR] => 16 [E_CORE_WARNING] => 32 [E_COMPILE_ERROR] => 64 [E_COMPILE_WARNING] => 128 [E_USER_ERROR] => 256 [E_USER_WARNING] => 512 [E_USER_NOTICE] => 1024 [E_USER_DEPRECATED] => 16384 [E_ALL] => 32767 [DEBUG_BACKTRACE_PROVIDE_OBJECT] => 1 [DEBUG_BACKTRACE_IGNORE_ARGS] => 2 [TRUE] => 1 [FALSE] => [...] [XSL_SECPREF_READ_NETWORK] => 16 [XSL_SECPREF_WRITE_NETWORK] => 32 [XSL_SECPREF_DEFAULT] => 44 [LIBXSLT_VERSION] => 10129 [LIBXSLT_DOTTED_VERSION] => 1.1.29 [LIBEXSLT_VERSION] => 817 [LIBEXSLT_DOTTED_VERSION] => 1.1.29 [MY_CONSTANT] => 1 ) Beispiel 2 <?php define("MY_CONSTANT", 1); print "<pre>"; print_r(get_defined_constants(true)); print "</pre>"; ?> Ausgabe 2 Array ( [Core] => Array ( [E_ERROR] => 1 [E_RECOVERABLE_ERROR] => 4096 [E_WARNING] => 2 [E_PARSE] => 4 [E_NOTICE] => 8 [E_STRICT] => 2048 [E_DEPRECATED] => 8192 [E_CORE_ERROR] => 16 [E_CORE_WARNING] => 32 [E_COMPILE_ERROR] => 64 [E_COMPILE_WARNING] => 128 [E_USER_ERROR] => 256 [E_USER_WARNING] => 512 [E_USER_NOTICE] => 1024 [E_USER_DEPRECATED] => 16384 [E_ALL] => 32767 [DEBUG_BACKTRACE_PROVIDE_OBJECT] => 1 [...] [UPLOAD_ERR_OK] => 0 [UPLOAD_ERR_INI_SIZE] => 1 [UPLOAD_ERR_FORM_SIZE] => 2 [UPLOAD_ERR_PARTIAL] => 3 [UPLOAD_ERR_NO_FILE] => 4 [UPLOAD_ERR_NO_TMP_DIR] => 6 [UPLOAD_ERR_CANT_WRITE] => 7 [UPLOAD_ERR_EXTENSION] => 8 ) [...] [xsl] => Array ( [XSL_CLONE_AUTO] => 0 [XSL_CLONE_NEVER] => -1 [XSL_CLONE_ALWAYS] => 1 [XSL_SECPREF_NONE] => 0 [XSL_SECPREF_READ_FILE] => 2 [XSL_SECPREF_WRITE_FILE] => 4 [XSL_SECPREF_CREATE_DIRECTORY] => 8 [XSL_SECPREF_READ_NETWORK] => 16 [XSL_SECPREF_WRITE_NETWORK] => 32 [XSL_SECPREF_DEFAULT] => 44 [LIBXSLT_VERSION] => 10129 [LIBXSLT_DOTTED_VERSION] => 1.1.29 [LIBEXSLT_VERSION] => 817 [LIBEXSLT_DOTTED_VERSION] => 1.1.29 ) [user] => Array ( [MY_CONSTANT] => 1 ) ) Beispiel 3 <?php // [...] $types_array=array(); $constants = get_defined_constants(true); foreach($constants['mysqli'] as $c => $n) if(preg_match('/^MYSQLI_TYPE_(.*)/', $c, $m)) $types_array[$n] = $m[1]; $types_array_count = count($types_array); // [...] print "<pre>"; print_r ($types_array); print "</pre>"; ?> Ausgabe 3 Array ( [0] => DECIMAL [1] => CHAR [2] => SHORT [3] => LONG [4] => FLOAT [5] => DOUBLE [6] => NULL [7] => TIMESTAMP [8] => LONGLONG [9] => INT24 [10] => DATE [11] => TIME [12] => DATETIME [13] => YEAR [14] => NEWDATE [247] => INTERVAL [248] => SET [249] => TINY_BLOB [250] => MEDIUM_BLOB [251] => LONG_BLOB [252] => BLOB [253] => VAR_STRING [254] => STRING [255] => GEOMETRY [245] => JSON [246] => NEWDECIMAL [16] => BIT ) oben  get_loaded_extensions([bool $zend_extensions = FALSE]) Mit get_loaded_extensions() kann man sich ein Array zurückgeben lassen, welches alle Module auflistet, die kompiliert und geladen sind. Der Parameter zend_extensions legt fest ob nur Zend Extensions (Module) zurückgegeben werden sollen. Vorgabewert ist FALSE d.h. es werden nur reguläre Extensions (Module) zurückgegeben. Siehe auch: extension_loaded() phpinfo() Beispiel 1 <?php $module_array = get_loaded_extensions(); for($x=0;$x<count($module_array);$x++) { $key = key($module_array); $val =$module_array[$key]; echo $key . " - " . $val . "<br>"; next($module_array); } ?> Ausgabe 1 0 - Core 1 - date 2 - libxml 3 - openssl 4 - pcre 5 - sqlite3 6 - zlib 7 - bcmath 8 - bz2 9 - calendar 10 - ctype 11 - curl 12 - dba 13 - dom 14 - hash 15 - fileinfo 16 - filter 17 - ftp 18 - gd 19 - gettext 20 - SPL 21 - iconv 22 - session 23 - intl 24 - json 25 - ldap 26 - mbstring 27 - mcrypt 28 - standard 29 - mysqlnd 30 - mysqli 31 - PDO 32 - pdo_mysql 33 - pdo_pgsql 34 - pdo_sqlite 35 - Phar 36 - posix 37 - Reflection 38 - imap 39 - shmop 40 - SimpleXML 41 - soap 42 - sockets 43 - exif 44 - sysvsem 45 - sysvshm 46 - tokenizer 47 - wddx 48 - xml 49 - xmlreader 50 - xmlrpc 51 - xmlwriter 52 - xsl 53 - zip 54 - apache2handler Beispiel 2 PHP-Module anzeigen <?php print "<pre>"; print_r(get_loaded_extensions()); print "</pre>"; ?> Ausgabe 2 Array ( [0] => Core [1] => date [2] => libxml [3] => openssl [4] => pcre [5] => sqlite3 [6] => zlib [7] => bcmath [8] => bz2 [9] => calendar [10] => ctype [11] => curl [12] => dba [13] => dom [14] => hash [15] => fileinfo [16] => filter [17] => ftp [18] => gd [19] => gettext [20] => SPL [21] => iconv [22] => session [23] => intl [24] => json [25] => ldap [26] => mbstring [27] => mcrypt [28] => standard [29] => mysqlnd [30] => mysqli [31] => PDO [32] => pdo_mysql [33] => pdo_pgsql [34] => pdo_sqlite [35] => Phar [36] => posix [37] => Reflection [38] => imap [39] => shmop [40] => SimpleXML [41] => soap [42] => sockets [43] => exif [44] => sysvsem [45] => sysvshm [46] => tokenizer [47] => wddx [48] => xml [49] => xmlreader [50] => xmlrpc [51] => xmlwriter [52] => xsl [53] => zip [54] => apache2handler ) oben  gettimeofday([bool $returnFloat = FALSE]) Die Funktion gibt standardmäßig ein assoziatives Array zurück, das die Daten enthält, die der Systemaufruf produziert hat. Siehe auch: time() date() microtime() sleep() usleep() Parameter-Liste returnFloat ... Sofern auf TRUE gesetzt, wird eine Fließkommazahl (Typ: float) anstelle des Arrays zurückgegeben. Array-Schlüssel: "sec" - Sekunden seit der Unix-Epoche "usec" - Microsekunden "minuteswest" - Minuten westlich von Greenwich "dsttime" - Art der Korrektur der Sommerzeit Beispiel 1 <?php $start_time = gettimeofday(true); // Start der Zeitmessung fuer die Abarbeitung von Programmroutinen $work_time_messages="Berechnungszeit (PHP-Server):"; // Meldung, Information an den Benutzer $time_second_messages="Sekunden"; // Meldung, Information an den Benutzer $program_version="v. 3.0"; // Programm-Version $footer_date_time_current="Welcome to XYZ " . $program_version . " - " . date("l, d.m.Y - H:i:s"); // viele Programmzeilen [...] usleep(100); $end_time = gettimeofday(true); $result_round_time = round(($end_time - $start_time), 5); $footer_date_time_current = $footer_date_time_current . " - " . $work_time_messages . " " . $result_round_time . " " . $time_second_messages; echo $footer_date_time_current; ?> Ausgabe 1 Welcome to XYZ v. 3.0 - Friday, 09.07.2021 - 09:37:58 - Berechnungszeit (PHP-Server): 0.00032 Sekunden Beispiel 2 <?php $start_time = gettimeofday(); // Start der Zeitmessung fuer die Abarbeitung von Programmroutinen // viele Programmzeilen [...] sleep(1); $end_time = gettimeofday(); $result_round_time = round(($end_time['sec'] + $end_time['usec'] / 1000000) - ($start_time['sec'] + $start_time['usec'] / 1000000), 5); echo "Erstellungszeit:" . $result_round_time . "Sekunden"; ?> Ausgabe 2 Erstellungszeit:1.00044Sekunden oben  gmdate(string $format [, int $timestamp = time() ]) Die Funktion gmdate Formatiert eine GMT/UTC Zeit-/Datumsangabe. Die Funktion ist identisch zur Funktion date(), ausgenommen dass die zurückgegebene Zeitangabe Greenwich Mean Time (GMT) entspricht. Die Funktion gibt einen formatierten Datumsstring zurück. Wenn ein nichtnumerischer Wert für timestamp verwendet wird, wird FALSE zurückgegeben und eine Fehlermeldung vom Typ E_WARNING erzeugt. Siehe auch: date() mktime() time() Parameter-Liste format ... Das Format des ausgegebenen Datumsstrings. Siehe auch die Formatierungsoptionen der date()-Funktion. timestamp ... Der optionale Parameter timestamp ist ein Unix Timestamp als integer oder die aktuelle lokale Zeit wenn keine timestamp übergeben wurde. Er entspricht dann dem Ergebnis der Funktion time(). Beispiel 1 Wenn das Skript in Finnland (GMT +0200) ausgeführt wird, gibt die erste Zeile "Jan 01 1998 00:00:00" aus, während die zweite Zeile "Dec 31 1997 22:00:00" zurückgibt. <?php echo date("M d Y H:i:s", mktime(0, 0, 0, 1, 1, 1998)) . "<br>"; echo gmdate("M d Y H:i:s", mktime(0, 0, 0, 1, 1, 1998)); ?> Beispiel 2 <?php $filename = "./test.txt"; $current_filename_mtime = filemtime($filename); echo gmdate("Y-m-d H:i:s", $current_filename_mtime); ?>
Seitenanfang 

H

header hexdec highlight_file highlight_string htmlspecialchars htmlentities oben  header( string $header [, bool $replace = TRUE [, int $http_response_code ]]) Die Funktion header() wird zum Senden von HTTP-Anfangsinformationen (Header) im Rohformat benutzt. Weitere Informationen über die HTTP Header finden Sie in der » HTTP/1.1 Spezifikation. Beachten Sie, dass Sie die Funktion header() aufrufen müssen, bevor Sie irgendeine andere Art von Ausgabe (seien es normale HTML-Tags, Leerzeilen in einer Datei oder von PHP) zum Client schicken. Es handelt sich hier um einen typischen Fehler, der zum Beispiel auftritt, wenn Sie Code mittels include oder require oder einer anderen Dateizugriffs-Funktion einlesen, die Leerzeichen oder Leerzeilen enthalten, die ausgegeben werden, bevor header() aufgerufen wird. Das gleiche Problem kann auch auftreten, wenn Sie eine Datei verwenden, in der HTML und PHP vermischt wurden. Hinweis: Die Session-ID wird nicht mit dem Location-Header übermittelt, selbst wenn session.use_trans_sid eingeschaltet ist. Sie muss daher manuell durch Verwendung der SID-Konstante hinzugefügt werden. Es wird kein Wert (Rückgabewert) zurückgegeben. Parameter-Liste header ... Der Header-String. Es gibt zwei Spezialfälle von Header-Aufrufen. Der erste ist ein Header, der mit "HTTP/" beginnt (ob Groß- oder Kleinschreibung ist nicht relevant) und zum Herausfinden des zu sendenden HTTP Statuscodes verwendet wird. Wenn Sie zum Beispiel Apache konfiguriert haben, um ein PHP Skript zum Bearbeiten von Anforderungen fehlender Dateien (mittels der ErrorDocument-Direktive) zu verwenden, möchten Sie bestimmt sicherstellen, dass Ihr Skript den passenden Statuscode generiert. <?php header("HTTP/1.0 404 Not Found"); ?> Der zweite Spezialfall ist der "Location:" Header. Es wird nicht nur der Header an den Browser geschickt, sondern auch ein REDIRECT (302) Statuscode, wenn nicht bereits der 201- oder ein 3xx-Statuscode gesendet wurde. <?php header("Location: http://www.example.com/"); /* Browser umleiten */ /* Stellen Sie sicher, dass der nachfolgende Code nicht ausgefuehrt wird, wenn eine Umleitung stattfindet. */ exit; // [...] ?> replace ... Der optionale Parameter replace gibt an, ob der Header einen vorhergehenden gleichartigen Header ersetzen soll, oder ob ein zweiter Header des selben Typs hinzugefügt werden soll. Standardmäßig wird ersetzt; wenn Sie als zweites Argument FALSE übergeben, können Sie so mehrere Header desselben Typs erzwingen. Zum Beispiel: <?php header('WWW-Authenticate: Negotiate'); header('WWW-Authenticate: NTLM', false); ?> http_response_code ... Forciert einen HTTP-Response-Code des angegebenen Wertes. Dieser Parameter hat nur einen Effekt, wenn der Parameter header nicht leer ist. Beispiel 1 <html> <?php /* Dies wird moeglicherweise einen Fehler provozieren. Beachten Sie die vorangehende Ausgabe (<html>), die vor dem Aufruf von header() erzeugt wird */ header('Location: http://www.example.com/'); exit; ?> Beispiel 2 header("Location: http://www.example.com"); // Umleitung des Browsers exit; // Sicher stellen, das nicht trotz Umleitung nachfolgender Code ausgeführt wird. oder session_start(); header("Location: ueberblick.php?".SID.""); oder header("Location: ".$PHP_SELF."?".SID.""); /*ueberbli.php muss sich im demselben Verzeichnis wie das aufrufende Skript befinden, zusätzlich wird hier auch die PHPSESSION-ID weitergegeben.*/ exit; oder header("Location: http://" . $_SERVER['HTTP_HOST'] . "/admin/login.php"); exit; PHP-Skripte erzeugen oft dynamisches HTML, das weder vom Browser noch von irgendeinem Proxy zwischen Web-Server und Client-Browser gepuffert ("gecached") werden soll bzw. darf. Bei vielen Proxies und Browsern kann das Cachen unterbunden werden und zwar mit: header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Datum der Vergangenheit header ("Last-Modified: " . gmdate ("D, d M Y H:i:s") . " GMT"); // immer geändert header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header ("Pragma: no-cache"); // HTTP/1.0 oben  hexdec(string hex_string) Mit hexdec() wird eine hexadezimale Zahl (hex_string) in eine dezimale Zahl konvertiert. Der größte konvertierbare Wert ist "7fffffff", das entspricht 2147483647 dezimal (2 hoch 32 minus 1). Hinweis: Von PHP 7.4.0 an wird die Übergabe jeglicher ungültiger Zeichen - nicht hexadezimal kodierten Zeichen (0-9 a-f) - missbilligt. Siehe auch: dechex() decoct() Anhang: Typen von Integer-Zahlen <?php echo hexdec("2a"); ?> Ausgabe 42 oben  highlight_file(string $filename [, bool $return = FALSE]) Die Funktion highlight_file() erzeugt die Ausgabe des Codes der Datei filename mit hervorgehobener Syntax. Dabei werden die Farben des in PHP eingebauten Syntax-Highlighter benutzt. Falls return auf TRUE gesetzt ist, wird der hervorgehobene Code nicht direkt ausgegeben, sondern als Zeichenkette zurückgegeben. Andernfalls wird bei Erfolg TRUE zurückgegeben und FALSE, falls ein Fehler auftritt. Hinweis: Wenn highlight_file() verwendet wird, sollte darauf geachtet werden, dass nicht versehentlich vertrauliche Informationen wie zum Beispiel Passwörter oder andere Informationen, die ein potentielles Sicherheitsrisiko schaffen könnten, verraten werden. Siehe auch: highlight_string() show_source() Parameter-Liste Dateiname ... Der Pfad zur PHP-Datei, deren Code hervorgehoben werden soll. return ... Wenn dieser Parameter auf TRUE gesetzt wird, gibt die Funktion den hervorgehobenen Code zurück. oben  highlight_string(string $str [, bool $return = FALSE ]) Die Funktion highlight_string() gibt den String str (Programmcode) mit hervorgehobener Syntax (Syntax highlighting) aus. Dabei werden die Farben des in PHP eingebauten Syntax-Highlighter benutzt. Wenn return auf TRUE gesetzt ist, wird der gehighlightete Code als String zurückgegeben, statt ihn direkt auszugeben. In allen anderen Fällen wird im Erfolgsfall TRUE und im Fehlerfall FALSE zurückgegeben. Siehe auch: highlight_file() show_source() Parameter-Liste str ... Der zu highlightende PHP-Code. Dieser sollte den öffnenden Tag enthalten. return ... Wenn Sie diesen Parameter auf TRUE setzen, gibt die Funktion den gehighlighteten Code zurück. Beispiel <?php highlight_string('<?php phpinfo(); ?>'); ?> Ausgabe - Seitenquelltext <code><span style="color: #000000"> <span style="color: #0000BB">&lt;?php&nbsp;phpinfo</span><span style="color: #007700">();&nbsp;</span><span style="color: #0000BB">?&gt;</span> </span> </code> oben  htmlspecialchars(string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = TRUE ]]]) Mit htmlspecialchars() werden bestimmte Sonderzeichen in den dafür vorgesehenen HTML-Code umgewandelt. Der zweite Parameter (int $flags) ist optional. Dieser Parameter bewirkt, dass Anführungszeichen mit berücksichtigt werden. Standardmäßig ist der Wert ENT_COMPAT | ENT_HTML401 aktiviert. Falls Sie eine vollständige Umwandlung der HTML-Zeichen benötigen, so nutzen Sie die Funktion htmlentities(). Die Funktion gibt den konvertierte string zurück. Enthält der string eine in dem übergebenen encoding ungültige Code Unit Sequenz, wird eine leere Zeichenkette zurückgegeben, sofern weder das ENT_IGNORE noch das ENT_SUBSITUTE Flag gesetzt sind. Siehe auch: htmlentities() Parameter-Liste string ... Die zu konvertierende Zeichenkette. flags ... Eine Bitmaske von einem oder mehreren der folgenden Flags, die die Behandlung von Anführungszeichen, ungültigen Zeichenfolgen und den genutzten Dokumententyp festlegen. Der Standardwert ist ENT_COMPAT | ENT_HTML401. Mögliche Angaben für int $flags: ENT_COMPAT - Umwandlung von doppelten Anführungszeichen ENT_QUOTES - Umwandlung beider Arten (einfache und doppelte Anführungszeichen) ENT_NOQUOTES - Anführungszeichen werden nicht umgewandelt [...] ENT_HTML401 - Behandle Code als HTML 4.01. ENT_XML1 - Behandle Code als XML 1. ENT_XHTML - Behandle Code als XHTML. ENT_HTML5 - Behandle Code als HTML 5. Im Fall von mehrdeutigen flags-Werten, gelten die folgenden Regeln: Wird weder ENT_COMPAT, ENT_QUOTES oder ENT_NOQUOTES angegeben, ist der Standardwert ENT_NOQUOTES. Werden mehrere von ENT_COMPAT, ENT_QUOTES und ENT_NOQUOTES angegeben, erhält ENT_QUOTES den Vorrang, gefolgt von ENT_COMPAT. Wird weder ENT_HTML401, ENT_HTML5, ENT_XHTML noch ENT_XML1 angegeben, ist der Standardwert ENT_HTML401. Werden mehrere von ENT_HTML401, ENT_HTML5, ENT_XHTML und ENT_XML1 angegeben, erhält ENT_HTML5 den Vorrang, gefolgt von ENT_XHTML, ENT_XML1 und ENT_HTML401. Folgende Umwandlung wird unterstützt: Einfache Anführungszeichen (') - aus dem einfachen Anführungszeichen wird ein &#039; (für ENT_HTML401) oder &apos; (für ENT_XML1, ENT_XHTML oder ENT_HTML5), aber nur wenn ENT_QUOTES gesetzt ist Doppelte Anführungszeichen (") - aus dem doppelten Anführungszeichen wird ein &quot; falls ENT_NOQUOTES nicht gesetzt ist Kaufmännisches Und (&) - aus dem kaufmännischen UND wird ein &amp; Kleiner als (<) - aus dem kleiner als wird ein &lt; Größer als (>) - aus dem größer als wird ein &gt; encoding (charset) ... Ein optionaler Parameter, der die Zeichenkodierung für eine Konvertierung definiert. Wird dieser Parameter ausgelassen, so wird der Standardwert für encoding verwendet, welcher von der verwendeten PHP-Version abhängig ist. Die folgenden Zeichensätze (charset) werden unterstützt: ISO-8859-1, Latin-1, ISO8859-5, ISO8859-15, Latin-9, UTF-8, cp866, ibm866, 866, cp1251, Windows-1251, win-1251, 1251, cp1252, Windows-1252, 1252, KOI8-R, koi8-ru, koi8r, BIG5, 950, GB2312, 936, BIG5-HKSCS, Big5, Shift_JIS, SJIS, SJIS-win, cp932, 932, EUC-JP, EUCJP, eucJP-win, MacRoman Hinweis: Weitere Zeichensätze sind nicht implementiert. Stattdessen wird die Standard-Kodierung verwendet und eine Warnung ausgegeben. double_encode ... Wird der Parameter double_encode ausgeschaltet (FALSE), kodiert PHP bereits existierende HTML-Entities nicht noch einmal. Standardmäßig werden jedoch alle Zeichen konvertiert. Beispiel <?php $string = "' \" & < >"; echo htmlspecialchars($string, ENT_QUOTES | ENT_HTML5); ?> Ausgabe - Seitenquelltext &#039; &quot; &amp; &lt; &gt; oben  htmlentities(string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = TRUE ]]]) Die Funktion htmlentities() wandelt alle geeigneten Zeichen in entsprechende HTML-Codes um. Der zweite optionale Parameter int $flags ist standardmäßig auf den Wert ENT_COMPAT | ENT_HTML401 gesetzt. Die Funktion ist komplett identisch zu htmlspecialchars(), allerdings wandelt htmlentities() wirklich alle Zeichen, die eine HTML-Code-Entsprechung haben, in diese Entsprechung um. Möchten Sie stattdessen die HTML Entities dekodieren, verwenden Sie bitte die Funktion html_entity_decode(). Siehe auch: htmlspecialchars() Parameter-Liste string ... Die zu konvertierende Zeichenkette. flags ... Eine Bitmaske von einem oder mehreren der folgenden Flags, die die Behandlung von Anführungszeichen, ungültigen Zeichenfolgen und den genutzten Dokumententyp festlegen. Der Standardwert ist ENT_COMPAT | ENT_HTML401. Mögliche Angaben für int $flags: ENT_COMPAT - Umwandlung von doppelten Anführungszeichen ENT_QUOTES - Umwandlung beider Arten (einfache und doppelte Anführungszeichen) ENT_NOQUOTES - Anführungszeichen werden nicht umgewandelt [...] ENT_HTML401 - Behandle Code als HTML 4.01. ENT_XML1 - Behandle Code als XML 1. ENT_XHTML - Behandle Code als XHTML. ENT_HTML5 - Behandle Code als HTML 5. Hinweis: %!?|#\/;,.-_:@{[]}=~ und einige weitere, werden nicht umgewandelt. Im Fall von mehrdeutigen flags-Werten, gelten die folgenden Regeln: Wird weder ENT_COMPAT, ENT_QUOTES oder ENT_NOQUOTES angegeben, ist der Standardwert ENT_NOQUOTES. Werden mehrere von ENT_COMPAT, ENT_QUOTES und ENT_NOQUOTES angegeben, erhält ENT_QUOTES den Vorrang, gefolgt von ENT_COMPAT. Wird weder ENT_HTML401, ENT_HTML5, ENT_XHTML noch ENT_XML1 angegeben, ist der Standardwert ENT_HTML401. Werden mehrere von ENT_HTML401, ENT_HTML5, ENT_XHTML und ENT_XML1 angegeben, erhält ENT_HTML5 den Vorrang, gefolgt von ENT_XHTML, ENT_XML1 und ENT_HTML401. Folgende Umwandlung wird unterstützt: Einfache Anführungszeichen (') - aus dem einfachen Anführungszeichen wird ein &#039; (für ENT_HTML401) oder &apos; (für ENT_XML1, ENT_XHTML oder ENT_HTML5), aber nur wenn ENT_QUOTES gesetzt ist Doppelte Anführungszeichen (") - aus dem doppelten Anführungszeichen wird ein &quot; falls ENT_NOQUOTES nicht gesetzt ist Kaufmännisches Und (&) - aus dem kaufmännischen UND wird ein &amp; Kleiner als (<) - aus dem kleiner als wird ein &lt; Größer als (>) - aus dem größer als wird ein &gt; Hinweis: Die Funktion ist komplett identisch zu htmlspecialchars(), allerdings wandelt htmlentities() wirklich alle Zeichen, die eine HTML-Code-Entsprechung haben, in diese Entsprechung um. encoding (charset) ... Ein optionaler Parameter, der die Zeichenkodierung für eine Konvertierung definiert. Wird dieser Parameter ausgelassen, so wird der Standardwert für encoding verwendet, welcher von der verwendeten PHP-Version abhängig ist. Die folgenden Zeichensätze (charset) werden unterstützt: ISO-8859-1, Latin-1, ISO8859-5, ISO8859-15, Latin-9, UTF-8, cp866, ibm866, 866, cp1251, Windows-1251, win-1251, 1251, cp1252, Windows-1252, 1252, KOI8-R, koi8-ru, koi8r, BIG5, 950, GB2312, 936, BIG5-HKSCS, Big5, Shift_JIS, SJIS, SJIS-win, cp932, 932, EUC-JP, EUCJP, eucJP-win, MacRoman Hinweis: Weitere Zeichensätze sind nicht implementiert. Stattdessen wird die Standard-Kodierung verwendet und eine Warnung ausgegeben. double_encode ... Wird der Parameter double_encode ausgeschaltet (FALSE), kodiert PHP bereits existierende HTML-Entities nicht noch einmal. Standardmäßig werden jedoch alle Zeichen konvertiert. Beispiel 1 <?php $string = "<b>PHP 3/4</b> Die Befehlsreferenz"; echo htmlentities($string); ?> Ausgabe 1 - Seitenquelltext &lt;b&gt;PHP 3/4&lt;/b&gt; Die Befehlsreferenz Beispiel 2 <?php $str = "Ein 'Anführungszeichen' ist <b>fett</b>"; // Gibt aus: Ein 'Anf&uuml;hrungszeichen' ist &lt;b&gt;fett&lt;/b&gt; echo htmlentities($str) . "<br>\n"; // Gibt aus: Ein &#039;Anf&uuml;hrungszeichen&#039; ist &lt;b&gt;fett&lt;/b&gt; echo htmlentities($str, ENT_QUOTES); ?> Ausgabe 2 - Seitenquelltext Ein 'Anf&uuml;hrungszeichen' ist &lt;b&gt;fett&lt;/b&gt;<br> Ein &#039;Anf&uuml;hrungszeichen&#039; ist &lt;b&gt;fett&lt;/b&gt;
Seitenanfang 

I

iconv iconv_get_encoding iconv_set_encoding if...else...elseif implode include ini_get ini_set is_dir is_file is_float is_numeric is_string is_bool is_readable isset is_uploaded_file is_writeable Image-Funktionen getimagesize imagecreate imagecreatetruecolor imagecolorallocate imagecolortransparent imagecopy imagecopyresized imagecrop imagedestroy imagecreatefrompng imagecreatefromjpeg imagecreatefromgif imagefill imagejpeg imagepng imagegif image_type_to_mime_type imageline imagesetthickness imagefilter imagestring imagestringup imagerotate imageflip imagecolorat imagecolorsforindex imagesetpixel imagesx imagesy oben  iconv(string in_charset, string out_charset, string str) iconv konvertiert einen String in eine andere Textkodierung. Gibt bei Erfolg den konvertierten String zurück oder FALSE falls die Konvertierung fehlschlägt. Die Funktion wird häufig beim Verschicken von Nachrichten, die z.B. auf einem System mit der Standard-Textkodierung ISO-8859-1 erstellt werden und per Mail-Funktion an ein System mit der Standard-Textkodierung UTF-8 gesendet werden, benötigt. Ohne diese Konvertierung werden die Nachrichten nur verstümmelt angezeigt, diese betrifft vor allem Umlaute und einige Sonderzeichen. Werden in den PHP-Skripten die ASCII-Zeichen 32 bis 126 verwendet, so kann die Konvertierung entfallen. Da die ASCII-Zeichen 32 bis 126 von jedem Charset unterstützt werden. Einige dieser ASCII-Zeichen: englisches Alphabet: 0-9a-zA-Z(einschließlich des Leerzeichens) <>=_$-.?!"/|\'%+*^()[]{};#,&@: Siehe auch: iconv_get_encoding() iconv_set_encoding() extension_loaded() Beispiel 1 <?php // [...] echo iconv("ISO-8859-1","UTF-8","This is test."); // [...] ?> Beispiel 2 <?php // [...] $adresse = "mail@tux.de"; $kino = "Cinema"; $datum = date("d.m.Y"); $uhrzeit = date("H:i:s"); $email_betreff = $kino . " - Email"; $email_body = "Hallo Webmaster,\r\n\r\n"; $email_body .= "Hallo - hier steht der Haupttext.\r\n\r\n"; $email_body .= "Wann: " . $datum . "\r\n"; $email_body .= "Zeit: " . $uhrzeit . "\r\n"; $email_body .= "Gruß Admin\r\n\r\n"; $email_header = "X-Sender-IP: " . $REMOTE_ADDR . " \r\n"; $mail_array = array($adresse, $email_betreff, $email_body, $email_header); $email_array_count = count($mail_array); if(extension_loaded("iconv")) { for($i=0; $i<$email_array_count; $i++) { $mail_array[i]=iconv("ISO-8859-1","UTF-8",$mail_array[i]); } } mail($mail_array[0], $mail_array[1], $mail_array[2], $mail_array[3]); // [...] ?> Beispiel 3 <?php $text = "This is the Euro symbol '€'."; echo 'Original : ', $text . '<br>' . PHP_EOL; echo 'TRANSLIT : ' . iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text) . '<br>' . PHP_EOL; echo 'IGNORE : ' . iconv("UTF-8", "ISO-8859-1//IGNORE", $text) . '<br>' . PHP_EOL; echo 'Plain : ' . iconv("UTF-8", "ISO-8859-1", $text) . '<br>' . PHP_EOL; ?> Ausgabe 3 Original : This is the Euro symbol '€'. TRANSLIT : This is the Euro symbol 'EUR'. IGNORE : This is the Euro symbol ''. Notice: iconv(): Detected an illegal character in input string in /opt/lampp/htdocs/www/work-x/Laboretum/script1a.php on line 23 Plain : oben  iconv_get_encoding([ string $type = "all" ] ) Die Funktion iconv_get_encoding() liest aus der Datei php.ini die aktuelle Einstellung für die Zeichensatz-Konvertierung aus. Wenn type weggelassen oder auf "all" gesetzt ist, gibt iconv_get_encoding() ein Array mit allen Variablen zurück. Im Fehlerfall wird FALSE zurückgegeben. Siehe auch: ini_get() iconv() iconv_set_encoding() extension_loaded() Der Wert des optionalen Parameters type kann sein: all input_encoding output_encoding internal_encoding Beispiel 1 <?php echo iconv_get_encoding('internal_encoding'); ?> Ausgabe 1 utf-8 Beispiel 2 <?php iconv_set_encoding("internal_encoding", "UTF-8"); iconv_set_encoding("output_encoding", "ISO-8859-1"); echo '<pre>'; var_dump(iconv_get_encoding('all')); echo '</pre>'; ?> Ausgabe 2 Array ( [input_encoding] => ISO-8859-1 [output_encoding] => ISO-8859-1 [internal_encoding] => UTF-8 ) oben  iconv_set_encoding(string $type , string $charset) Die Funktion iconv_set_encoding() setzt die Einstellungen für die Zeichensatzkonvertierung. Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Siehe auch: ini_get() iconv() iconv_get_encoding() extension_loaded() Der Wert der Parameter type und charset können sein: type input_encoding output_encoding internal_encoding charset Der Zeichensatz. Beispiel <?php iconv_set_encoding("internal_encoding", "UTF-8"); iconv_set_encoding("output_encoding", "ISO-8859-1"); ?> oben  if...else...elseif Mit if....else....elseif wird ein Kontrollmechanismus eingeleitet und auf den Einstiegspunkt hin überprüft. Ist der if-Zweig "False", wird direkt in den elseif-Zweig geleitet und dieser wiederum auf Richtigkeit hin überpüft. Innerhalb des elseif-Zweiges wird elseif als if und else als else gesehen. Sie sollten aber bedenken, dass auf jeden Fall einer der Blöcke abgearbeitet wird. Beispiel <?php $x = 10; if($x < 0) { echo $x . "ist kleiner als 0"; } elseif($x == 0) { echo $x . " ist gleich 0"; } elseif($x < 10) { echo $x . " ist kleiner als 10"; } elseif($x == 10) { echo $x . " ist gleich 10"; } else { echo $x . " ist größer als 10"; } ?> 1.Möglichkeit (einzeilige if-Abfrage) if($x == 0) echo "Die Variable ist Null"; oder if($x == 0): echo "Die Variable ist Null"; endif; 2.Möglichkeit (mehrzeilige if-Abfrage) if($x == 0) { echo "Die Variable ist Null"; echo "Eine sehr kleine Zahl"; } oder if($x == 0): echo "Die Variable ist Null"; echo "Eine sehr kleine Zahl"; endif; 3.Möglichkeit (HTML-Code umschließen) <?php if($x == 0) { ?> Hier kann ganz normaler HTML-Code stehen <?php } ?> oben  implode(string glue, array pieces) Mit implode() fügt man ein Array (pieces) anhand eines Trennzeichens (glue) zu einem String zusammen. Dabei werden die Array-Elemente nacheinander an den String angehängt. Siehe auch: explode() join() Beispiel <?php $array = array("PHP","3/4","- Die Befehlsreferenz"); echo implode(" ",$array); echo "<br>"; echo implode("",$array); echo "<br>"; echo implode("#",$array); ?> Ausgabe PHP 3/4 - Die Befehlsreferenz PHP3/4- Die Befehlsreferenz PHP#3/4#- Die Befehlsreferenz oben  include() Der include-Befehl hat zur Folge, dass vom PHP-Parsing-Modus in den HTML-Modus geschaltet wird. Die angegebene Datei wird eingelesen und ausgewertet. Ist innerhalb der zu inkludierenden Datei PHP-Code, so muss dieser in gültigen PHP-Start- (<?php) und End-Tags (?>) eingebunden werden. Die Funktion gibt im Fehlerfall FALSE zurück und und generiert eine Warnung. Hinweis: Weil include eine spezielles Sprachkonstrukt ist, sind die Klammern um das Argument optional. Beispiel <?php include("./inc_name.php"); ?> oben  ini_get(string $varname) Mit ini_get() kann man sich einzelne Konfigurationsoptionen aus der php.ini anzeigen lassen. Bitte beachten Sie, das Sie den exakten Namen der Option varname angeben müssen, da diese Funktion zwischen Groß- und Kleinschreibung unterscheidet. Siehe auch: iconv_get_encoding() extension_loaded() ini_set() Beispiel 1 <?php echo 'sql.safe_mode = ' . ini_get ( 'sql.safe_mode' ) . "<br>\n"; echo 'max_execution_time = ' . ini_get ( 'max_execution_time' ) . "<br>\n"; echo 'file_uploads = ' . ini_get ( 'file_uploads' ) . "<br>\n"; ?> Ausgabe 1 safe_mode = 0 max_execution_time = 30 file_uploads = 1 Beispiel 2 <?php echo ini_get('default_charset'); echo '<br>'; echo ini_get('mysqli.allow_local_infile'); // siehe: phpinfo() ?> Ausgabe 2 UTF-8 1 Beispiel 3 <?php // [...] if(extension_loaded('mysqli') && (!empty(@ini_get('mysqli.allow_local_infile')) || !empty(@ini_get('mysqli.allow_persistent')))) { if($db_connect = @mysqli_connect($host_name, $db_user_name, $db_password, $db_name)) { $sql_db_tables_array = array_column(@mysqli_fetch_all($db_connect->query('SHOW TABLES')),0); $sql_db_tables_array_count = count($sql_db_tables_array); // [...] // siehe: phpinfo() } // [...] } // [...] ?> oben  ini_set(string $varname , string $newvalue ) Mit ini_set() kann man einige Konfigurationsoptionen in der php.ini neue Werte zuweisen lassen. Nach der Beendigung des PHP-Skriptes, erlangen die alten Werte der php.ini wieder ihre volle Gültigkeit. Im Fehlerfall gibt die Funktion false zurück. Bitte beachten Sie, das Sie den exakten Namen der Option varname angeben müssen, da diese Funktion zwischen Groß- und Kleinschreibung unterscheidet. Siehe auch: ini_get() Beispiel <?php echo ini_get('max_execution_time') . '<br>'; echo ini_get('memory_limit') . '<br>'; // Ausfuehrungszeit erhoehen (Standard: 30 Sekunden - php.ini) ini_set('max_execution_time', 120); // benutzbarer Arbeitsspeicher erhoehen (Standard: 128M - php.ini) ini_set('memory_limit', '256M'); echo ini_get('max_execution_time') . '<br>'; echo ini_get('memory_limit') . '<br>'; ?> Ausgabe 30 128M 120 256M oben  is_dir(string name) Mit is_dir() kann man überprüfen, ob ein Verzeichnis (filename) existiert. Wenn es sich bei der angegebenen Datei um ein Verzeichnis handelt, gibt diese Funktion true, sonst false und eine E_WARNING zurück. Beachten Sie bitte, dass das Ergebnis zwischengespeichert wird. Siehe auch: clearstatcache() is_file() Beispiel <?php $verz = "ultra"; if(is_dir($verz)) { echo "Bei $verz handelt es sich um ein Verzeichnis"; } else { echo "Bei $verz handelt es sich nicht um ein Verzeichnis"; } ?> Ausgabe Bei ultra handelt es sich um ein Verzeichnis oben  is_file(string filename) Mit is_file() kann man überprüfen, ob eine Datei (filename) existiert und ob es sich bei der Datei um eine reguläre Datei handelt. Wenn die Datei existiert und es eine reguläre Datei ist, gibt diese Funktion true, sonst false und eine E_WARNING zurück. Beachten Sie bitte, dass das Ergebnis zwischengespeichert wird. Siehe auch: clearstatcache() is_dir() Beispiel <?php $file = "ip_reload.txt"; if(is_file($file)) { echo "Bei der existenten Datei $file handelt es sich um eine reguläre Datei"; } else { echo "Bei der Datei $file handelt es sich nicht um eine reguläre Datei"; } ?> Ausgabe Bei der Datei ip_reload.txt handelt es sich um eine reguläre Datei oben  is_float(mixed var) Die Funktion is_float() überprüft, ob eine Variable (var) vom Typ Float ist. Gibt TRUE zurück, wenn var vom Typ float ist, sonst FALSE. Hinweis: Um zu testen, ob eine Variable eine Zahl oder eine numerische Zeichenkette ist (wie zum Beispiel Formularangaben, die immer Zeichenketten sind), müssen Sie is_numeric() verwenden. Siehe auch: is_array() is_numeric() Beispiel <?php $a = 1; $b = 1.14; if(!is_float($a)) echo "\$a ist kein float<br>"; if(is_float($b)) echo "\$b ist ein float"; ?> Ausgabe $a ist kein float $b ist ein float oben  is_numeric(mixed $var) Prüft, ob die gegebene Variable numerisch ist. Numerische Strings bestehen aus optionalen Whitespace-Zeichen, einem optionalen Vorzeichen, einer Anzahl Ziffern, einem optionalen Dezimalteil und einem optionalen Exponentialteil. Folglich ist +0123.45e6 ein gültiger numerischer Wert. Hexadezimale (z.B. 0xf4c3b00c) und binäre (z.B. 0b10100111001) Schreibweise sind nicht erlaubt. Gibt TRUE zurück, wenn var eine Zahl oder ein numerischer String ist, ansonsten FALSE. Siehe auch: is_float() Beispiel <?php $tests = array( "42", 1337, 0x539, 02471, 0b10100111001, 1337e0, "0x539", "02471", "0b10100111001", "1337e0", "nicht numerisch", array(), 9.1, null ); foreach($tests as $element) { if(is_numeric($element)) { echo var_export($element, true) . " ist numerisch", PHP_EOL; // PHP_EOL … Zeilenumbruch echo '<br>'; } else { echo var_export($element, true) . " ist NICHT numerisch", PHP_EOL; echo '<br>'; } } ?> Ausgabe '42' ist numerisch 1337 ist numerisch 1337 ist numerisch 1337 ist numerisch 1337 ist numerisch 1337.0 ist numerisch '0x539' ist NICHT numerisch '02471' ist numerisch '0b10100111001' ist NICHT numerisch '1337e0' ist numerisch 'nicht numerisch' ist NICHT numerisch array ( ) ist NICHT numerisch 9.0999999999999996447286321199499070644378662109375 ist numerisch NULL ist NICHT numerisch oben  is_string(mixed $var) Prüft, ob die gegebene Variable vom Typ String ist. Gibt TRUE zurück, wenn var vom Typ string ist, andernfalls FALSE. Siehe auch: is_numeric() is_bool() Parameter-Liste var .. Die zu untersuchende Variable. Beispiel <?php $values = array(false, true, null, 'abc', '23', 23, '23.5', 23.5, '', ' ', '0', 0); $values_count = count($values); for($x=0;$x<$values_count;$x++) { if(is_string($values[$x])) { echo "$values[$x] ist ein String"; } else { echo "$values[$x] ist kein String"; } } ?> Ausgabe ist kein String 1 ist kein String ist kein String abc ist ein String 23 ist ein String 23 ist kein String 23.5 ist ein String 23.5 ist kein String ist ein String ist ein String 0 ist ein String 0 ist kein String oben  is_bool(mixed $var) Prüft, ob die gegebene Variable ein Boolean ist. Gibt TRUE zurück, wenn var vom Typ boolean ist, ansonsten FALSE. Siehe auch: is_string() is_numeric() Parameter-Liste var ... Die zu untersuchende Variable. Beispiel <?php $a = false; // Da $a ein Boolean ist, wird true zurückgegeben if (is_bool($a) === true) { echo "Ja, das ist ein Boolean"; } ?> oben  is_readable(string $filename) Mit is_readable() kann man überprüfen, ob eine Datei (filename) existiert und lesbar ist. Für den Zugriff auf die Datei verwendet PHP die Benutzer-ID, unter welcher der Webserver läuft. Wenn die Datei existiert und lesbar ist, gibt diese Funktion true , sonst false und eine E_WARNING zurück. Beachten Sie bitte, dass das Ergebnis zwischengespeichert wird. Hinweis: Diese Funktion kann TRUE für Verzeichnisse zurück liefern. Mittels is_dir() kann zwischen Dateien und Verzeichnissen unterschieden werden. Siehe auch: clearstatcache() is_writeable() is_dir() file_exists() Beispiel <?php $datei = 'ip_reload.txt'; if(is_readable($datei)) { echo "Die Datei $datei existiert und ist lesbar"; } else { echo "Die Datei $datei existiert nicht und ist nicht lesbar"; } ?> Ausgabe Die Datei ip_reload.txt existiert und ist lesbar oben  isset(mixed $var [, mixed $... ]) isset() überprüft, ob eine Variable oder ein Array definiert und nicht NULL ist. Diese Funktion liefert true zurück, wenn die Variable oder das Array definiert ist, sonst false. Wenn mehrere Parameter übergeben werden, gibt isset() nur dann TRUE zurück, wenn alle Parameter belegt sind. Die Auswertung geht von links nach rechts und wird abgebrochen, sobald eine Variable nicht belegt ist. Hinweis: isset ist ein Sprachkonstrukt und keine Funktion. Siehe auch: empty() Beispiel 1 <?php $a = 24; if(isset($a)) echo"\$a ist existent.<br>"; if(!isset($b)) echo"\$b ist nicht existent."; ?> Ausgabe 1 $a ist existent. $b ist nicht existent. Beispiel 2 <?php $var = ''; // Dieser Ausdruck wird zu TRUE ausgewertet, also wird der Text angezeigt if (isset($var)) { echo "Die Variable ist gesetzt, also wird etwas ausgegeben.<br>"; } // In den nächsten Beispielen wird var_dump() benutzt, um den Rückgabewert von // isset() auszugeben. $a = "test"; $b = "anothertest"; var_dump(isset($a)); // TRUE echo '<br>'; var_dump(isset($a, $b)); // TRUE echo '<br>'; unset ($a); var_dump(isset($a)); // FALSE echo '<br>'; var_dump(isset($a, $b)); // FALSE echo '<br>'; $foo = NULL; var_dump(isset($foo)); // FALSE ?> Ausgabe 2 Die Variable ist gesetzt, also wird etwas ausgegeben. bool(true) bool(true) bool(false) bool(false) bool(false) oben  is_uploaded_file(string $filename) Mit is_uploaded_file() kann man überprüfen, ob eine Datei (filename) mittels HTTP-Post hochgeladen wurde. Es ist darauf zu achten, dass man für filename den temporären Namen der Datei angibt ($_FILES['file']['tmp_name']) und nicht den tatsächlichen Namen ($_FILES['file']['name']), da sonst false zurückgegeben wird. Wenn die angegebene Datei hochgeladen wurde, liefert diese Funktion TRUE, sonst FALSE. Siehe auch: move_uploaded_file() Beispiel Hinweis: Anstelle von <?PHP echo $_SERVER['PHP_SELF']; ?> kann man den Dateinamen auch direkt eintragen. <?php if(!empty($_FILES['file']['name'])) { if(@copy($_FILES['file']['tmp_name'], 'tmp/' . $_FILES['file']['name'])) { if(is_uploaded_file($_FILES['file']['tmp_name'])) { echo '<b>Upload beendet!</b><br>'; echo 'Dateiname: ' . $_FILES['file']['name'] . '<br>'; echo 'Dateigröße: ' . $_FILES['file']['size'] . 'Byte'; } } } else { ?> <html> <head> </head> <body> <form action="<?PHP echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data"> <input type="file" name="file" value=""><br> <input type="submit" name="Abschicken" value="Upload beginnen" /> </form> </body> </html> <?php } ?> Ausgabe Upload beendet! Dateiname: bigfile.gz Dateigröße: 832314 Byte oben  is_writeable(string $filename) Mit is_writeable() kann man überprüfen, ob eine Datei (filename) existiert und beschreibbar ist. Als Dateinamen dürfen Sie auch einen Verzeichnisnamen angeben, wenn Sie prüfen wollen, ob Sie in das Verzeichnis schreiben dürfen. Für den Zugriff auf die Datei verwendet PHP die Benutzer-ID, unter welcher der Webserver läuft. Wenn die Datei existiert und beschreibbar ist, gibt diese Funktion true, sonst false und eine E_WARNING zurück. Beachten Sie bitte, dass das Ergebnis zwischengespeichert wird. Hinweis: Diese Funktion ist ein Alias für is_writable(). Siehe auch: clearstatcache() is_readable() file_exists() Beispiel <?php $datei = 'ip_reload.txt'; if(is_writeable ($datei)) { echo 'Die Datei ' . $datei . ' existiert und ist beschreibbar'; } else { echo 'Die Datei ' . $datei . ' existiert nicht und ist nicht beschreibbar'; } ?> Ausgabe Die Datei ip_reload.txt existiert und ist beschreibbar
oben  Image-Funktionen Mit den Image-Funktionen können Bilder erzeugt, bearbeitet oder man kann sich einfach nur Informationen über Bilder geben zu lassen. Hinweis: Bei Funktionen (z.B. touch(), ImagePNG(), ...) die Dateien, wie Bilder oder Textdateien, erstellen oder löschen; sollte das entsprechende Verzeichnis mit ausreichenden Zugriffsrechten ausgestattet sein. Zugriffsrechte auf 777 einstellen, sofern dies kein Sicherheitsrisiko darstellt. Werden bei Verwendung der Standardeinstellungen der PHP-Konfigurationsdatei php.ini große Bilder (etwa ab 7000 Pixel x 4000 Pixel) durch einige Image-Funktionen bearbeitet, so können diese Funktionen nicht mehr oder nur eingeschränkt verwendet werden. Siehe auch: ini_get() ini_set() Beispiel - Funktionen für die Bildbearbeitung <?php // Funktion: Anpassung des hochgeladenen Bildes (feste Zielbreite) - Resize; // die Bildhoehe ist variabel, Bildproportionen (Seitenverhaeltnis) bleiben erhalten function resize_image_fixed_width($ImgFile='', $ImgWidth=0) { if(!empty($ImgFile) && !empty($ImgWidth)) { if(file_exists($ImgFile)) { if(is_writeable($ImgFile)) { $MinImgWidth = $ImgWidth / 2; $MinImgWidth = floor($MinImgWidth); $MaxImgWidth = $ImgWidth * 5; $MinImgHeight = 50; $MaxImgHeight = 5000; $ImgInfo = getimagesize($ImgFile); if($ImgInfo[0] < $MinImgWidth || $ImgInfo[1] < $MinImgHeight) { $ReturnCode=6; } elseif($ImgInfo[0] > $MaxImgWidth || $ImgInfo[1] > $MaxImgHeight) { $ReturnCode=7; } elseif($ImgInfo[0] == $ImgWidth) { $ReturnCode=8; } else { $ImgNewHeight = $ImgWidth / $ImgInfo[0] * $ImgInfo[1]; $ImgNewHeight = floor($ImgNewHeight); if($ImageNewHeight < 1) $ImageNewHeight=1; $NewImage = imagecreatetruecolor($ImgWidth, $ImgNewHeight); $ReturnCode=0; if($ImgInfo[2] == 1) { $ImgCreate = imagecreatefromgif($ImgFile); imagecopyresized($NewImage, $ImgCreate, 0, 0, 0, 0, $ImgWidth, $ImgNewHeight, $ImgInfo[0], $ImgInfo[1]); if(preg_match('#^.+\.gif$#i', $ImgFile)) { if(@imagegif($NewImage, $ImgFile)) $ReturnCode=1; } else { @unlink($ImgFile); $ReturnCode=5; } } elseif($ImgInfo[2] == 2) { $ImgCreate = imagecreatefromjpeg($ImgFile); imagecopyresized($NewImage, $ImgCreate, 0, 0, 0, 0, $ImgWidth, $ImgNewHeight, $ImgInfo[0], $ImgInfo[1]); if(preg_match('#^.+\.jpe?g$#i', $ImgFile)) { // keine Komprimierung, Bildqualitaet 100% if(@imagejpeg($NewImage, $ImgFile, 100)) $ReturnCode=1; } else { @unlink($ImgFile); $ReturnCode=5; } } elseif($ImgInfo[2] == 3) { $ImgCreate = imagecreatefrompng($ImgFile); imagecopyresized($NewImage, $ImgCreate, 0, 0, 0, 0, $ImgWidth, $ImgNewHeight, $ImgInfo[0], $ImgInfo[1]); if(preg_match('#^.+\.png$#i', $ImgFile)) { // Komprimierung mit der Voreinstellung, Bildqualitaet Stufe 6 if(@imagepng($NewImage, $ImgFile)) $ReturnCode=1; } else { @unlink($ImgFile); $ReturnCode=5; } } else { $ReturnCode=4; } imagedestroy($NewImage); } } else { $ReturnCode=3; } } else { $ReturnCode=2; } } else { $ReturnCode=0; } return $ReturnCode; } // Funktion: Anpassung des hochgeladenen Bildes (feste Zielbreite und Hoehe) - Resize; // ueberstehende Bildteile werden abgeschnitten; function resize_image_fixed_width_height($ImgFile='', $ImgWidth=0, $ImgHeight=0) { if(!empty($ImgFile) && !empty($ImgWidth) && !empty($ImgHeight)) { if(file_exists($ImgFile)) { if(is_writeable($ImgFile)) { $MinImgWidth = $ImgWidth / 2; $MinImgWidth = floor($MinImgWidth); $MaxImgWidth = $ImgWidth * 5; $MinImgHeight = $ImgHeight / 2; $MinImgHeight = floor($MinImgHeight); $MaxImgHeight = $ImgHeight * 5; $ImgInfo = getimagesize($ImgFile); if($ImgInfo[0] < $MinImgWidth || $ImgInfo[1] < $MinImgHeight) { $ReturnCode=6; } elseif($ImgInfo[0] > $MaxImgWidth || $ImgInfo[1] > $MaxImgHeight) { $ReturnCode=7; } elseif($ImgInfo[0] == $ImgWidth && $ImgInfo[1] == $ImgHeight) { $ReturnCode=8; } else { $ImgQuotientA = round($ImgInfo[0] / $ImgWidth, 4); $ImgQuotientB = round($ImgInfo[1] / $ImgHeight, 4); if($ImgQuotientA > $ImgQuotientB) { $ImgQuotientC = round($ImgInfo[0] / $ImgInfo[1], 4); $ImgNewWidth = $ImgQuotientC * $ImgWidth; $ImgNewWidth = floor($ImgNewWidth); $ImgNewHeight = $ImgHeight; $ImgQuotientD = round($ImgWidth / ($ImgWidth * $ImgQuotientC), 4); $ImgSourceX = ($ImgNewWidth - ($ImgNewWidth * $ImgQuotientD)) / 2; $ImgSourceX = floor($ImgSourceX); $ImgSourceY=0; } elseif($ImgQuotientA < $ImgQuotientB) { $ImgQuotientC = round($ImgInfo[1] / $ImgInfo[0], 4); $ImgNewHeight = $ImgQuotientC * $ImgHeight; $ImgNewHeight =floor($ImgNewHeight); $ImgNewWidth = $ImgWidth; $ImgQuotientD = round($ImgHeight / ($ImgHeight * $ImgQuotientC), 4); $ImgSourceX=0; $ImgSourceY = ($ImgNewHeight - ($ImgNewHeight * $ImgQuotientD)) / 2; $ImgSourceY = floor($ImgSourceY); } else { $ImgNewHeight = $ImgHeight; $ImgNewWidth = $ImgWidth; $ImgNoCrop=1; } if($ImageNewWidth < 1) $ImageNewWidth=1; if($ImageNewHeight < 1) $ImageNewHeight=1; $NewImage = imagecreatetruecolor($ImgNewWidth, $ImgNewHeight); $ReturnCode=0; if($ImgInfo[2] == 1) { $ImgCreate = imagecreatefromgif($ImgFile); imagecopyresized($NewImage, $ImgCreate, 0, 0, 0, 0, $ImgNewWidth, $ImgNewHeight, $ImgInfo[0], $ImgInfo[1]); // Bildausschnitt auswaehlen if(empty($ImgNoCrop)) { $NewImage = imagecrop($NewImage, ['x' => $ImgSourceX, 'y' => $ImgSourceY, 'width' => $ImgWidth, 'height' => $ImgHeight]); } if(preg_match('#^.+\.gif$#i', $ImgFile)) { if(@imagegif($NewImage, $ImgFile)) $ReturnCode=1; } else { @unlink($ImgFile); $ReturnCode=5; } } elseif($ImgInfo[2] == 2) { $ImgCreate = imagecreatefromjpeg($ImgFile); imagecopyresized($NewImage, $ImgCreate, 0, 0, 0, 0, $ImgNewWidth, $ImgNewHeight, $ImgInfo[0], $ImgInfo[1]); // Bildausschnitt auswaehlen if(empty($ImgNoCrop)) { $NewImage = imagecrop($NewImage, ['x' => $ImgSourceX, 'y' => $ImgSourceY, 'width' => $ImgWidth, 'height' => $ImgHeight]); } if(preg_match('#^.+\.jpe?g$#i', $ImgFile)) { // keine Komprimierung, Bildqualitaet 100% if(@imagejpeg($NewImage, $ImgFile, 100)) $ReturnCode=1; } else { @unlink($ImgFile); $ReturnCode=5; } } elseif($ImgInfo[2] == 3) { $ImgCreate = imagecreatefrompng($ImgFile); imagecopyresized($NewImage, $ImgCreate, 0, 0, 0, 0, $ImgNewWidth, $ImgNewHeight, $ImgInfo[0], $ImgInfo[1]); // Bildausschnitt auswaehlen if(empty($ImgNoCrop)) { $NewImage = imagecrop($NewImage, ['x' => $ImgSourceX, 'y' => $ImgSourceY, 'width' => $ImgWidth, 'height' => $ImgHeight]); } if(preg_match('#^.+\.png$#i', $ImgFile)) { // Komprimierung mit der Voreinstellung, Bildqualitaet Stufe 6 if(@imagepng($NewImage, $ImgFile)) $ReturnCode=1; } else { @unlink($ImgFile); $ReturnCode=5; } } else { $ReturnCode=4; } imagedestroy($NewImage); } } else { $ReturnCode=3; } } else { $ReturnCode=2; } } else { $ReturnCode=0; } return $ReturnCode; } // Funktion: Anpassung des hochgeladenen Bildes (feste Zielbreite und Hoehe) - Resize; // fehlende Bildteile werden durch einen Farbbalken ergaenzt; function resize_image_colour_bar($ImgFile='', $ImgWidth=0, $ImgHeight=0, $ImgColorRed=255, $ImgColorGreen=255, $ImgColorBlue=255) { $ReturnCode=0; if(!empty($ImgFile) && !empty($ImgWidth) && !empty($ImgHeight)) { if(file_exists($ImgFile)) { if(is_writeable($ImgFile)) { $MinImgWidth = $ImgWidth / 2; $MinImgWidth = floor($MinImgWidth); $MaxImgWidth = $ImgWidth * 5; $MinImgHeight = $ImgHeight / 2; $MinImgHeight = floor($MinImgHeight); $MaxImgHeight = $ImgHeight * 5; $ImgInfo = getimagesize($ImgFile); if($ImgInfo[0] < $MinImgWidth || $ImgInfo[1] < $MinImgHeight) { $ReturnCode=6; } elseif($ImgInfo[0] > $MaxImgWidth || $ImgInfo[1] > $MaxImgHeight) { $ReturnCode=7; } elseif($ImgInfo[0] == $ImgWidth && $ImgInfo[1] == $ImgHeight) { $ReturnCode=8; } else { $ImgQuotientA = round($ImgInfo[0] / $ImgWidth, 4); $ImgQuotientB = round($ImgInfo[1] / $ImgHeight, 4); if($ImgQuotientA > $ImgQuotientB) { $ImgQuotientC = round($ImgInfo[1] / $ImgInfo[0], 4); $ImgNewWidth = $ImgWidth; $ImgNewHeight = $ImgWidth * $ImgQuotientC; $ImgNewHeight = floor($ImgNewHeight); $ImgDestinationX=0; $ImgDestinationY = ($ImgHeight - $ImgNewHeight) / 2; $ImgDestinationY = floor($ImgDestinationY); } elseif($ImgQuotientA < $ImgQuotientB) { $ImgQuotientC = round($ImgInfo[0] / $ImgInfo[1], 4); $ImgNewWidth = $ImgHeight * $ImgQuotientC; $ImgNewWidth = floor($ImgNewWidth); $ImgNewHeight = $ImgHeight; $ImgDestinationX = ($ImgWidth - $ImgNewWidth) / 2; $ImgDestinationX = floor($ImgDestinationX); $ImgDestinationY=0; } else { $ImgNewHeight = $ImgHeight; $ImgNewWidth = $ImgWidth; $ImgDestinationX=0; $ImgDestinationY=0; } if($ImageNewWidth < 1) $ImageNewWidth=1; if($ImageNewHeight < 1) $ImageNewHeight=1; $NewImage = imagecreatetruecolor($ImgWidth, $ImgHeight); $NewImageBgColor = imagecolorallocate ($NewImage, $ImgColorRed, $ImgColorGreen, $ImgColorBlue); imagefill($NewImage, 0, 0, $NewImageBgColor); $ReturnCode=0; if($ImgInfo[2] == 1) { $ImgCreate = imagecreatefromgif($ImgFile); imagecopyresized($NewImage, $ImgCreate, $ImgDestinationX, $ImgDestinationY, 0, 0, $ImgNewWidth, $ImgNewHeight, $ImgInfo[0], $ImgInfo[1]); if(preg_match('#^.+\.gif$#i', $ImgFile)) { if(@imagegif($NewImage, $ImgFile)) $ReturnCode=1; } else { @unlink($ImgFile); $ReturnCode=5; } } elseif($ImgInfo[2] == 2) { $ImgCreate = imagecreatefromjpeg($ImgFile); imagecopyresized($NewImage, $ImgCreate, $ImgDestinationX, $ImgDestinationY, 0, 0, $ImgNewWidth, $ImgNewHeight, $ImgInfo[0], $ImgInfo[1]); if(preg_match('#^.+\.jpe?g$#i', $ImgFile)) { // keine Komprimierung, Bildqualitaet 100% if(@imagejpeg($NewImage, $ImgFile, 100)) $ReturnCode=1; } else { @unlink($ImgFile); $ReturnCode=5; } } elseif($ImgInfo[2] == 3) { $ImgCreate = imagecreatefrompng($ImgFile); imagecopyresized($NewImage, $ImgCreate, $ImgDestinationX, $ImgDestinationY, 0, 0, $ImgNewWidth, $ImgNewHeight, $ImgInfo[0], $ImgInfo[1]); if(preg_match('#^.+\.png$#i', $ImgFile)) { // Komprimierung mit der Voreinstellung, Bildqualitaet Stufe 6 if(@imagepng($NewImage, $ImgFile)) $ReturnCode=1; } else { @unlink($ImgFile); $ReturnCode=5; } } else { $ReturnCode=4; } imagedestroy($NewImage); } } else { $ReturnCode=3; } } else { $ReturnCode=2; } } else { $ReturnCode=0; } return $ReturnCode; } $img_resize_message_array = array('HINWEIS: BILDBEARBEITUNG KONNTE NICHT DURCHGEFÜHRT WERDEN!', 'HINWEIS: BILDBEARBEITUNG WURDE DURCHGEFÜHRT!', 'HINWEIS: DIE BILDDATEI WURDE NICHT GEFUNDEN!', 'HINWEIS: KEINE SCHREIBBERECHTIGUNG!', 'HINWEIS: ES SIND NUR JPEG-, GIF- UND PNG-BILDER ERLAUBT!', 'HINWEIS: DIE BILDDATEI WURDE GELÖSCHT!', 'HINWEIS: BILD IST ZU KLEIN!', 'HINWEIS: BILD IST ZU GROSS!', 'HINWEIS: BILDGRÖSSE ENTSPRICHT BEREITS DEN VORGABEN!'); $img_path_a = './img/test_img_a.jpg'; $img_output_a=''; if(isset($img_path_a) && isset($img_output_a)) { $width_a = 600; $return_code = resize_image_fixed_width($img_path_a, $width_a); if(!empty($return_code) && preg_match("/^[0-9]$/", $return_code)) { if($return_code == 1 || $return_code == 8) { $img_info_a = getimagesize($img_path_a); $img_output_a = "<img src=\"" . $img_path_a . "\" " . $img_info_a[3] . " border=\"0\" title=\"TESTBILD-A\" alt=\"TESTBILD-A\">\n"; $img_output_a .= "<br>" . $img_resize_message_array[$return_code]; } else { $img_output_a = $img_resize_message_array[$return_code]; } } else { print '<b>FUNCTION: resize_image_fixed_width() IS DAMAGED!</b>'; exit; } } $img_path_b = './img/test_img_b.jpg'; $img_output_b=''; if(isset($img_path_b) && isset($img_output_b)) { $width_b = 600; $height_b = 600; $return_code = resize_image_fixed_width_height($img_path_b, $width_b, $height_b); if(!empty($return_code) && preg_match("/^[0-9]$/", $return_code)) { if($return_code == 1 || $return_code == 8) { $img_info_b = getimagesize($img_path_b); $img_output_b = "<img src=\"" . $img_path_b . "\" " . $img_info_b[3] . " border=\"0\" title=\"TESTBILD-B\" alt=\"TESTBILD-B\">\n"; $img_output_b .= "<br>" . $img_resize_message_array[$return_code]; } else { $img_output_b = $img_resize_message_array[$return_code]; } } else { print '<b>FUNCTION resize_image_fixed_width_height() IS DAMAGED!</b>'; exit; } } $img_path_c = './img/test_img_c.jpg'; $img_output_c=''; if(isset($img_path_c) && isset($img_output_c)) { $width_c = 600; $height_c = 600; $red = 255; $green = 255; $blue = 255; $return_code = resize_image_colour_bar($img_path_c, $width_c, $height_c, $red, $green, $blue); if(!empty($return_code) && preg_match("/^[0-9]$/", $return_code)) { if($return_code == 1 || $return_code == 8) { $img_info_c = getimagesize($img_path_c); $img_output_c = "<img src=\"" . $img_path_c . "\" " . $img_info_c[3] . " border=\"0\" title=\"TESTBILD-C\" alt=\"TESTBILD-C\">\n"; $img_output_c .= "<br>" . $img_resize_message_array[$return_code]; } else { $img_output_c = $img_resize_message_array[$return_code]; } } else { print '<b>FUNCTION resize_image_colour_bar() IS DAMAGED!</b>'; exit; } } ?> <!doctype html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>TEST IMAGE-FUNKTIONEN</title> <style type="text/css"> <!-- body { margin:10px 15px 15px 10px; background-color:#E0E0E0; } --> </style> </head> <body> <?php echo $img_output_a; ?> <br><br> <?php echo $img_output_b; ?> <br><br> <?php echo $img_output_c; ?> <br><br> </body> </html> Funktion: resize_image_fixed_width($img_path, $img_width) Diese Funktion verändert die Größe eines Bildes. Das Bild wird entweder verkleinert oder vergrößert bis die Zielbreite erreicht ist. Der Funktion ist der komplette Dateipfad der bereits hochgeladenen Bilddatei (./img/xyz.jpg) und die Zielbreite in Pixel zu übergeben. Hinweis: Die minimale und maximale Bildgröße (Pixel) der zu bearbeitenden Bilddatei (Original) sind in den Variablen ($MinImgHeight, $MaxImgHeight, MinImgWidth, $MaxImgWidth) am Anfang der Funktion resize_image_fixed_width() angegeben. Das zu bearbeitende Original-Bild ($img_path) wird ohne Rückfrage überschrieben. Der ursprüngliche Bildname bleibt erhalten. $return_code = resize_image_fixed_width($img_path, $img_width); RETURN-CODE - die geänderte Bilddatei wird im Erfolgsfall im Verzeichnis img (siehe: weiter oben) gespeichert 0 ... die Änderung der Bildgröße konnte nicht durchgeführt werden; fehlende Übergabe von Variablen an die Funktion 1 ... die Änderung der Bildgröße wurde durchgeführt 2 ... die Bilddatei wurde im angegebenen Dateipfad nicht gefunden 3 ... unzureichende Zugriffsberechtigung auf das Verzeichnis oder auf die Bilddatei; keine Schreibberechtigung 4 ... es sind nur Bilddateien mit der Dateiendung .jpg, .jpeg, .png und .gif erlaubt 5 ... die Bilddatei wurde gelöscht; der Bildname entsprach nicht den allgemeinen Regeln (bildname.filetype; Paris_Sommer_2020.jpg, frankreich_099.png, ...) 6 ... Bild ist zu klein 7 ... Bild ist zu groß 8 ... Bild entspricht bereits den Vorgaben für die Zielgröße Funktion: resize_image_fixed_width_height($img_path, $img_width, $img_height) Diese Funktion verändert die Größe eines Bildes. Das Bild wird entweder verkleinert oder vergrößert bis die Zielbreite oder Zielhöhe erreicht ist. Kann bei dieser proportionalen Bildvergrößerung bzw. Verkleinerung die Zielbreite bzw. Zielhöhe nicht erreicht werden, so werden die überstehenden Bildteile abgeschnitten. Der Funktion ist der komplette Dateipfad der bereits hochgeladenen Bilddatei (./img/xyz.png) und die Zielbreite und Zielhöhe in Pixel zu übergeben. Hinweis: Die minimale und maximale Bildgröße (Pixel) der zu bearbeitenden Bilddatei (Original) sind in den Variablen ($MinImgHeight, $MaxImgHeight, MinImgWidth, $MaxImgWidth) am Anfang der Funktion resize_image_fixed_width_height() angegeben. Das zu bearbeitende Original-Bild wird ohne Rückfrage überschrieben. Der ursprüngliche Bildname bleibt erhalten. $return_code = resize_image_fixed_width_height($img_path, $img_width, $img_height); RETURN-CODE - die geänderte Bilddatei wird im Erfolgsfall im Verzeichnis img (siehe: weiter oben) gespeichert 0 ... die Änderung der Bildgröße konnte nicht durchgeführt werden; fehlende Übergabe von Variablen an die Funktion 1 ... die Änderung der Bildgröße wurde durchgeführt 2 ... die Bilddatei wurde im angegebenen Dateipfad nicht gefunden 3 ... unzureichende Zugriffsberechtigung auf das Verzeichnis oder auf die Bilddatei; keine Schreibberechtigung 4 ... es sind nur Bilddateien mit der Dateiendung .jpg, .jpeg, .png und .gif erlaubt 5 ... die Bilddatei wurde gelöscht; der Bildname entsprach nicht den allgemeinen Regeln (bildname.filetype; Paris_Sommer_2020.jpg, frankreich_099.png, ...) 6 ... Bild ist zu klein 7 ... Bild ist zu groß 8 ... Bild entspricht bereits den Vorgaben für die Zielgröße Funktion: resize_image_colour_bar($img_path, $img_width, $img_height, $img_color_red, $img_color_green, $img_color_blue) Diese Funktion verändert die Größe eines Bildes. Das Bild wird entweder verkleinert oder vergrößert bis die Zielbreite oder Zielhöhe erreicht ist. Kann bei dieser proportionalen Bildvergrößerung bzw. Verkleinerung die Zielbreite bzw. Zielhöhe nicht erreicht werden, so werden die fehlende Bildteile durch einen Farbbalken ergänzt. Der Funktion ist der komplette Dateipfad der bereits hochgeladenen Bilddatei (./img/xyz.gif) und die Zielbreite und Zielhöhe in Pixel zu übergeben. Werden keine RGB-Farbwerte an die Funktion übergeben, so werden fehlende Bildteile automatisch durch einen weißen Farbbalken ergänzt. Hinweis: Die minimale und maximale Bildgröße (Pixel) der zu bearbeitenden Bilddatei (Original) sind in den Variablen ($MinImgHeight, $MaxImgHeight, MinImgWidth, $MaxImgWidth) am Anfang der Funktion resize_image_colour_bar() angegeben. Das zu bearbeitende Original-Bild wird ohne Rückfrage überschrieben. Der ursprüngliche Bildname bleibt erhalten. RGB-Farbwerte: Rot ... 0 - 255 ($img_color_red) Grün ... 0 - 255 ($img_color_green) Blau ... 0 - 255 ($img_color_blue) $return_code = resize_image_colour_bar($img_path, $img_width, $img_height, 0, 255, 0); RETURN-CODE - die geänderte Bilddatei wird im Erfolgsfall im Verzeichnis img (siehe: weiter oben) gespeichert 0 ... die Änderung der Bildgröße konnte nicht durchgeführt werden; fehlende Übergabe von Variablen an die Funktion 1 ... die Änderung der Bildgröße wurde durchgeführt 2 ... die Bilddatei wurde im angegebenen Dateipfad nicht gefunden 3 ... unzureichende Zugriffsberechtigung auf das Verzeichnis oder auf die Bilddatei; keine Schreibberechtigung 4 ... es sind nur Bilddateien mit der Dateiendung .jpg, .jpeg, .png und .gif erlaubt 5 ... die Bilddatei wurde gelöscht; der Bildname entsprach nicht den allgemeinen Regeln (bildname.filetype; Paris_Sommer_2020.jpg, frankreich_099.png, ...) 6 ... Bild ist zu klein 7 ... Bild ist zu groß 8 ... Bild entspricht bereits den Vorgaben für die Zielgröße oben  getimagesize(string $filename [, array &$imageinfo ]) Mit getimagesize() kann man verschiedene Informationen über ein Bild (filename) ermitteln. Dieser Befehl benötigt nicht die GD-Bibliothek. Das Ergebnis wird in einem Array zurückgegeben, das folgende Informationen enthält: Breite des Bildes Höhe des Bildes Grafik-Typ - 1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF HTML-Zeichenkette - "height=xx width=xx" Wenn Sie im optionalen Parameter imageinfo ein Array übergeben, trägt die Funktion bei einigen Grafiktypen zusätzliche Daten in dieses Array ein, z.B. Dateiinformationen bei JPEG-Bildern. Die Funktion gibt ein Array mit bis zu sieben Elementen zurück. Wenn ein Zugriff auf die mit filename angegebene Grafik nicht möglich ist, wird getimagesize() einen Fehler der Stufe E_WARNING generieren. Bei einem Lesefehler wird getimagesize() einen Fehler der Stufe E_NOTICE hervorrufen. Hinweis: Diese Funktion benötigt die GD-Bibliothek nicht. Diese Funktion erwartet, dass filename eine gültige Bilddatei ist. Wird eine Datei angegeben, die kein Bild enthält, kann sie fälschlicherweise als Bild erkannt werden und die Funktion wird erfolgreich ausgeführt, aber das Array kann unsinnige Werte enthalten. Die Funktion getimagesize() sollte nicht verwendet werden, um zu überprüfen, ob eine gegebene Datei ein Bild enthält. Stattdessen sollte eine für diesen Zweck entwickelte Lösung verwendet werden (siehe auch: mime_content_type()). Siehe auch: imagesx() imagesy() mime_content_type() preg_match() Anhang: Binärdaten in einer MySQLi-Tabelle speichern Beispiel <?php $bild = "php3_4.gif"; $info = getimagesize($bild); echo "Bildbreite: " . $info[0]; echo "<br>"; echo "Bildhöhe: " . $info[1]; echo "<br>""; echo "Grafik-Typ: " . $info[2]; echo "<br>"; echo "HTML-Zeichenkette: " . $info[3]; ?> Ausgabe Bildbreite: 150 Bildhöhe: 50 Grafik-Typ: 1 HTML-Zeichenkette: width="150" height="50" oben  imagecreate(int x_size, int y_size) Mit imagecreate() wird eine Arbeitsfläche für ein neues Bild mit der Breite x_size und der Höhe y_size erstellt. Der von dieser Funktion zurückgegebene Zeiger muss bei allen folgenden Grafikbefehlen genutzt werden, damit man etwas in das Bild hineinzeichnen kann. Beim unten stehenden Beispiel wurde der Zeiger genutzt, um die Arbeitsfläche mit einer grauen Farbe zu hinterlegen. Gibt im Erfolgsfall eine Bildresource zurück, im Fehlerfall FALSE. Hinweis: Im Allgemeinen wird empfohlen, die Funktion imagecreatetruecolor() anstelle von imagecreate() zu verwenden, so dass die Bildverarbeitung mit der bestmöglichen Qualität erfolgt. Siehe auch: imagecreatetruecolor() imagedestroy() Beispiel Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php header("Content-type: image/png"); $image = imagecreate(300,150); imagecolorallocate($image,222,222,222); imagepng($image); ?> oben  imagecreatetruecolor(int $width , int $height) Mit imagecreate() wird eine Arbeitsfläche für ein neues Bild mit der Breite $width und der Höhe $height erstellt. Der von dieser Funktion zurückgegebene Zeiger muss bei allen folgenden Grafikbefehlen genutzt werden, damit man etwas in das Bild hineinzeichnen kann. Die Arbeitsfläche wird mit der Farbe schwarz hinterlegt. Gibt im Erfolgsfall eine Bildresource zurück, im Fehlerfall FALSE. Beispiel Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php header ('Content-Type: image/png'); $image = @imagecreatetruecolor(120, 20) or die('Cannot Initialize new GD image stream'); $text_color = imagecolorallocate($image, 233, 14, 91); imagestring($image, 1, 5, 5, 'A Simple Text String', $text_color); imagepng($image); imagedestroy($image); ?> oben  imagecolorallocate(int img, int red, int green, int blue) Mit imagecolorallocate() kann man eine Farbe anlegen, die für Zeichenoperationen auf einer Fläche (img) benutzt werden soll. Die gewünschte Farbe wird als RGB-Wert (red, green, blue) angegeben. Die Funktion imagecolorallocate() muss für jede Farbe aufgerufen werden, welche in der Grafik vorkommen soll. Jede neue Farbe (red, green blue) einer Arbeitsfläche bekommt eine ID (Ganzzahlen zwischen 0 und 255 oder Hexadezimalzahlen zwischen 0x00 und 0xFF) zugewiesen; imagecolorallocate() gibt Ihnen diese ID als Funktionsergebnis oder FALSE falls die Farbe nicht alloziert werden konnte zurück. In den bisherigen Versionen der GD-Bibliothek legen Sie mit dem ersten Aufruf dieser Funktion automatisch die Hintergrundfarbe fest. Sie sollten sich allerdings nicht darauf verlassen, dass sich zukünftige Versionen genauso verhalten. Rufen Sie zum Färben des Hintergrunds also besser die Funktion imagefill() auf. Hinweis: Die Funktion imagecolorallocate() kann sowohl das boolsche FALSE zurückliefern, als auch einen nicht-boolschen Wert, welcher zu FALSE ausgewertet wird. Siehe auch: imagefill() Beispiel Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php header("Content-type: image/png"); $image = imagecreate(300,150); imagecolorallocate($image,222,222,222); imagepng($image); ?> oben  imagecolortransparent(int im [, int col]) Mit imagecolortransparent() kann man eine Farbe (col) innerhalb eines Bildes (im) als transparent definieren. Alle Bildteile, die die angegebene Farbe haben, erscheinen transparent. Im unteren Beispiel werden die Buchstaben in der Farbe blau gezeichnet. Anschließend wird diese Farbe als transparent definiert. Somit scheint der Hintergrund durch die Buchstaben. Die Funktion gibt die Kennung der neuen (oder der aktuellen, falls keine Farbe angegeben wurde) transparenten Farbe zurück. Wird color nicht angegeben und das Bild hat keine transparente Farbe, so ist die zurückgegebene Kennung -1. Hinweis: Die transparente Farbe ist eine Eigenschaft des Bildes, nicht der Farbe. Sobald eine Farbe als transparente Farbe definiert wurde, werden alle Bereiche eines Bildes mit dieser Farbe, die zuvor gezeichnet wurden, transparent sein. Beispiel Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php header("Content-type: image/png"); $image = imagecreate(300,150); imagecolorallocate($image,222,222,222); $farbe_b = imagecolorallocate($image,10,36,106); imagecolortransparent($image,$farbe_b); imagestring($image, 5,30, 70, "PHP3/4 - Die Befehlsreferenz", $farbe_b); imagepng($image); ?> oben  imagecopy(int dst_im, int src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h) Mit imagecopy() kopiert man einen Teil eines Bildes (src_im) in ein anderes Bild (dst_im). Mit src_x und src_y werden die X- und Y-Koordinaten des zu kopierenden Teils angegeben. Die Breite wird dabei mit src_w und src_h bestimmt. Der Ausschnitt wird in dem Bild dst_im an die X- und Y-Koordinaten dst_x bzw. dst_y kopiert. Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Siehe auch: imagecrop() Beispiel Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php header("Content-type: image/png"); // vor dem Aufruf ist das Bild imagearc.png zu erstellen $image_1 = imagecreatefrompng("imagearc.png"); $image_2 = imagecreate(300,150); imagecolorallocate($image_2,222,222,222); imagecopy($image_2,$image_1,30,25,50,60,91,26); imagepng($image_2); imagedestroy($image_1); imagedestroy($image_2); ?> oben  imagecopyresized(resource $dst_image, resource $src_image, int $dst_x, int $dst_y, int $src_x, int $src_y, int $dst_w, int $dst_h, int $src_w, int $src_h) Die Funktion imagecopyresized() kopiert einen rechteckigen Ausschnitt eines Bildes in ein anderes Bild. dst_image gibt das Zielbild, src_image gibt die Bildquelle an. Mit anderen Worten, imagecopyresized() nimmt einen rechteckigen Ausschnitt von src_image der Breite src_w and Höhe src_h von Position (src_x,src_y) und platziert diesen in einem rechteckigen Bereich in dst_image mit der Breite dst_w and Höhe dst_h an der Position (dst_x,dst_y). Unterscheiden sich die Angaben der Quelle und des Ziels bezogen auf die Koordinaten, Höhe oder Breite, wird das Teilbild entsprechend gedehnt oder geschrumpft. Die Koordinaten beziehen sich auf die linke obere Ecke. Sie können hiermit auch Teilbilder innerhalb ein- und desselben Bildes kopieren, sofern dst_image und src_image gleich sind. Falls sich dabei aber die kopierten Teile überlappen, führt das zu unvorhersehbaren Ergebnissen. Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Siehe auch: imagecrop() imagecreatetruecolor() Parameter-Liste dst_image ... Resource des Zielbildes src_image ... Resource des Quellbildes dst_x ... x-Koordinate des Zielrechtecks dst_y ... y-Koordinate des Zielrechtecks src_x ... x-Koordinate des Quellrechtecks src_y ... y-Koordinate des Quellrechtecks dst_w ... Breite des Zielrechtecks dst_h ... Höhe des Zielrechtecks src_w ... Breite der Quelle src_h ... Höhe der Quelle Beispiel Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php // Datei und Faktor der Größenänderung $filename = 'test.jpg'; $percent = 0.5; // Typ der Ausgabe header('Content-Type: image/jpeg'); // Neue Größe berechnen list($width, $height) = getimagesize($filename); $newwidth = $width * $percent; $newheight = $height * $percent; // Bild laden $thumb = imagecreatetruecolor($newwidth, $newheight); $source = imagecreatefromjpeg($filename); // Skalieren imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); // Ausgabe imagejpeg($thumb); ?> oben  imagecrop(resource $image, array $rect) Mit der Funktion imagecrop() kann man aus eine von den verschiedenen Erzeugungsfunktionen wie imagecreatetruecolor() gelieferte Grafikressource ($image) eine rechteckige Fläche herausschneiden. Die Original-Grafikressource $image wird nicht verändert. Bei Erfolg kann die geänderte Ressource an eine Variable übergeben werden. Im Fehlerfall wird FALSE zurückgegeben. Parameter-Liste image ... Eine von den verschiedenen Erzeugungsfunktionen wie imagecreatetruecolor(), imagecreate(), ... gelieferte Grafikressource. rect ... Eine rechteckige Fläche als Array mit den Schlüsselwerten x, y, width and height. Beispiel <?php $im = imagecreatefrompng('./example.png'); $size = min(imagesx($im), imagesy($im)); $im2 = imagecrop($im, ['x' => 0, 'y' => 0, 'width' => $size, 'height' => $size]); if($im2 !== FALSE) { imagepng($im2, './example-cropped.png'); imagedestroy($im2); } imagedestroy($im); ?> oben  imagedestroy(int img) Mit imagedestroy() kann man den Speicher, welcher durch das Bild belegt wurde, wieder freigeben. Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Siehe auch: imagecreate() Beispiel Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php Header("Content-type: image/png"); $image = imagecreate(300,150); imagecolorallocate($image,243,243,243); imagepng($image); imagedestroy($image); ?> oben  imagecreatefrompng(string filename) Mit imagecreatefrompng() erstellt man ein neues Bild, das aus einer Datei oder URL im PNG-Format gelesen wird. Der Inhalt der gelesenen Datei wird in das neue Bild geschrieben. Der von dieser Funktion zurückgegebene Zeiger muss bei allen folgenden Grafikbefehlen genutzt werden, damit man etwas in das Bild hineinzeichnen kann. Gibt im Erfolgsfall eine Bildresource zurück, im Fehlerfall FALSE. Siehe auch: imagejpeg() imagepng() Beispiel 1 Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php header("Content-type: image/jpeg"); // vor dem Aufruf ist das Bild image.png zu erstellen $image = imagecreatefrompng("image.png"); imagejpeg($image); ?> Beispiel 2 - taste.php Dieses Beispiel würde von einer Seite mit einem Tag wie diesem aufgerufen: <img src="taste.php?text= Hier steht der Text">. Das Skript taste.php nimmt dann den String von der $_GET-Variablen text und legt ihn über das Grundbild. In diesem Fall "./images/taste1.png" und gibt das endgültige Bild aus. Dadurch vermeidet man, dass jedesmal, wenn man den Text auf Tasten ändert, diese von Hand neu gezeichnet werden müssen, denn die Buttonbeschriftung wird dynamisch generiert - ohne das Originalbild zu verändern, hier taste1.png. Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php Header("Content-type: image/png"); // vor dem Aufruf ist das Grundbild ./images/taste1.png zu erstellen $string = $_GET['text']; $im = imagecreatefrompng("./images/taste1.png"); $color = imagecolorallocate($im, 220, 210, 60); $px = (imagesx($im)-7.5*strlen($string))/2; imagestring($im,3,$px,9,$string,$color); imagepng($im); imagedestroy($im); ?> oben  imagecreatefromjpeg( string $filename ) Mit imagecreatefromjpeg() erstellt man ein neues Bild, das aus einer Datei oder URL im JPEG-Format gelesen wird. Der Inhalt der gelesenen Datei wird in das neue Bild geschrieben. Der von dieser Funktion zurückgegebene Zeiger muss bei allen folgenden Grafikbefehlen genutzt werden, damit man etwas in das Bild hineinzeichnen kann. Gibt im Erfolgsfall eine Bildresource zurück, im Fehlerfall FALSE. Siehe auch: imagepng() imagegif() imagejpeg() imagecreatefromgif() imagecreatefrompng() Beispiel Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php header("Content-type: image/gif"); // vor dem Aufruf ist das Bild image.jpg zu erstellen $image = imagecreatefromjpeg('image.jpg'); imagegif($image); ?> oben  imagecreatefromgif( string $filename ) Mit imagecreatefromgif() erstellt man ein neues Bild, das aus einer Datei oder URL im GIF-Format gelesen wird. Der Inhalt der gelesenen Datei wird in das neue Bild geschrieben. Der von dieser Funktion zurückgegebene Zeiger muss bei allen folgenden Grafikbefehlen genutzt werden, damit man etwas in das Bild hineinzeichnen kann. Aus rechtlichen Gründen wurde die GIF-Unterstützung ab der Version 1.6 in die GD-Bibliothek nicht mehr implementiert. Sie können also diesen Befehl nur nutzen, wenn eine Version vor 1.6 existiert. Gibt im Erfolgsfall eine Bildresource zurück, im Fehlerfall FALSE. Hinweis: Werden GIF-Dateien in den Speicher geladen, wird nur der erste Frame in der Bild-Ressource zurückgeliefert. Die Größe des Bildes ist nicht notwendigerweise diejenige, die von getimagesize() gemeldet wird. Siehe auch: imagepng() imagegif() imagejpeg() imagecreatefromjpeg() imagecreatefrompng() Beispiel Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php header("Content-type: image/jpeg"); // vor dem Aufruf ist das Bild image.gif zu erstellen $image = imagecreatefromgif('image.gif'); imagejpeg($image); ?> oben  imagefill(int img, int x, int y, int col) Führt eine Flutfüllung beginnend an der angegebenen Koordinate (oben links ist 0,0) mit der angegebenen Farbe (Farbkennung, die mit imagecolorallocate() erzeugt wurde) durch. Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Siehe auch: imagecolorallocate() Beispiel Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php $im = imagecreate(100, 100); // Färbt den Hintergrund rot $red = imagecolorallocate($im, 255, 0, 0); imagefill($im, 0, 0, $red); header('Content-type: image/png'); imagepng($im); imagedestroy($im); ?> oben  imagejpeg(resource $image [, mixed $to = NULL [, int $quality = -1 ]]) Gibt das Bild im Browser oder in einer Datei aus. Der optionale Parameter to ist der Pfad unter dem das Bild gespeichert werden soll. Ist dieser Parameter nicht gesetzt oder NULL wird der rohe Bilddatenstrom direkt ausgegeben. Der optionale Parameter quality kann ein Wert zwischen 0 (schlechteste Qualität, kleine Datei) und 100 (beste Qualität, größte Datei) annehmen. Der Standardwert (-1) verwendet den Standardwert (ungefähr 75). Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Siehe auch: imagepng() imagegif() imagecreatetruecolor() Beispiel 1 Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php header("Content-Type: image/jpeg"); $image = imagecreate(300,150); imagecolorallocate($image,243,243,243); imagejpeg($image, NULL,100); ?> Beispiel 2 Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php // Die PNG-Datei laden $filename = './test_01.png'; $new_image = './test_03.jpg'; $image = imagecreatefrompng($filename); // Die Datei im JPEG-Format speichern imagejpeg($image, $new_image, 90); // Den Speicher freigeben imagedestroy($image); // Wir sind fertig echo 'Die PNG-Datei wurde erfolgreich nach JPEG konvertiert!'; ?> oben  imagepng(resource $image [, mixed $to = NULL [, int $quality = -1 [, int $filters = -1 ]]]) Gibt das Bild im Browser oder in einer Datei aus. Der optionale Parameter to ist der Pfad unter dem das Bild gespeichert werden soll. Ist dieser Parameter nicht gesetzt oder NULL wird der rohe Bilddatenstrom direkt ausgegeben. Hinweis: NULL ist ungültig, wenn die Parameter quality und filters nicht übergeben werden. Der optionale Parameter quality legt die Kompressionsstufe des Bildes fest. Die Kompressionsstufen können Werte von 0 (keine Kompression, hohe Qualität) bis 9 (hohe Kompressionsstufe, geringe Qualität) annehmen. Die Voreinstellung (-1) verwendet die voreingestellte zlib-Komprimierung (derzeitige Voreinstellung ist 6). Der optionale Parameter filters erlaubt eine Verkleinerung der PNG-Dateigröße. Dies ist ein Bitfeld, welches beliebig aus den PNG_FILTER_XXX-Konstanten zusammengesetzt werden kann. PNG_NO_FILTER oder PNG_ALL_FILTERS können verwendet werden, um entweder alle Filter aus- oder einzuschalten. Der Vorgabewert (-1) deaktiviert die Filterung. Hinweis: Der filters Parameter wird von der System-libgd ignoriert. Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Siehe auch: imagegif() imagejpeg() imagecreatetruecolor() Beispiel 1 Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php header("Content-Type: image/png"); $image = imagecreate(300,150); imagecolorallocate($image,243,243,243); imagepng($image, NULL, 6, PNG_NO_FILTER); imagedestroy($image); ?> Beispiel 2 Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php // Die JPEG-Datei laden $filename = './test_02.jpg'; $new_image = './test_03.png'; $image = imagecreatefromjpeg($filename); // Die Datei im PNG-Format speichern imagepng($image, $new_image, 6); // Den Speicher freigeben imagedestroy($image); // Wir sind fertig echo 'Die JPEG-Datei wurde erfolgreich nach PNG konvertiert!'; ?> oben  imagegif(resource $image [, mixed $to = NULL ]) Die Funktion erzeugt eine GIF-Datei aus dem übergebenen Wert image. Der Inhalt des Parameters image ist die Rückgabe der Funktionen imagecreate() oder imagecreatefrompng(), imagecreatefromjpeg(), imagecreatefromgif() (Grafikressource). Das Dateiformat wird GIF87a sein, es sei denn das Bild wurde mittels imagecolortransparent() transparent gemacht. In diesem Fall wird das Dateiformat GIF89a sein. Der optionale Parameter to enthält den Pfad unter dem das Bild gespeichert werden soll. Ist dieser nicht gesetzt oder NULL wird der rohe Bilddatenstrom direkt ausgegeben. Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Siehe auch: imagepng() imagejpeg() imagecreatetruecolor() Beispiel 1 Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php header("Content-Type: image/gif"); $image = imagecreate(300,150); imagecolorallocate($image,243,243,243); imagegif($image); imagedestroy($image); ?> Beispiel 2 Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php // Die PNG-Datei laden $png = imagecreatefrompng('./php.png'); // Die Datei im GIF-Format speichern imagegif($png, './php.gif'); // Den Speicher freigeben imagedestroy($png); // Wir sind fertig echo 'Die PNG-Datei wurde erfolgreich nach GIF konvertiert!'; ?> oben  image_type_to_mime_type(int $imagetype) Mit der Funktion kann man den Mime-Type (IMAGETYPE) festlegen. Hinweis: Diese Funktion benötigt die GD-Bibliothek nicht. Parameter-Liste imagetype ... Einen der folgenden IMAGETYPE_XXX Konstanten: IMAGETYPE_GIF .. image/gif IMAGETYPE_JPEG .. image/jpeg IMAGETYPE_PNG .. image/png IMAGETYPE_SWF .. application/x-shockwave-flash IMAGETYPE_PSD .. image/psd IMAGETYPE_BMP .. image/bmp IMAGETYPE_TIFF_II (intel byte order) .. image/tiff IMAGETYPE_TIFF_MM (motorola byte order) .. image/tiff IMAGETYPE_JPC .. application/octet-stream IMAGETYPE_JP2 .. image/jp2 IMAGETYPE_JPX .. application/octet-stream IMAGETYPE_JB2 .. application/octet-stream IMAGETYPE_SWC .. application/x-shockwave-flash IMAGETYPE_IFF .. image/iff IMAGETYPE_WBMP .. image/vnd.wap.wbmp IMAGETYPE_XBM .. image/xbm IMAGETYPE_ICO .. image/vnd.microsoft.icon IMAGETYPE_WEBP .. image/webp Beispiel Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php $filename = 'test_01.jpg'; header("Content-type: " . image_type_to_mime_type(IMAGETYPE_JPEG)); $source = imagecreatefromjpeg($filename); imagejpeg($source); // Speicher wieder freigeben imagedestroy($source); ?> oben  imageline(resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color) Zeichnet eine Linie zwischen den beiden gegebenen Punkten. Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Siehe auch: imagecreatetruecolor() imagecolorallocate() imagesetthickness() Parameter-Liste image ... Eine von den verschiedenen Erzeugungsfunktionen wie imagecreatetruecolor() gelieferte Grafikressource. x1 ... x-Koordinate des ersten Punkts. y1 ... y-Koordinate des ersten Punkts. x2 ... x-Koordinate des zweiten Punkts. y2 ... y-Koordinate des zweiten Punkts. color ... Die Linienfarbe. Eine Farbkennung, die mit imagecolorallocate() erzeugt wurde. Beispiel - Zeichnen einer dicken Linie (die x,y-Koordinaten befinden sich in der Mitte der dicken Linie) <?php function imagelinethick($image, $x1, $y1, $x2, $y2, $color, $thick = 1) { if($thick < 1) $thick = 1; if($thick > 1) imagesetthickness($image, $thick); return imageline($image, $x1, $y1, $x2, $y2, $color); } $image = "./test_01.jpg"; // Testbild groeszer 1200 x 600 $new_image = "./test_01_1.jpg"; $x1 = 50; $y1 = 500; $x2 = 1000; $y2 = 500; $source = imagecreatefromjpeg($image); $color = imagecolorallocate($source, 255, 0, 0); $thick = 80; $return_code=imagelinethick($source, $x1, $y1, $x2, $y2, $color, $thick); $img_output="NO IMAGE"; if($return_code === true) { imagejpeg($source, $new_image); if(file_exists($new_image)) { $img_info = getimagesize($new_image); $img_output = "<img src=\"" . $new_image . "\" " . $img_info[3] . " title=\"TESTBILD\" alt=\"TESTBILD\">\n"; } } ?> <!doctype html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>TEST IMAGE-FUNKTIONEN</title> <style type="text/css"> <!-- body { margin:10px 15px 15px 10px; background-color:#E0E0E0; } --> </style> </head> <body> <?php echo $img_output; ?> </body> </html> oben  imagesetthickness(resource $image , int $thickness) Die Funktion imagesetthickness() legt die Dicke einer zu zeichnenden Linie in Pixel fest. Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Siehe auch: imagecreatetruecolor() imagecolorallocate() imageline() Parameter-Liste image ... Eine von den verschiedenen Erzeugungsfunktionen wie imagecreatetruecolor() gelieferte Grafikressource. thickness ... Dicke der Linie in Pixel. Beispiel - Zeichnen einer dicken Linie (die x,y-Koordinaten befinden sich in der Mitte der dicken Linie) <?php function imagelinethick($image, $x1, $y1, $x2, $y2, $color, $thick = 1) { if($thick < 1) $thick = 1; if($thick > 1) imagesetthickness($image, $thick); return imageline($image, $x1, $y1, $x2, $y2, $color); } $image = "./test_01.jpg"; // Testbild groeszer 1200 x 600 $new_image = "./test_01_1.jpg"; $x1 = 50; $y1 = 500; $x2 = 1000; $y2 = 500; $source = imagecreatefromjpeg($image); $color = imagecolorallocate($source, 255, 0, 0); $thick = 80; $return_code=imagelinethick($source, $x1, $y1, $x2, $y2, $color, $thick); $img_output="NO IMAGE"; if($return_code === true) { imagejpeg($source, $new_image); if(file_exists($new_image)) { $img_info = getimagesize($new_image); $img_output = "<img src=\"" . $new_image . "\" " . $img_info[3] . " title=\"TESTBILD\" alt=\"TESTBILD\">\n"; } } ?> <!doctype html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>TEST IMAGE-FUNKTIONEN</title> <style type="text/css"> <!-- body { margin:10px 15px 15px 10px; background-color:#E0E0E0; } --> </style> </head> <body> <?php echo $img_output; ?> </body> </html> oben  imagefilter(resource $image , int $filtertype [, int $arg1 [, int $arg2 [, int $arg3 [, int $arg4 ]]]]) Die Funktion stellt einige Filter für Bilder zur Verfügung. Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Siehe auch: imagecreatetruecolor() imagecolorallocate() Parameter-Liste image ... Eine von den verschiedenen Erzeugungsfunktionen wie imagecreatetruecolor() gelieferte Grafikressource. filtertype ... Dateitypen für die Bearbeitung von Bildern: IMG_FILTER_NEGATE .. Invertiert (Umkehrung) alle Farben eines Bildes. IMG_FILTER_GRAYSCALE .. Konvertiert in ein Farbbild in ein Graustufenbild. IMG_FILTER_BRIGHTNESS .. Verändert die Helligkeitswerte eines Bildes. Der Wert für die Änderung der Helligkeit des Bildes kann sich zwischen -255 bis 255 bewegen. IMG_FILTER_CONTRAST .. Verändert den Kontrast eines Bildes. Mit dem Argument arg1 wird der Wert für die Änderung übergeben. IMG_FILTER_COLORIZE .. Verändert die Farbintensität der einzelnen RGB-Farben. Mit den Argumenten arg1, arg2 und arg3 werden die Werte für Rot, Grün und Blau übergeben. Mit dem Argument arg4 wird der Wert für den Alphakanal (alpha channel) übergeben. Der Bereich der Farbwerte beträgt 0 bis 255 und für den Alphakanal 0 bis 127. IMG_FILTER_EDGEDETECT .. Dieser Filter kann für die Betonung der Kanten von Bildelementen genutzt werden. IMG_FILTER_EMBOSS .. Mit diesen Filter kann der Effekt einer Prägung (emboss) nachempfunden werden. IMG_FILTER_GAUSSIAN_BLUR .. Erzeugung von Bewegungsunschärfe (Weichzeichnung, Verwischen) nach der Methode von Gauß. IMG_FILTER_SELECTIVE_BLUR .. Erzeugung von Bewegungsunschärfe (Weichzeichnung, Verwischen). IMG_FILTER_MEAN_REMOVAL .. Änderungs des Bildes unter Verwendung des sketchy-Effektes (sketchy ... Skizze). IMG_FILTER_SMOOTH .. Glätten eines Bildes. Mit dem Argument arg1 wird der Wert für die Änderung übergeben. IMG_FILTER_PIXELATE .. Verpixelung eines Bildes. Mit dem Argument arg1 wird der Wert für die Blockgröße (block size) übergeben und das Argument arg2 setzt den Modus für den Effekt der Verpixelung. arg1 IMG_FILTER_BRIGHTNESS .. Level für die Helligkeit (Brightness). 0 .. keine Änderung, 255 .. maximale Helligkeit (weißes Bild), -255 .. geringste Helligkeit (schwarzes Bild) IMG_FILTER_CONTRAST .. Level für den Kontrast (Contrast). 0 .. keine Änderung, -80 .. starker Kontrast; 80 .. sehr geringer Kontrast, Hinweis: Der erlaubte Bereich (minus- und plus-Bereich) ist deutlich größer. IMG_FILTER_COLORIZE .. Wert der Rotkomponente (0 bis 255). IMG_FILTER_SMOOTH .. Level für die Glättung (sinnvolle Werte: 0 bis 100). IMG_FILTER_PIXELATE .. Blockgröße (block size) in Pixel. arg2 IMG_FILTER_COLORIZE .. Wert der Grünkomponente (0 bis 255). IMG_FILTER_PIXELATE .. Legt fest ob der erweiterte Effekt genutzt wird (Defaultwert: FALSE). arg3 IMG_FILTER_COLORIZE .. Wert der Blaukomponente (0 bis 255). arg4 IMG_FILTER_COLORIZE .. Wert (0 bis 127) für den Alpha Channel. 0 .. vollständig undurchsichtig, 127 .. vollständige Transparenz. Beispiel 1 - Graustufenbild <?php $filename = "./test_01.jpg"; $new_image = "./test_01_1.jpg"; $source = imagecreatefromjpeg($filename); $return_code = imagefilter($source, IMG_FILTER_GRAYSCALE); $img_output="NO IMAGE"; if($return_code === true) { imagejpeg($source, $new_image); imagedestroy($source); if(file_exists($new_image)) { $img_info = getimagesize($new_image); $img_output = "<img src=\"" . $new_image . "\" " . $img_info[3] . " title=\"TESTBILD\" alt=\"TESTBILD\">\n"; } } ?> <!doctype html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>TEST IMAGE-FUNKTIONEN</title> <style type="text/css"> <!-- body { margin:10px 15px 15px 10px; background-color:#E0E0E0; } --> </style> </head> <body> <?php echo $img_output; ?> </body> </html> Beispiel 2 - Helligkeit <?php $filename = "./test_01.jpg"; $new_image = "./test_01_1.jpg"; $source = imagecreatefromjpeg($filename); $return_code = imagefilter($source, IMG_FILTER_BRIGHTNESS, 50); $img_output="NO IMAGE"; if($return_code === true) { imagejpeg($source, $new_image); imagedestroy($source); if(file_exists($new_image)) { $img_info = getimagesize($new_image); $img_output = "<img src=\"" . $new_image . "\" " . $img_info[3] . " title=\"TESTBILD\" alt=\"TESTBILD\">\n"; } } ?> <!doctype html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>TEST IMAGE-FUNKTIONEN</title> <style type="text/css"> <!-- body { margin:10px 15px 15px 10px; background-color:#E0E0E0; } --> </style> </head> <body> <?php echo $img_output; ?> </body> </html> Beispiel 3 - Einfärbung eines Bildes <?php $filename = "./test_01.jpg"; $new_image = "./test_01_1.jpg"; $source = imagecreatefromjpeg($filename); $return_code = imagefilter($source, IMG_FILTER_COLORIZE, 255, 0, 0); $img_output="NO IMAGE"; if($return_code === true) { imagejpeg($source, $new_image); imagedestroy($source); if(file_exists($new_image)) { $img_info = getimagesize($new_image); $img_output = "<img src=\"" . $new_image . "\" " . $img_info[3] . " title=\"TESTBILD\" alt=\"TESTBILD\">\n"; } } ?> <!doctype html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>TEST IMAGE-FUNKTIONEN</title> <style type="text/css"> <!-- body { margin:10px 15px 15px 10px; background-color:#E0E0E0; } --> </style> </head> <body> <?php echo $img_output; ?> </body> </html> Beispiel 4 - Verpixelung eines Bildes <?php $filename = "./test_01.jpg"; $new_image = "./test_01_1.jpg"; $source = imagecreatefromjpeg($filename); $return_code = imagefilter($source, IMG_FILTER_PIXELATE, 4); $img_output="NO IMAGE"; if($return_code === true) { imagejpeg($source, $new_image); imagedestroy($source); if(file_exists($new_image)) { $img_info = getimagesize($new_image); $img_output = "<img src=\"" . $new_image . "\" " . $img_info[3] . " title=\"TESTBILD\" alt=\"TESTBILD\">\n"; } } ?> <!doctype html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>TEST IMAGE-FUNKTIONEN</title> <style type="text/css"> <!-- body { margin:10px 15px 15px 10px; background-color:#E0E0E0; } --> </style> </head> <body> <?php echo $img_output; ?> </body> </html> oben  imagestring(resource $image , int $font , int $x , int $y , string $string , int $color) Mit imagestring() zeichnet man auf einer Arbeitsfläche (image) einen waagerechten, horizontalen Text, String (string) mit der Farbe color und der Schriftgröße font. Als Schriftarten und Schriftgrößen (Werte: 1-5) stehen nur die in PHP eingebauten Schriftarten (Textkodierung: englische Alphabet, Zahlen und einige Sonderzeichen) zur Verfügung. Mit den XY-Koordinaten (x und y) gibt man den linken oberen Startpunkt des Strings an. Die Farbkennung color ist die Farbe die mit der Funktion imagecolorallocate() erzeugt wurde. Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Siehe auch: imagecreatetruecolor() Beispiel 1 Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php header("Content-Type: image/png"); $image = imagecreate(300,150); imagecolorallocate($image,243,243,243); $farbe_b = imagecolorallocate($image,10,36,106); imagestring($image, 5, 30, 70, "PHP3/4 - Die Befehlsreferenz", $farbe_b); imagepng($image); imagedestroy($image); ?> Beispiel 2 <?php $filename = './test_02.jpg'; // minimale Groesze 300 x 150 Pixel $new_image = './test_03.jpg'; $source = imagecreatefromjpeg($filename); $color = imagecolorallocate($source, 255, 0, 0); imagestring($source, 5, 30, 70, "PHP3/4 - Die Befehlsreferenz", $color); imagejpeg($source, $new_image); // Speicher wieder freigeben imagedestroy($source); $img_output="NO IMAGE"; if(file_exists($new_image)) { $img_info = getimagesize($new_image); $img_output = "<img src=\"" . $new_image . "\" " . $img_info[3] . " title=\"TESTBILD\" alt=\"TESTBILD\">\n"; } ?> <!doctype html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>TEST IMAGE-FUNKTIONEN</title> <style type="text/css"> <!-- body { margin:10px 15px 15px 10px; background-color:#E0E0E0; } --> </style> </head> <body> <?php echo $img_output; ?> </body> </html> oben  imagestringup(resource $image , int $font , int $x , int $y , string $string , int $color) Mit imagestringup() zeichnet man auf einer Arbeitsfläche (image) einen senkrechten, vertikalen Text, String (string) mit der Farbe color und der Schriftgröße font. Als Schriftarten und Schriftgrößen (Werte: 1-5) stehen nur die in PHP eingebauten Schriftarten (Textkodierung: englische Alphabet, Zahlen und einige Sonderzeichen) zur Verfügung. Mit den XY-Koordinaten (x und y) gibt man den linken unteren Startpunkt des Strings an. Die Farbkennung color ist die Farbe die mit der Funktion imagecolorallocate() erzeugt wurde. Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Siehe auch: imagestring() imagecolorallocate() imagejpeg() imagedestroy() Parameter-Liste image ... Eine von den verschiedenen Erzeugungsfunktionen wie imagecreatetruecolor() gelieferte Grafikressource. font ... Ein Wert zwischen 1 und 5 für eingebaute Schriftarten in Latin2-Kodierung (wobei größere Werte größeren Schriften entsprechen) oder einer Ihrer mit imageloadfont() selbst registrierten Schrifteinträge. x ... x-Koordinate der unteren linken Ecke. y ... y-Koordinate der unteren linken Ecke. string ... Die zu schreibende Zeichenkette. color ... Eine Farbkennung, die mit imagecolorallocate() erzeugt wurde. Beispiel 1 Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php // Erzeuge ein 200 x 200 Bild $source = imagecreatetruecolor(200, 200); $text = ' Schreibe den Text'; header('Content-type: image/jpeg'); // Schreibe den Text $textcolor = imagecolorallocate($source, 0xFF, 0xFF, 0xFF); imagestringup($source, 3, 40, 180, $text, $textcolor); // Output imagejpeg($source); // Speicher wieder freigeben imagedestroy($source); ?> Beispiel 2 <?php $filename = './test_02.jpg'; // minimale Groesze 200 x 200 Pixel $new_image = './test_03.jpg'; $text = ' Schreibe den Text'; $source = imagecreatefromjpeg($filename); $color = imagecolorallocate($source, 0xFF, 0xFF, 0xFF); imagestringup($source, 5, 40, 180, $text, $color); imagejpeg($source, $new_image); // Speicher wieder freigeben imagedestroy($source); $img_output="NO IMAGE"; if(file_exists($new_image)) { $img_info = getimagesize($new_image); $img_output = "<img src=\"" . $new_image . "\" " . $img_info[3] . " title=\"TESTBILD\" alt=\"TESTBILD\">\n"; } ?> <!doctype html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>TEST IMAGE-FUNKTIONEN</title> <style type="text/css"> <!-- body { margin:10px 15px 15px 10px; background-color:#E0E0E0; } --> </style> </head> <body> <?php echo $img_output; ?> </body> </html> oben  imagerotate(resource $image , float $angle , int $bgd_color [, int $dummy = 0 ]) Die Funktion dreht das Bild, entsprechend des übergebenen Drehwinkels in Grad. Das Zentrum der Drehung ist die Bildmitte. Nach der Bilddrehung hat das Bild andere Maße (Bildbreite x Bildhöhe) als das Originalbild. Im Fehlerfall wird FALSE zurückgegeben. Siehe auch: imagecreatetruecolor() imagecrop() imagedestroy() getimagesize() Parameter-Liste image ... Eine von den verschiedenen Erzeugungsfunktionen wie imagecreatetruecolor(), imagecreatefromjpeg(), ... gelieferte Grafikressource. angle ... Winkel der Bilddrehung in Grad. Die Drehung des Bildes erfolgt entsprechend des übergebenen Rotationswinkel (Grad: 0 ... 360) gegen den Uhrzeigersinn (linksherum). bgd_color ... Festlegung der Hintergrundfarbe der freigelegten Bildzone nach der Drehung des Bildes. Bei einer Drehung des Bildes von 90°, 180° und 270° wird die Hintergrundfarbe der neuen Bildressource nicht angezeigt. Bei einem anderen Drehwinkel kann die gelieferte Grafikressource über die Funktion imagecrop() von der Hintergrundfarbe befreit werden. dummy ... Ein von der Funktion nicht genutzter Parameter. Beispiel 1 - Drehung um 180 Grad (Kopfüber) Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php $filename = 'test_01.jpg'; $degrees = 180; $bg_color = 0; // 0 .. schwarz, 90 .. blau header('Content-type: image/jpeg'); $source = imagecreatefromjpeg($filename); $rotate = imagerotate($source, $degrees, $bg_color); imagejpeg($rotate); // Speicher wieder freigeben imagedestroy($source); imagedestroy($rotate); ?> Beispiel 2 - Drehung um 90 Grad (Drehung gegen den Uhrzeigersinn) <?php $filename = './test_01.jpg'; $new_image = './test_03.jpg'; $degrees = 90; // 270 .. Drehung um 270 Grad gegen den Uhrzeigersinn oder 90 Grad im Uhrzeigersinn $bg_color = 0; // 0 .. schwarz, 90 .. blau $source = imagecreatefromjpeg($filename); $rotate = imagerotate($source, $degrees, $bg_color); imagejpeg($rotate, $new_image); // neues Bild speichern // Speicher wieder freigeben imagedestroy($source); imagedestroy($rotate); $img_output="NO IMAGE"; if(file_exists( $new_image)) { $img_info = getimagesize($new_image); $img_output = "<img src=\"" . $new_image . "\" " . $img_info[3] . " title=\"TESTBILD\" alt=\"TESTBILD\">\n"; } ?> <!doctype html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>TEST IMAGE-FUNKTIONEN</title> <style type="text/css"> <!-- body { margin:10px 15px 15px 10px; background-color:#E0E0E0; } --> </style> </head> <body> <?php echo $img_output; ?> </body> </html> oben  imageflip(resource $image , int $mode) Ein Bild horizontal oder vertikal spiegeln. Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Siehe auch: imagecreatetruecolor() imagedestroy() getimagesize() Parameter-Liste image ... Eine von den verschiedenen Erzeugungsfunktionen wie imagecreatetruecolor() gelieferte Grafikressource. mode ... Modus für die Spiegelung von Bildern. IMG_FLIP_HORIZONTAL .. Konstante für die horizontale Spiegelung eines Bildes. IMG_FLIP_VERTICAL .. Konstante für die vertikale Spiegelung eines Bildes. IMG_FLIP_BOTH .. Konstante für die horizontale und vertikale Spiegelung eines Bildes. Beispiel 1 - vertikale Spiegelung Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php $filename = './test_01.jpg'; header('Content-type: image/jpeg'); $source = imagecreatefromjpeg($filename); imageflip($source, IMG_FLIP_VERTICAL); // Output imagejpeg($source); // Speicher wieder freigeben imagedestroy($source); ?> Beispiel 2 - horizontale Spiegelung Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php $filename = './test_01.jpg'; $new_image = './test_03.jpg'; $source = imagecreatefromjpeg($filename); imageflip($source, IMG_FLIP_HORIZONTAL); imagejpeg($source, $new_image); // neues Bild speichern // Speicher wieder freigeben imagedestroy($source); $img_output="NO IMAGE"; if(file_exists( $new_image)) { $img_info = getimagesize($new_image); $img_output = "<img src=\"" . $new_image . "\" " . $img_info[3] . " title=\"TESTBILD\" alt=\"TESTBILD\">\n"; } ?> <!doctype html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>TEST IMAGE-FUNKTIONEN</title> <style type="text/css"> <!-- body { margin:10px 15px 15px 10px; background-color:#E0E0E0; } --> </style> </head> <body> <?php echo $img_output; ?> </body> </html> oben  imagecolorat(resource $image , int $x , int $y) Ermittelt den Farbwert eines Bildpunktes, Pixels am angegebenen Ort eines Bildes (image). Handelt es sich bei dem Bild um ein Echtfarben-Bild, liefert diese Funktion den RGB-Wert dieses Pixels als Integer zurück. Bitverschiebung und Maskierung (siehe: Beispiel 1) kann verwendet werden, um auf die individuellen rot, grün und blau RGB-Werte zuzugreifen. Im Fehlerfall wird FALSE zurückgegeben. Hinweis: Diese Funktion kann sowohl das boolsche FALSE zurückliefern, als auch einen nicht-boolschen Wert, welcher zu FALSE ausgewertet wird. Benutzen Sie deshalb den === Operator, um den Rückgabewert dieser Funktion zu überprüfen. Siehe auch: imagecreatetruecolor() imagecreatefrompng() imagecreatefromjpeg() imagecreatefromgif() Parameter-Liste image ... Eine von den verschiedenen Erzeugungsfunktionen wie imagecreatetruecolor() gelieferte Grafikressource. x ... x-Kooordinate des Punkts. y ... y-Koordinate des Punkts. Beispiel 1 Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php $im = imagecreatefrompng("./test_01.png"); $rgb = imagecolorat($im, 10, 15); $red = ($rgb >> 16) & 0xFF; $green = ($rgb >> 8) & 0xFF; $blue = $rgb & 0xFF; var_dump($red, $green, $blue); ?> Ausgabe 1 int(125) int(153) int(53) Beispiel 2 Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php $im = imagecreatefrompng("./test_01.png"); $rgb = imagecolorat($im, 10, 15); $colors = imagecolorsforindex($im, $rgb); echo "<pre>"; var_dump($colors); echo "</pre>"; ?> Ausgabe 2 array(4) { ["red"]=> int(125) ["green"]=> int(153) ["blue"]=> int(53) ["alpha"]=> int(0) } oben  imagecolorsforindex(resource $image , int $index) Gibt die Farbwerte eines Palettenindex zurück. Die Funktion gibt ein assoziatives Array mit red, green, blue und alpha Schlüsseln zurück, das die entsprechenden Werte für den angegebenen Palettenindex enthält. Siehe auch: imagecreatefrompng() imagecreatefromjpeg() imagecreatefromgif() imagecolorat() Parameter-Liste image ... Eine von den verschiedenen Erzeugungsfunktionen wie imagecreatetruecolor() gelieferte Grafikressource. index ... Der Palettenindex. Beispiel Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php // erzeuge ein Bild $im = imagecreatefrompng('test_01.png'); // ermittle eine Farbe $start_x = 40; $start_y = 50; $color_index = imagecolorat($im, $start_x, $start_y); // Bringe es in menschenlesbare Form $color_tran = imagecolorsforindex($im, $color_index); echo "<pre>"; print_r($color_tran); echo "</pre>"; ?> Ausgabe Array ( [red] => 89 [green] => 125 [blue] => 17 [alpha] => 0 ) oben  imagesetpixel(resource $image , int $x , int $y , int $color) imagesetpixel() zeichnet, setzt ein Pixel an der angegebenen Koordinate. Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Siehe auch: imagecreatetruecolor() imagecreatefrompng() imagecreatefromjpeg() imagecreatefromgif() Parameter-Liste image ... Eine von den verschiedenen Erzeugungsfunktionen wie imagecreatetruecolor() gelieferte Grafikressource. x ... x-Koordinate. y ... y-Koordinate. color ... Eine Farbkennung, die mit imagecolorallocate() erzeugt wurde. Beispiel - zufällige Zeichnung, die mit einem normalen Bild endet Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php $x = 200; $y = 200; $gd = imagecreatetruecolor($x, $y); $corners[0] = array('x' => 100, 'y' => 10); $corners[1] = array('x' => 0, 'y' => 190); $corners[2] = array('x' => 200, 'y' => 190); $red = imagecolorallocate($gd, 255, 0, 0); for($i = 0; $i < 100000; $i++) { imagesetpixel($gd, round($x),round($y), $red); $a = rand(0, 2); $x = ($x + $corners[$a]['x']) / 2; $y = ($y + $corners[$a]['y']) / 2; } header('Content-Type: image/png'); imagepng($gd); ?> oben  imagesx(resource $image) Mit imagesx() kann man die Breite eines Bildes (image) ermitteln. Gibt die Breite des image zurück oder FALSE im Fehlerfall. Siehe auch: getimagesize() imagesy() Beispiel <?php $image = imagecreate(200,150); echo imagesx($image); ?> Ausgabe 200 oben  imagesy(resource $image) Mit imagesy() kann man die Höhe eines Bildes (image) ermitteln. Gibt die Höhe des image zurück oder FALSE im Fehlerfall. Siehe auch: getimagesize() imagesx() Beispiel <?php $image = imagecreate(200,150); echo imagesy($image); ?> Ausgabe 150
Seitenanfang 

J

join oben  join(string glue, array pieces) Mit join() fügt man ein Array (pieces) anhand eines Trennzeichens (glue) zu einem String zusammen. Dabei werden die Array-Elemente nacheinander an den String angehängt. Die Funktion join() ist ein Alias von der Funktion implode(). Siehe auch: explode() implode() Beispiel <?php $array = array("PHP","3/4","- Die Befehlsreferenz"); echo join(" ",$array); echo "<br>"; echo join("",$array); echo "<br>"; echo join("#",$array); ?> Ausgabe PHP 3/4 - Die Befehlsreferenz PHP3/4- Die Befehlsreferenz PHP#3/4#- Die Befehlsreferenz
Seitenanfang 

K

key oben  key(array_name) Die Funktion key() liefert den Schlüssel des aktuellen Elements innerhalb des Arrays (array_name). Ist das Array kein Assoziativarray, wird so wird der numerische Index des aktuellen Elements zurückgegeben (0,1,2,3,4,.....,n ). Hinweis: Die key() Funktion gibt einfach den Schlüssel des Arrayelements zurück, auf das momentan durch den internen Zeiger gezeigt wird. Sie bewegt den Zeiger in keiner Weise. Zeigt der interne Zeiger über das Ende der Elementliste hinaus oder ist das Array leer, gibt key() NULL zurück. Siehe auch: Array-Funktionen Beispiel <?php $array =array("Script1"=>"PHP","Script2"=>"ASP"); for($x=0;$x<sizeof($array);$x++) { echo key($array) . " : " . current($array) . "<br>"; next($array); } ?> Ausgabe Script1 : PHP Script2 : ASP
Seitenanfang 

L

list oben  list(mixed $var1 [, mixed $... ]) list() weist den als Argumente übergebenen Variablen die Werte aus einem Array zu. Wie array() ist auch dies keine wirkliche Funktion, sondern ein Sprachkonstrukt. list() gibt das zugewiesene Array zurück. Hinweis: In PHP 5 weist list() die Werte von rechts beginnend zu. In PHP 7 beginnt list() von links. Wenn Sie einfache Variablen benutzen, brauchen Sie sich nicht darum zu kümmern. Wenn Sie jedoch Arrays mit Indizes verwenden, erwarten Sie gewöhnlich die Reihenfolge der Indizes in dem Array genau so, wie Sie sie in list() geschrieben haben (von links nach rechts), was jedoch in PHP 5 nicht der Fall ist. Es wird in der umgekehrten Reihenfolge zugewiesen. Allgemein gesagt, ist es ratsam sich nicht auf eine bestimmte Operations-Reihenfolge zu verlassen, da sich diese zukünftig wieder ändern könnte. Siehe auch: Array-Funktionen Beispiel 1 <?php $array = array("PHP","ASP","Perl"); list($php,$asp,$perl) = $array; echo $php . "<br>" . $asp . "<br>".$perl; ?> Ausgabe 1 PHP ASP Perl Beispiel 2 <?php $info = array('Kaffee', 'braun', 'Koffein'); // Auflisten aller Variablen list($drink, $color, $power) = $info; echo "$drink ist $color und $power macht es zu etwas besonderem.\n"; // Ein paar davon auflisten list($drink, , $power) = $info; echo "$drink hat $power.\n"; // Oder nur die dritte ausgeben list( , , $power) = $info; echo "Ich brauche $power!\n"; // list() funktioniert nicht mit Zeichenketten list($bar) = "abcde"; var_dump($bar); // NULL ?> Ausgabe 2 Kaffee ist braun und Koffein macht es zu etwas besonderem. Kaffee hat Koffein. Ich brauche Koffein! NULL
Seitenanfang 

M

mail md5 microtime mkdir mime_content_type mktime move_uploaded_file MySQLi-Funktionen mysqli_connect mysqli_query mysqli_connect_errno mysqli_connect_error mysqli_free_result mysqli_close mysqli_select_db mysqli_real_escape_string mysqli_num_rows mysqli_num_fields mysqli_fetch_row mysqli_fetch_all mysqli_fetch_field mysqli_fetch_array mysqli_field_seek Informationen über die MySQLi-Variablen oben  mail(string $to , string $subject , string $message [, mixed $additional_headers [, string $additional_parameters ]]) Mit mail() kann man eine E-Mail im Text- oder HTML-Format an eine oder mehrere Personen versenden. Gibt TRUE zurück, wenn die E-Mail erfolgreich für den Versand akzeptiert wurde, sonst FALSE. Dass eine E-Mail für den Versand akzeptiert wurde, bedeutet NICHT, dass sie auch wirklich den gewünschten Empfänger erreichen wird. Hinweis: Um eine E-Mail zu senden, muss die E-Mail einen From-Header enthalten. Dies kann entweder durch Setzen eines additional_headers-Parameters oder durch Setzen eines Standardwertes in der php.ini geschehen. Wenn E-Mails nicht ankommen, versuchen Sie bitte, nur das LF-Zeichen (\n) zu verwenden. Einige UNIX-MTAs (mail transfer agents) ersetzen leider LF durch CRLF (\r\n) automatisch (wodurch das CR-Zeichen verdoppelt wird, wenn CRLF verwendet wird). Dies sollte aber nur in Ausnahmefällen geschehen, da es gegen RFC 2822 verstößt. Es ist zu beachten, dass die mail()-Funktion nicht dazu geeignet ist, große Mengen von E-Mails in einer Schleife zu senden, da die Funktion für jede E-Mail ein SMTP-Socket öffnet und schließt, was nicht sehr effizient ist. CR (\r) ... carriage return (Wagenrücklauf) LF (\n)) ... line feed (Zeilenvorschub) CRLF (\r\n) ... carriage return-line feed (Wagenrücklauf und Zeilenvorschub) RFC (Request for Comments) ... Bei einem Request for Comments (RFC) handelt es sich um ein nummeriertes Dokument, in dem Protokolle, Konzepte, Methoden und Programme des Internets behandelt, beschrieben und definiert werden. Die Verwaltung der RFCs erfolgt durch die IETF (Internet Engineering Task Force). Siehe auch: iconv() Hinweis: Die Windows-Implementierung von mail() unterscheidet sich auf mehrere Arten von der Unix-Implementation. Parameter-Liste to ... Empfänger (einer oder mehrere) der E-Mail. Die Formatierung dieses Strings muss nach RFC 2822 erfolgen. Beispiele: benutzer@example.com benutzer@example.com, benutzer2@example.com Name <benutzer@example.com> Name <benutzer@example.com>, Name2 <benutzer2@example.com> Hinweis: Die benutzerdefinierten Header wie From:, Cc:, Bcc: und Date: werden nicht direkt durch den MTA (mail transfer agents) interpretiert, sondern zunächst von PHP geparst. Daher sollte der to-Parameter keine Adresse der Form "Irgendwas <irgendwer@example.com>" enthalten, da dies von PHP möglicherweise nicht korrekt an den MTA übergeben werden kann, obwohl die RFC 2822 dies erlaubt. subject ... Betreff der E-Mail. Die Formatierung dieses Strings muss nach RFC 2047 erfolgen. message ... Die zu sendende Nachricht. Jede Zeile muss durch CRLF (\r\n) getrennt werden. Außerdem sollten die Zeilen nicht mehr als 70 Zeichen enthalten. Hinweis (nur unter Windows): Falls PHP direkt mit einem SMTP-Server kommuniziert und wenn ein Punkt (.) an einem Zeilenanfang steht, wird dieser Punkt entfernt. Um das zu verhindern, können Sie diese Punkte durch zwei Punkte ersetzen. <?php $text = str_replace("\n.", "\n..", $text); ?> additional_headers (optional) ... String oder Array, das am Ende des E-Mail-Headers eingefügt werden soll. Dies kann benutzt werden, um zusätzliche Header- Angaben wie From, Cc oder Bcc anzugeben. Falls mehrere solcher zusätzlichen Header-Angaben angegeben werden sollen, müssen diese durch ein CRLF-Zeichen (\r\n) getrennt werden. Wenn von außen kommende Daten verwendet werden, um diesen Header zusammenzustellen, sollten diese Daten bereinigt werden, so dass keine ungewünschten Header eingeschleust werden können. Wird ein Array übergeben, werden dessen Schlüssel als Header-Namen, und dessen Werte als entsprechende Header-Werte interpretiert. Um eine E-Mail zu senden, muss die E-Mail einen From-Header enthalten. Dies kann entweder durch Setzen eines additional_headers-Parameters oder durch Setzen eines Standardwertes in der php.ini geschehen. Falls dies nicht geschieht, wird eine Fehlermeldung ähnlich wie Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing ausgegeben. Der From Header setzt unter Windows auch den Return-Path Header. Wenn E-Mails nicht ankommen, versuchen Sie bitte, nur das LF-Zeichen (\n) zu verwenden. Einige UNIX-MTAs (mail transfer agents) ersetzen leider LF durch CRLF (\r\n) automatisch (wodurch das CR-Zeichen verdoppelt wird, wenn CRLF verwendet wird). Dies sollte aber nur in Ausnahmefällen geschehen, da es gegen RFC 2822 verstößt. additional_parameters (optional) ... Der additional_parameters-Parameter kann benutzt werden, um zusätzliche Parameter an das Programm zu senden, das für den E-Mail-Versand konfiguriert ist (wenn die sendmail_path-Einstellung verwendet wird). Zum Beispiel kann hiermit die "envelope sender address" (Absenderadresse) gesetzt werden, wenn sendmail mit der -f-Option benutzt wird. Dieser Parameter wird intern durch escapeshellcmd() maskiert, um Kommando-Injection zu verhindern. escapeshellcmd() verhindert Kommando-Injection, erlaubt allerdings zusätzliche Parameter hinzuzufügen. Aus Sicherheitsgründen wird empfohlen, dass dieser Parameter bereinigt wird, um zu verhindern, dass keine unerwünschten Parameter an das Shell-Kommando übergeben werden. Da escapeshellcmd() automatisch angewendet wird, können einige Zeichen, die gemäß Internet-RFCs in E-Mail-Adressen erlaubt sind, nicht verwendet werden. mail() kann aber diese Zeichen nicht erlauben, so dass für Programme, die diese Zeichen unterstützen müssen, alternative Methoden für den E-Mail-Versand empfohlen werden. Beispiel 1 - Versenden von einfachen E-Mails <?php // die Nachricht $nachricht = "Zeile 1\r\nZeile 2\r\nZeile 3"; // falls eine Zeile der Nachricht mehr als 70 Zeichen enthaelt, so sollte wordwrap() benutzt werden $nachricht = wordwrap($nachricht, 70, "\r\n"); // Verschicken mail('benutzer@example.com', 'Mein Betreff', $nachricht); ?> Beispiel 2 <?php /* An dieses Skript wurde über Submit folgende Variablen übergeben: $from, $to, $betreff, $gruss, $kommentar und $ciao, die von diesem Skript als Email weitergesendet wird. Mit dem regulären Ausdruck (siehe $frage_1) wird die Syntax einer Email-Adresse überprüft. Nach dem letzten Punkt in der Email-Adresse müssen mindestens 2 Buchstaben, aber maximal 9 Buchstaben stehen. Damit sind Adresse mit folgenden Domainnamen abgedeckt .de, .org, .net, .info, .museum , .education etc..*/ $datum = date("d.m.Y"); $frage_1 = preg_match("/^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,9}$/i", $from); $frage_2 = strlen($from); if(!empty($from) && !empty($to) && !empty($betreff) && !empty($gruss) && !empty($kommentar) && !empty($ciao)&& $frage_1 && $frage_2 > 5) { $email_array = array("betreff", "gruss", "kommentar", "ciao"); $email_array_count = count($mail_array); for($x=0; $x<$email_array_count; $x++){ $email_array[$x] = stripslashes($email_array[$x]); } $email_body = "\t\t Email an Kino \r\n\r\n"; $email_body .= $email_array[1] . "\r\n"; $email_body .= $email_array[2] . "\r\n\r\n"; $email_body .= $email_array[3] . "\r\n\r\n"; $email_body .= "Email vom: " . $datum . " *** gesendet von " . $from . "\r\n"; $header = "From: " . $from . "\r\n"; $header .= "Datum: " . $datum . "\r\n"; mail($to, $email_array[0], $email_body, $header); // hier kann weiterer PHP-Code stehen ?> Beispiel 3 Hier werden einfache Header gesetzt, um dem MUA (mail user agent, z.B. ein E-Mail-Programm) die From- und die Reply-To-Adressen mitzuteilen. <?php $empfaenger = 'niemand@example.com'; $betreff = 'Der Betreff'; $nachricht = 'Hallo'; $header = 'From: webmaster@example.com' . "\r\n" . 'Reply-To: webmaster@example.com' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($empfaenger, $betreff, $nachricht, $header); ?> Beispiel 4 - Verschicken einer E-Mail mit zusätzliche Headern als Array Verschicken einer Email, aber diesemal werden die zusätzlichen Header als Array übergeben (verfügbar von PHP 7.2.0 an). <?php $empfaenger = 'niemand@example.com'; $betreff = 'Der Betreff'; $nachricht = 'Hallo'; $header = array( 'From' => 'webmaster@example.com', 'Reply-To' => 'webmaster@example.com', 'X-Mailer' => 'PHP/' . phpversion() ); mail($empfaenger, $betreff, $nachricht, $header); ?> Beispiel 5 - Verschicken einer HTML-Email <?php // mehrere Empfaenger $empfaenger = 'max@example.com, moritz@example.com'; // beachte das Komma // Betreff $betreff = 'Geburtstags-Erinnerungen für August'; // Nachricht $nachricht = ' <html> <head> <title>Geburtstags-Erinnerungen für August</title> </head> <body> <p>Hier sind die Geburtstage im August:</p> <table> <tr> <th>Person</th><th>Tag</th><th>Monat</th><th>Jahr</th> </tr> <tr> <td>Max</td><td>3.</td><td>August</td><td>1970</td> </tr> <tr> <td>Moritz</td><td>17.</td><td>August</td><td>1973</td> </tr> </table> </body> </html> '; // für HTML-E-Mails muss der 'Content-type'-Header gesetzt werden $header[] = 'MIME-Version: 1.0'; $header[] = 'Content-type: text/html; charset=iso-8859-1'; // zusaetzliche Header $header[] = 'To: Simone <simone@example.com>, Andreas <andreas@example.com>'; $header[] = 'From: Geburtstags-Erinnerungen <geburtstag@example.com>'; $header[] = 'Cc: geburtstagsarchiv@example.com'; $header[] = 'Bcc: geburtstagscheck@example.com'; // verschicke die E-Mail mail($empfaenger, $betreff, $nachricht, implode("\r\n", $header)); ?> Hinweis: Wenn HTML- oder komplexe E-Mails versendet werden sollen, wird die Verwendung des PEAR-Pakets PEAR::Mail_Mime empfohlen. Beispiel 6 - Logbook mit Email versenden Inhalt des Logbooks: ./txt/logbook.txt ($logbook_text_directory und $logbook_data_name; siehe auch: HTML-Seitenquelltext des PHP-Handbuches) 1610445860 00001 | Sun 13.12.2020 - 11:04:20 | 127.0.0.1 | 35064 | Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:77.0) Gecko/20100101 Firefox/77.0 00002 | Sun 13.12.2020 - 14:40:59 | 127.0.0.1 | 53912 | Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:83.0) Gecko/20100101 Firefox/83.0 [...] <?php // +++ ANFANG KONFIGURATION +++ $logbook_email_send_enable=1; // Logbook und Fehlermeldungen per Email versenden; moegliche Werte: 1 .. aktiviert, 0 .. deaktiviert; 1 (default) $logbook_email_address = "webmaster@domain.de"; // Email-Adresse des Empfaengers $logbook_text_directory = "./txt"; // Name des Verzeichnisses fuer die Textdateien $logbook_data_name = "logbook.txt"; // Dateiname des Logbooks $logbook_email_subject = "Webseite.de - Logbook"; // Email-Betreff $logbook_email_first_line = "Logbook von Webseite.de,"; // Email - 1.Zeile; Name der Webseite $logbook_email_second_line = "hier wieder das aktuelle Logbuch von der Website: Webseite.de."; // Email - 2.Zeile $logbook_email_end_line = "Ciao >>Logbook-Webmaster<<"; // Email - Abspann, letzte Zeile $server_standard_charset = 'ISO-8859-1'; // Textkodierung, Charset des PHP-Servers, siehe: PHP-Funktion -> phpinfo() $client_standard_charset = 'UTF-8'; // Textkodierung, Charset des Clients, Rechner der die Email empfaengt $logbook_file_access=0644; // Zugriffsrechte des Logbooks; moegliche Werte: 0666, 0664, 0644 (default), 0600 // +++ ENDE KONFIGURATION +++ function logbook_send($LogbookSendArray='') { $ReturnCode=9; if(!empty($LogbookSendArray) && is_array($LogbookSendArray)) { $LogbookSendArrayCount = count($LogbookSendArray); if($LogbookSendArrayCount == 12) { $LogbookFilePath = $LogbookSendArray[2] . "/" . $LogbookSendArray[3]; if(!empty($LogbookSendArray[0]) && file_exists($LogbookFilePath)) { $EmailTo = $LogbookSendArray[1]; $EmailSubject = $LogbookSendArray[4]; $EmailBody = $LogbookSendArray[5] . "\r\n"; $EmailBody .= $LogbookSendArray[6] . "\r\n"; $EmailBody .= $LogbookSendArray[7] . "\r\n\r\n"; $EmailBody .= $LogbookSendArray[8]; $LogbookFileArray=@file($LogbookFilePath); $LogbookFileArrayCount=count($LogbookFileArray); for($x=1; $x<$LogbookFileArrayCount; $x++) { $EmailBody .= $LogbookFileArray[$x]; } $EmailBody .= "\r\n\r\n"; $Header = "MIME-Version: 1.0\r\n"; $Header .= "Content-type: text/plain; charset=utf-8\r\n"; // Content-type: text/html; charset=utf-8; oder Content-type: text/plain; charset=iso-8859-1; $Header .= "To: " . $LogbookSendArray[1] . "\r\n"; $Header .= "From: " . $LogbookSendArray[1] . "\r\n"; // $Header .= "From: Webmaster <" . $LogbookSendArray[1] . ">\r\n"; $Header .= "Reply-To: " . $LogbookSendArray[1] . "\r\n"; // $Header .= "Cc: \r\n"; // Kopie an ... // $Header .= "Bcc: \r\n"; // Blind-Copy an ... $Header .= "Date: " . date("r") . "\r\n"; // formatiertes Datum nach Standard - RFC 2822 $Header .= "X-Mailer: PHP/" . phpversion() . "\r\n"; $Header .= "X-Sender-IP: " . $_SERVER['REMOTE_ADDR'] . "\r\n"; $EmailArray = array($EmailTo, $EmailSubject, $EmailBody, $Header); if(!empty($LogbookSendArray[9]) && !empty($LogbookSendArray[10])) { $CharsetServerClientCompare = strcasecmp($LogbookSendArray[9], $LogbookSendArray[10]); if($CharsetServerClientCompare != 0) { if(extension_loaded("iconv")) { $EmailArrayCount = count($EmailArray); for($i=0; $i<$EmailArrayCount; $i++) { $EmailArray[$i] = iconv($LogbookSendArray[9], $LogbookSendArray[10], $EmailArray[$i]); } } } } $SendReturnCode=0; @mail($EmailArray[0], $EmailArray[1], $EmailArray[2], $EmailArray[3]) or $SendReturnCode++; if($SendReturnCode == 0) $ReturnCode=0; } elseif(empty($LogbookSendArray[0]) && file_exists($LogbookFilePath)) { $LogbookNewFilename = date("d-m-Y_H-i-s") . "_" . $LogbookSendArray[3]; $LogbookNewFilePath = $LogbookSendArray[2] . "/" . $LogbookNewFilename; @touch($LogbookNewFilePath); @chmod($LogbookNewFilePath, $LogbookSendArray[11]); $LogbookContentArray = @file($LogbookFilePath); $LogbookContentArrayCount = count($LogbookContentArray); $LogbookNewContent = $LogbookSendArray[8]; for($x=1; $x<$LogbookContentArrayCount; $x++) { $LogbookNewContent .= $LogbookContentArray[$x]; } if(!empty($LogbookSendArray[9]) && !empty($LogbookSendArray[10])) { $CharsetServerClientCompare = strcasecmp($LogbookSendArray[9], $LogbookSendArray[10]); if($CharsetServerClientCompare != 0) { if(extension_loaded("iconv")) { $LogbookNewContent = iconv($LogbookSendArray[9], $LogbookSendArray[10], $LogbookNewContent); } } } if($FileWrite = @fopen($LogbookNewFilePath,'w')) { $SendReturnCode=0; @flock($FileWrite,2) or $SendReturnCode++; @fwrite($FileWrite,$LogbookNewContent) or $SendReturnCode++; @flock($FileWrite,3) or $SendReturnCode++; @fclose($FileWrite) or $SendReturnCode++; if($SendReturnCode == 0) $ReturnCode=0; } } else { $ReturnCode=5; } } else { print '<b>SYSTEM-ARRAY FUNCTION: logbook_send() IS DAMAGED!</b>'; exit; } } return $ReturnCode; } // bei gleichbleibender Feldanzahl (5) der Tabelle, braucht die Funktion nicht geaendert werden $logbook_table_head = " LFD-NR |"; // 9 Zeichen + | $logbook_table_head .= " DATUM - UHRZEIT |"; // 27 Zeichen + | $logbook_table_head .= " IP-NUMMER - IPv4 und IPv6 |"; // 41 Zeichen -> 39 + 2 Leerzeichen + | $logbook_table_head .= " PORT |"; // 7 Zeichen -> 5 + 2 Leerzeichen + | $logbook_table_head .= " INTERNET-BROWSER \r\n"; // 50 Zeichen + \r\n $logbook_table_head .= "------------------------------------------------------------"; // 60 Zeichen $logbook_table_head .= "------------------------------------------------------------"; // 60 Zeichen $logbook_table_head .= "------------------------------------------------------------\r\n"; // 60 Zeichen + \r\n // der Haupttext fuer die Email (Logbook) befindet sich im der Datei ./txt/logbook.txt ($logbook_text_directory und $logbook_data_name) $logbook_send_array = array($logbook_email_send_enable, $logbook_email_address, $logbook_text_directory, $logbook_data_name, $logbook_email_subject, $logbook_email_first_line, $logbook_email_second_line, $logbook_email_end_line, $logbook_table_head, $server_standard_charset, $client_standard_charset, $logbook_file_access); // Function logbook_send() versendet das Logbook $function_send_return_code = logbook_send($logbook_send_array); // Auswertung des Return-Codes ($function_send_return_code) // [...] ?> Hinweis: Bei einem RFC (Request for Comments) handelt es sich um ein nummeriertes Dokument, in dem Protokolle, Konzepte, Methoden und Programme des Internets behandelt, beschrieben und definiert werden. Die Verwaltung der RFCs erfolgt durch die IETF (Internet Engineering Task Force). oben  md5(string $str [, bool $raw_output = FALSE ]) Errechnet den MD5-Hash eines Strings (str). Diese Möglichkeit der Verschlüsselung wird häufig genutzt, um eine eindeutige Session-ID zu generieren. Der Rückgabewert ist ein Hash als 32 Zeichen lange Hexadezimalzahl. Siehe auch: base64_encode() base64_decode() password_hash() Vordefinierte Variablen Anhang: Vergleichs-Operatoren Parameter-Liste str ... Die Zeichenkette. raw_output ... Wurde der optionale Parameter raw_output mit TRUE angegeben, wird der MD5-Wert im Raw Binary Format mit einer Länge von 16 Zeichen zurückgegeben. Beispiel 1 <?php $str = 'apple'; if(md5($str) === '1f3870be274f6c49b3e31a0c6728957f') { echo "Haetten Sie lieber einen gruenen oder einen roten Apfel?"; } ?> Beispiel 2 - Erzeugung einer Benutzer-ID <?php // [...] $user_md5_key_raw = $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'] . date("YD"); echo "Daten des aktuellen Benutzers: " . $user_md5_key_raw . "<br>"; $user_md5_key = md5($user_md5_key_raw); // zeitweilig gueltige User-ID, solange sich nicht das Jahr und der Wochentag aendert // [...] echo "User-ID: " . $user_md5_key; ?> Ausgabe Daten des aktuellen Benutzers: 127.0.0.1Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:85.0) Gecko/20100101 Firefox/85.02021Thu User-ID: 10f791101fc9135d69d77e86bc53daa3 oben  microtime([bool $getAsFloat = FALSE ]) microtime() gibt den aktuellen Unix-Timestamp mit Mikrosekunden zurück. Diese Funktion steht nur auf Systemen zur Verfügung, die den Systemaufruf gettimeofday() unterstützen. Für Leistungsfähigkeitsmessungen wird die Verwendung von hrtime() empfohlen. Siehe auch: time() date() gettimeofday() sleep() usleep() Parameter-Liste getAsFloat ... Wenn auf TRUE gesetzt, gibt microtime() einen float anstatt einem string zurück, welcher die aktuelle Zeit in Sekunden seit Beginn der Unix Epoche angibt (die Nachkommastellen geben die Mikrosekunden an). Beispiel - Zeitmessung einer Skriptausführung <?php $time_start = microtime(true); // Die Skriptverarbeitung fuer einen bestimmten Zeitraum unterbrechen usleep(100); $time_end = microtime(true); $time = $time_end - $time_start; echo "In " . $time . " Sekunden nichts getan.\n"; ?> Ausgabe In 0.00016212463378906 Sekunden nichts getan. oben  mime_content_type(string $filename) Gibt den MIME-Inhaltstyp für eine Datei, wie z.B. text/plain oder application/octet-stream, unter Verwendung von Informationen von der magic.mime-Datei. Im Fehlerfall wird FALSE und eine E_WARNING zurückgegeben. Siehe auch: Image-Funktionen: getimagesize() preg_match() Anhang: Binärdaten in einer MySQLi-Tabelle speichern Beispiel <?php echo mime_content_type('./counter.txt') . "<br>"; echo mime_content_type('./image_2.gif'). "<br>"; echo mime_content_type('./img/CIMG0156.JPG'). "<br>"; echo mime_content_type('./img/counter000261.png'). "<br>"; ?> Ausgabe text/plain image/gif image/jpeg image/png oben  mkdir(string $pathname [, int $mode = 0777 [, bool $recursive = FALSE [, resource $context ]]] Mit mkdir() kann man versuchen, ein Verzeichnis (pathname) zu erstellen. Dabei können Sie ausgehend vom Skript oder dem Dokumenten-Root das Verzeichnis erstellen. Im Erfolgsfall wird true zurückgeliefert, sonst false. Falls Sie im Parameter mode (Zugriffsrecht) einen oktalen Wert übergeben wollen, so denken Sie an die voranzustellende Null (SUID = 0), welche nicht fehlen darf. Bei der Rechtevergabe kann man für den Eigentümer/Owner, Gruppe/Group und den Rest der Welt/Public verschiedene Zugriffsrechte vergeben. Ist das SUID- und SGID-Bit (SUID .. set user id - 4, SGID .. set group id - 2) nicht gesetzt, so steht beim Oktalwert für die Zugriffsrechte immer eine Null (0) am Anfang, ansonsten eine 4 oder 2. Für die Erstellung von PHP-Skripts spielt das SUID- und SGID-Bit keine Rolle, so der Wert Null (0) immer die richte Wahl ist. Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Erzeugt einen Fehler der Stufe E_WARNING, falls das Verzeichnis bereits existiert. Erzeugt einen Fehler der Stufe E_WARNING, wenn die relevanten Zugriffsrechte das Erstellen des Verzeichnisses verhindern. Siehe auch: chmod() is_dir() rmdir() umask() Parameter-Liste pathname ... Der Verzeichnispfad. mode ... Der Modus ist standardmäßig 0777, was den größtmöglichen Zugang umfasst. Für weitere Informationen lesen Sie bitte die Details auf der chmod()-Seite. Hinweis: Der Parameter mode wird unter Windows ignoriert. Beachten Sie, dass Sie den Modus als oktalen Wert angeben sollten, d.h., dass er eine führende Null haben sollte. Der Modus wird auch durch die aktuelle umask geändert, die Sie mit umask() ändern können. recursive ... Erlaubt die Erstellung von im pathname angegebenen verschachtelten Verzeichnissen. context ... context ist ein optionaler Parameter. PHP bietet eine Menge von Kontextoptionen und -parametern, die in Zusammenhang mit allen Dateisystem- und Streamwrappern genutzt werden können. Ein Kontext wird mit stream_context_create() erzeugt. Optionen werden mit stream_context_set_option() gesetzt und Parameter mit stream_context_set_params(). Werte für mode: SUID/SGID = 0 Lesen/Read = r = 4 Schreiben/Write = w = 2 Ausführen/Execute = x =1 Einige Werte für die Zugriffsrechte von Verzeichnisse:
  User Group World Oktal
drwxrwxrwx rwx rwx rwx 0777
drwxr-xr-x rwx r-x r-x 0755
drwx------ rwx --- --- 0700
drwxr-x--- rwx r-x --- 0750
drwxr-xr-- rwx r-x r-- 0754

Beispiel 1
//Erstellt ein Verzeichnis ausgehend von der Lage //des Skriptes
<?php
if(mkdir("php",0700)) echo "Verzeichnis erstellt!";
?>
 
Ausgabe 1
Verzeichnis erstellt!

Beispiel 2
<?php
// Gewünschte Verzeichnisstruktur
$structure = './stufe1/stufe2/stufe3/';

// Zur Erstellung der verschachtelten Struktur muss der $recursive-Parameter 
// von mkdir() angegeben werden

if(!mkdir($structure, 0777, true)) {
    die('Erstellung der Verzeichnisse schlug fehl...');
}
// Erzeugt einen Fehler der Stufe E_WARNING, falls das Verzeichnis bereits existiert.
// Erzeugt einen Fehler der Stufe E_WARNING, wenn die relevanten Zugriffsrechte das Erstellen des Verzeichnisses verhindern. 
// [...]
?>

oben 
mktime([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y")]]]]]])
Mit mktime() kann man sich den UNIX-Timestamp für eine bestimmte Uhrzeit und ein bestimmtes Datum zurückgeben lassen. Die übergebenen Datums-
(Monat, Tag, Jahr) und Zeitangaben (Stunde, Minute, Sekunde) werden als Ortszeit interpretiert. Sie können alle Parameter von rechts nach links weglassen,
die Funktion ersetzt die fehlenden Werte durch die entsprechenden Werte der aktuellen Ortszeit. Hinweis: Die UNIX-Timestamp ist ein Long Integer Wert,
der die Anzahl der Sekunden zwischen der Unix-Epoche (01. Januar 1970 00:00:00 GMT) und dem angegebenen Zeitpunkt enthält. Einzelne Argumente können
von rechts nach links weggelassen werden. Sie werden dann mit den Werten der lokalen Systemzeit bzw. des lokalenSystemdatums ersetzt. Seit PHP 5.1 wirft
mktime() eine E_STRICT-Notice, wenn die Funktion ohne Argumente aufgerufen wird. Verwenden Sie in diesem Fall stattdessen die time()-Funktion.
Siehe auch:
date()
time()
gmdate()

Parameter-Liste
hour ... Die Zahl der Stunden relativ zum Beginn des Tages, der durch month, day und year bestimmt ist. Negative Werte beziehen sich auf die Stunde vor
Mitternacht des jeweiligen Tages. Werte größer als 23 beziehen sich auf die entsprechende Stunde des/der folgenden Tags/Tage.
minute ... Die Zahl der Minuten relativ zum Beginn der hour. Negative Werte beziehen sich auf die Minute in der vorherigen Stunde. Werte größer als 59 beziehen
sich auf die entsprechende Minute der folgenden Stunde(n).
second ... Die Zahl der Sekunden relativ zum Beginn der minute. Negative Werte beziehen sich auf die Sekunde der vorherigen Minute. Werte größer als 59 beziehen
sich auf die entsprechende Minute der folgenden Minute(n).
month ... Die Zahl des Monats relativ zum Ende des vorherigen Jahres. Die Werte 1 bis 12 beziehen sich auf normale Kalendermonate des jeweiligen Jahres. Werte
kleiner als 1 (einschließlich negativer Werte) beziehen sich auf die Monate des vorherigen Jahres in umgekehrter Reihenfolge, so dass 0 Dezember ist, -1
November, usw. Werte größer als 12 beziehen sich auf den entsprechenden Monat des/der folgenden Jahrs/Jahre.
day ... Die Zahl des Tages relativ zum Ende des vorherigen Monats. Die Werte 1 bis 28, 29, 30 oder 31 (in Abhängigkeit vom Monat) beziehen sich auf normale Tage
im aktuellen Monat. Werte kleiner als 1 (einschließlich negativer Werte) beziehen sich auf die Tage im vorherigen Monat, so dass 0 der letzte Tag des vorherigen
Monats ist, -1 der vorletzte, usw. Werte größer als die Anzahl von Tagen im aktuellen Monat beziehen sich auf den entsprechenden Tag in dem/den folgenden Monat(en).
year ... Die Jahreszahl, die zwei- oder vierstellig angegeben werden kann. Werte von 0 bis 69 werden auf 2000-2069 gemappt, Werte von 70 bis 100 auf 1970-2000.
Auf Systemen, auf denen time_t ein 32-Bit Signed Integer Wert ist (das sind die meisten der heutigen Systeme), beginnt der gültige Wertebereich für year bei 1901 und
endet bei 2038. Allerdings begrenzen PHP-Versionen vor 5.1.0 den Bereich auf einigen Systemen (z.B. Windows) auf 1970-2038.

Hinweis: Der frühere Parameter isDst (Sommer- oder Winterzeit) wurde ab der PHP-Version 7.0.0 entfernt.

Beispiel 1
<?php
echo date("M-d-Y", mktime(0,0,0,12,32,2000)) . "<br>";
echo date("M-d-Y", mktime(0,0,0,13,1,2000)) . "<br>";
echo date("M-d-Y", mktime(0,0,0,1,1,2001)) . "<br>";
echo date("M-d-Y", mktime(0,0,0,1,1,01)) . "<br><br>";
echo mktime(8,30,0,5,29,2001) . " - ";
echo date("d. F Y", mktime(0,0,0,5,29,2001));
?>

Ausgabe 1
Jan-01-2001
Jan-01-2001
Jan-01-2001
Jan-01-2001

991117800 - 29. May 2001

Beispiel 2
<?php
// Setzt die zu verwendende Standardzeitzone. Verfügbar seit PHP 5.1
date_default_timezone_set('UTC');

// Gibt aus: July 1, 2000 is on a Saturday
echo "July 1, 2000 is on a " . date("l", mktime(0, 0, 0, 7, 1, 2000)) . "<br>";

// Gibt etwas aus wie: 2006-04-05T01:02:03+00:00
echo date('c', mktime(1, 2, 3, 4, 5, 2006));
?>

Ausgabe 2
July 1, 2000 is on a Saturday
2006-04-05T01:02:03+00:00

oben 
move_uploaded_file(string filename, string destination)
Mit move_uploaded_file() kann man eine mittels HTTP-Post hochgeladene Datei (filename) an ein Ziel (destination) verschieben. Zuerst prüft die Funktion, ob die
Datei filename hochgeladen wurde und somit eine gültige Datei ist. Ist dies der Fall, so wird die Datei an das Ziel destination verschoben. Es ist darauf zu achten,
dass man für filename den temporären Namen der Datei angibt ($_FILES['file']['tmp_name']) und nicht den tatsächlichen Namen der Datei ($_FILES['file']['name']),
da sonst FALSE zurückgegeben wird. Sollte es sich bei der hochgeladenen Datei um keine gültige Datei handeln oder konnte sie nicht verschoben werden,
so wird FALSE zurückgegeben, ansonsten TRUE. Ist filename keine gültige Datei, so wird keine Aktion ausgeführt und move_uploaded_file() gibt FALSE zurück.
Hinweis: Sollte die Zieldatei bereits existieren, so wird sie ohne Nachfrage überschrieben.
Siehe auch:
is_uploaded_file()
Anhang: Binärdaten in einer MySQLi-Tabelle speichern

Beispiel – Datei upload.php
MAX_FILE_SIZE begrenzt die Dateigröße, hier auf etwa 15 MByte (15 * 1024 * 1024). Dies wird aber nicht von allen Browsern berücksichtigt. Das
versteckte Feld MAX_FILE_SIZE muss dem Dateieingabefeld vorangestellt werden und den Wert der maximal akzeptierten Dateigröße in Bytes enthalten.

Hinweis: Berechnung von Speichergrößen
1 KiB (Kilo-Byte) = 1024 Byte
1 MiB (Mega-Byte) = 1024 * 1024 Byte
1 GiB (Giga-Byte) = 1024 * 1024 * 1024 Byte
1 TiB (Tera-Byte) = 1024 * 1024 * 1024 * 1024 Byte
1 PiB (Peta-Byte) = 1024 * 1024 * 1024 * 1024 * 1024 Byte
1 EiB (Exa-Byte) = 1024 * 1024 * 1024 * 1024 * 1024 * 1024 Byte

1 kB (Kilo-Byte) = 1000 Byte
1 MB (Mega-Byte) = 1000 * 1000 Byte
1 GB (Giga-Byte) = 1000 * 1000 * 1000 Byte
[...]

<?php
if(!empty($_POST['upload']) && !empty($_FILES['file']['name'])) {
   if(move_uploaded_file($_FILES['file']['tmp_name'], "tmp/test.zip")) {
      echo "<b>Upload beendet!</b><br>";
   }
}
else
{
?>
<html>
<head></head>
<body>
<form name="form1" enctype="multipart/form-data" method="post" action="upload.php">
<p>
<input type="hidden" name="MAX_FILE_SIZE" value="15728640">
<input type="file" name="file"><br>
<input type="submit" name="upload" value="Upload beginnen">
</p>
</form>
</body>
</html>
<?php
}
?>

Ausgabe
Upload beendet!


oben  MySQLi-Funktionen Die MySQL-Erweiterung ist seit PHP 5.5.0 als veraltet markiert und wird seit PHP 7.2.16 nicht mehr unterstützt. Damit wurden auch alle MySQL-Funktionen entfernt. Stattdessen ist die Erweiterung MySQLi (MySQL improved, improved ... verbessert, aufgebessert) zu nutzen. Die MySQLi-Bibliothek verfügt über ähnliche Funktionen wie die MySQL-Bibliothek. Sämtliche MySQLi-Funktionen tragen statt des Vorsatzes mysql_ den Vorsatz mysqli_. Mit der MySQLi- Erweiterung wird eine höhere Ausführungsgeschwindigkeit, Transaktionssicherheit und das Rückgängigmachen von Transaktionen (Rollback) erreicht. Hinweis: Für die Verwendung von Transaktionen und Rollbacks ist der Tabellentyp InnoDB unbedingt erforderlich. PHP-Server XAMPP Verwendet man während der Entwicklung von PHP-Code für den Zugriff auf eine SQL-Datenbank den PHP-Server XAMPP von www.apachefriends.org, so sollte man einiges beachten. 1. Aufruf von XAMPP in einem Terminal: sudo /opt/lampp/lampp start 2. Aufruf des Verwaltungstools phpMyAdmin im Browser: localhost -> phpMyAdmin 3. Erstellung einer MySQL-Datenbank: im Navigationsbereich (linke Seite) auf Neu klicken -> Datenbankname eingeben -> z.B. DB2023 -> Button: Anlegen 4. Erstellung der ersten Tabelle: Tabellennamen und Anzahl der Tabellenspalten eingeben -> Button: Anlegen und den weiteren Anweisungen folgen 5. Benutzer root die Rechte für die Datenbank übergeben: Tab Rechte -> root localhost -> Rechte ändern anklicken -> Button: OK -> Tab Datenbank anklicken -> neu erstellte Dantenbank im Eingabefeld eintragen -> Button: OK -> Datenbankspezifische Rechte -> Checkbox -> Alle auswählen -> Button: OK Tab Cange Password -> Radio-Button kein Passwort -> Button: OK 6. Kontrolle der Änderungen: im Navigationsbereich (linke Seite) auf die neue Datenbank klicken -> Tab Rechte -> root localhost -> Rechte ändern anklicken -> Tab Datenbank -> in der Tabelle Datenbankspezifische Rechte sollte jetzt die neue Datenbank aufgelistet sein 7. Neustart des PHP-Servers XAMPP im Terminal: sudo /opt/lampp/lampp stop -> sudo /opt/lampp/lampp start 8. Spätestens nach einem Neustart sollte die neue Datenbank für die Bearbeitung mittels PHP-Code zur Verfügung stehen: Host: localhost Dantenbank: DB2023 Benutzer: root Passwort (kein Passwort): MySQLi mit den Tabellentyp InnoDB sperrt selbstständig eine Zeile (bei UPDATE) und das Ende der Tabelle (bei INSERT), wenn Schreibzugriffe ausgeführt werden. Dies blockiert andere Verbindungen (weitere Schreibzugriffe) aber nur, wenn sie ebenfalls genau diese Zeile benötigen. Was sind Transaktionen? Eine Transaktion kann man sich wie eine Art von Container vorstellen, der mehrere SQL-Befehle enthält. Der Container wird als Einheit an die Datenbank übergeben und die darin enthaltenen SQL-Befehle werden als Einheit von der Datenbank ausgeführt. Das Entscheidende aber bei einer Transaktion ist, dass die SQL-Befehle innerhalb dieses Containers entweder erfolgreich von der Datenbank ausgeführt werden oder sie werden im Falle eines Fehlers nicht ausgeführt. Es werden auch keine Teile der SQL-Befehle ausgeführt. Entweder werden alle SQL-Befehle des Containers ausgeführt oder es werden keine ausgeführt. Wie führt man Transaktionen aus? Bevor der erste SQL-Befehl eines Containers notiert wird, muss die Funktion mysqli_autocommit() aufgerufen werden: mysqli_autocommit($db_name, FALSE); Hierüber wird das so genannte Autocommit abgeschaltet, in dem der zweite Übergabeparameter auf FALSE gesetzt wird. Der Default-Wert von Autocommit ist TRUE und besagt, dass ein SQL-Befehl sofort abgesetzt, die Änderung in der Datenbank sowie die physische Speicherung in Dateien auf der Festplatte durchgeführt werden. Wird dieser abgeschaltet, werden die Änderungen nicht sofort durchgeführt. Dies erfolgt erst, wenn alle SQL-Befehle eingelesen und an die Datenbank gemeinsam übergeben wurden. Die Übergabe erfolgt durch die Funktion mysqli_commit(): mysqli_commit($db_name); Diese Funktion wird kurz vor dem Ende des PHP-Codes vor der Funktion mysqli_close($db_connect) notiert. Was ist ein Rollback? Mit Rollback (Zurückrollen) bezeichnet man das Rückgängigmachen einer Transaktion oder einer einzelnen Datenbank-Operation. Dadurch wird der Zustand der Datenbank-Tabellen vor der Transaktion (z.B. nach einem fehlerbehafteten Update) wieder hergestellt. Dies wird über die Funktion mysqli_rollback() erreicht: mysqli_rollback($db_name); Das Rollback macht natürlich nur Sinn, wenn ein definiertes Ereignis eingetreten ist (z.B. Prüfung über eine if-Abfrage). Tabellentyp - MyISAM oder InnoDB? Für kleine Webseiten oder Webseiten an denen Webseiten-Benutzer keine oder nur unbedeutende Änderungen vornehmen, ist der Tabellentyp MyISAM völlig ausreichend. Der Vorgabewert (Default-Wert) des Tabellentyps, muss bei der Erstellung einer Tabelle mit der Funktion create_table() nicht mit angegeben werden. Die aktuelle Storage Engine (Default-Wert für den Tabellentyp) kann über den SQL-Befehl SHOW VARIABLES ermittelt werden. SHOW VARIABLES LIKE '%storage_engine%'; Für die Verwendung von Transaktionen und Rollbacks ist der Tabellentyp InnoDB unbedingt erforderlich. Bei der Erstellung der Tabelle ist die Angabe des Tabellentyps InnoDB nach der Angabe der Felddefinitionen einzutragen, es sei denn der Tabellentyp InnoDB ist der Default-Wert. In diesem Fall kann die Angabe des Tabellentyps (ENGINE=InnoDB) entfallen. CREATE TABLE `capital_city` ( `id` SMALLINT(6) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `date` DATE, `country` VARCHAR(255), `capital` VARCHAR(255), `capital_info` TEXT, `population` INT(10) UNSIGNED NOT NULL, `status` TINYINT(3) UNSIGNED NOT NULL ) ENGINE=InnoDB, COMMENT = 'Kommentar zur Tabelle'; Über den SQL-Befehl SHOW TABLE STATUS kann man sich den aktuellen Tabellentyp (MyISAM, InnoDB) ausgeben lassen. Tabellentyp aller Tabellen einer Dantenbank ausgeben: SHOW TABLE STATUS FROM database_name; Tabellentyp einer vollständig benannten Tabelle (Angabe eines Teil des Tabellennamens ist hier möglich - LIKE) einer Dantenbank ausgeben: SHOW TABLE STATUS FROM database_name LIKE '%capital_city_europe%'; Tabellentyp einer oder mehrerer Tabellen (Angabe eines Teil des Tabellennamens) der aktuellen Dantenbank ausgeben: SHOW TABLE STATUS LIKE '%capital_city%'; Tabellen vom Typ MyISAM einer bereits vorhandenen Datenbank können in den Tabellentyp InnoDB konvertiert werden. Dies erfolgt über den SQL-Befehl ALTER TABLE: ALTER TABLE chat_sessions_valid ENGINE=InnoDB; ALTER TABLE chat_texte ENGINE=InnoDB; ALTER TABLE chat_user_new ENGINE=InnoDB; ALTER TABLE chat_users_registered ENGINE=InnoDB; Hinweis: Die Konvertierung des Tabellentyps InnoDB in den Tabellentyp MyISAM ist nicht möglich. Verbindung zu einer MySQLi-Datenbank Die Verbindung zu einer Datenbank erfolgt über die Funktion mysqli_connect() und die Verbindung wird über mysqli_close() wieder beendet. Konkrete Datenbankabfragen erfolgen über die Funktion mysqli_query(). Bevor auf eine Datenbank zugegriffen wird, sollte eine Prüfung über die Funktion extension_loaded("mysqli") erfolgen, ob die Datenbank überhaupt zur Verfügung steht. Nachfolgend wird weitestgehend nur auf die prozedurale Schreibweise (objektorientierte Schreibweise → Internet-Suchmaschine → key-words → php.net oder selfphp) eingegangen. SQL-Funktionen für die Erstellung, Löschung und Änderung von Datenbanken werden an dieser Stelle nicht behandelt. Für die Erstellung von Datenbanken können spezialisierte Programme wie PHPMyAdmin genutzt werden. Außerdem stellen Webhoster den Benutzern bereits erstellte und vorkonfigurierte Datenbanken zur Verfügung, die nicht mehr geändert und gelöscht werden können. Hinweis: Die MySQL-Erweiterung (Modul) wird noch von vielen Anbieter weiterhin genutzt. Für den Fall das beide Module (MySQL und MySQLi) geladen wurden, können die Einstellungen des Webhosters die Benutzung eines SQL-Moduls trotzdem verbieten. Ermittlung der aktuell unterstützten MySQLi-Feldtypen der SQL-Datenbank Siehe auch: get_defined_constants() foreach() Beispiel <?php // [...] $types_array=array(); $constants = get_defined_constants(true); foreach($constants['mysqli'] as $c => $n) if(preg_match('/^MYSQLI_TYPE_(.*)/', $c, $m)) $types_array[$n] = $m[1]; $types_array_count = count($types_array); // [...] print "<pre>"; print_r ($types_array); print "</pre>"; ?> Ausgabe Array ( [0] => DECIMAL [1] => CHAR [2] => SHORT [3] => LONG [4] => FLOAT [5] => DOUBLE [6] => NULL [7] => TIMESTAMP [8] => LONGLONG [9] => INT24 [10] => DATE [11] => TIME [12] => DATETIME [13] => YEAR [14] => NEWDATE [247] => INTERVAL [248] => SET [249] => TINY_BLOB [250] => MEDIUM_BLOB [251] => LONG_BLOB [252] => BLOB [253] => VAR_STRING [254] => STRING [255] => GEOMETRY [245] => JSON [246] => NEWDECIMAL [16] => BIT ) oben  mysqli_connect([ string $host = ini_get("mysqli.default_host") [, string $username = ini_get("mysqli.default_user") [, string $passwd = ini_get("mysqli.default_pw") [, string $dbname = "" [, int $port = ini_get("mysqli.default_port") [, string $socket = ini_get("mysqli.default_socket") ]]]]]] ) vereinfachte Schreibweise: mysqli_connect(string hostname, string Benutzername, string Kennwort, string Datenbank) Mit mysqli_connect() öffnet man eine Verbindung zu einer MySQLi-Datenbank. Im Erfolgsfall gibt diese Funktion eine Verbindungskennung, sonst false zurück. Falls keine Verbindung erstellt werden kann, so können Sie eine eigene Fehlermeldung zum Browser senden und danach das Skript abbrechen lassen. Beispiel 1 - vereinfachter Zugang <?php $db_connect=mysqli_connect('localhost', 'my_user', 'my_password', 'my_db') or die("Verbindungsaufbau zur SQL-Datenbank fehlgeschlagen: Fehlerstelle 1 script_123.php"); [...] ?> Beispiel 2 <?php $link = mysqli_connect("127.0.0.1", "nutzer", "passwort", "datenbank"); if(!$link) { echo "Fehler: konnte nicht mit MySQL verbinden." . PHP_EOL; // PHP_EOL … Zeilenumbruch echo "Debug-Fehlernummer: " . mysqli_connect_errno() . PHP_EOL; echo "Debug-Fehlermeldung: " . mysqli_connect_error() . PHP_EOL; exit; } echo "Erfolg: es wurde ordnungsgemäß mit MySQL verbunden! Die Datenbank \"datenbank\" ist toll." . PHP_EOL; echo "Host-Informationen: " . mysqli_get_host_info($link) . PHP_EOL; mysqli_close($link); ?> Ausgabe 2 Erfolg: es wurde ordnungsgemäß mit MySQL verbunden! Die Datenbank "datenbank" ist toll. Host-Informationen: localhost via TCP/IP Beispiel 3 - verfügbare Tabellen einer Datenbank ermitteln <?php $host_name='host.domain.de'; // lokaler Server: $host_name='localhost'; $db_name='DB12345'; $db_user_name='U12345'; $db_password='secret123'; $info_not_tables_found = "Hinweis: Die Suchabfrage konnte keine Tabellen finden!"; $sql_messages=''; // siehe: phpinfo()) if(extension_loaded('mysqli') && (!empty(@ini_get('mysqli.allow_local_infile')) || !empty(@ini_get('mysqli.allow_persistent')))) { if($db_connect = @mysqli_connect($host_name, $db_user_name, $db_password, $db_name)) { $sql_db_tables_array = array_column(@mysqli_fetch_all($db_connect->query('SHOW TABLES')),0); $sql_db_tables_array_count = count($sql_db_tables_array); if(!empty($sql_db_tables_array_count)) { $content_table_name = "<table cellpadding=\"3\" cellspacing=\"3\" border=\"1\" align=\"center\">\n"; $content_table_name .= "<tr>\n"; $content_table_name .= "<td style=\"text-align:center;\"><b>Lfd.-Nr.</b></td>\n"; $content_table_name .= "<td style=\"text-align:center;\"><b>Tabellenname</b></td>\n"; $content_table_name .= "<td style=\"text-align:center;\"><b>Feldanzahl</b></td>\n"; $content_table_name .= "<td style=\"text-align:center;\"><b>Anzahl der Datens&auml;tze</b></td>\n"; $content_table_name .= "</tr>\n"; for($x=0;$x<$sql_db_tables_array_count;$x++){ $lfd_nr = $x + 1; if($lfd_nr < 10) $lfd_nr = "0" . $lfd_nr; $current_table_field_count='no value'; $current_table_rows_count='no value'; $sql_command = "SELECT * FROM " . $sql_db_tables_array[$x]; if($current_result = @mysqli_query($db_connect, $sql_command)) { $current_table_field_count = @mysqli_num_fields($current_result); $current_table_rows_count = @mysqli_num_rows($current_result); @mysqli_free_result($current_result); } $content_table_name .= "<tr>\n"; $content_table_name .= "<td>" . $lfd_nr . "</td>\n"; $content_table_name .= "<td>" . $sql_db_tables_array[$x] . "</td>\n"; $content_table_name .= "<td>" . $current_table_field_count . "</td>\n"; $content_table_name .= "<td>" . $current_table_rows_count . "</td>\n"; $content_table_name .= "</tr>\n"; } $content_table_name .= "</table>\n"; @mysqli_close($db_connect) or die("Das Schlie&szlig;en der Verbindung zur SQL-Datenbank - " . $db_name . " - ist fehlgeschlagen!!"); } else { $sql_messages = $info_not_tables_found; } } else { $sql_messages = "Hinweis: Die Verbindung zur Datenbank - " . $db_name . " - konnte nicht hergestellt werden!!"; } } else { $sql_messages = "Hinweis: Die MySQLi-Bibliothek (MySQLi-Extension) ist nicht verf&uuml;gbar oder der Zugriff auf die MySQLi-Datenbank wurde deaktiviert!!"; } // [...] if(isset($content_table_name)) { print $content_table_name; } // [...] print $sql_messages; // [...] ?> oben  mysqli_query(mysqli_query (mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ]) Mit mysqli_query() sendet man eine SQL-Anfrage an einen Datenbankserver. Die Funktion mysqli_query() liefert im Erfolgsfall true, sonst false zurück. Siehe auch: mysqli_connect() mysqli_close() mysqli_free_result() Beispiel 1 <?php $link = mysqli_connect("localhost", "my_user", "my_password", "db_world"); /* check connection */ if(mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } /* Select queries return a resultset */ if($result = mysqli_query($link, "SELECT Name FROM City LIMIT 10")) { printf("Select returned %d rows.\n", mysqli_num_rows($result)); /* free result set */ mysqli_free_result($result); } mysqli_close($link); ?> Beispiel 2 <?php $host_name='host.domain.de'; // lokaler Server: $host_name='localhost'; $db_name='DB12345'; $db_user_name='U12345'; $db_password='secret123'; $db_connect = @mysqli_connect($host_name, $db_user_name, $db_password, $db_name); $sql_command = "SELECT * FROM capital_city WHERE id>2 ORDER BY date"; $sql_result_array=array(); if($current_result = @mysqli_query($db_connect, $sql_command) { $current_result_field_count = @mysqli_num_fields($current_result); while($data_record_row = @mysqli_fetch_row($current_result)) { $sql_result_row_array=array(); for($k=0;$k<$current_result_field_count;$k++){ array_push($sql_result_row_array, $data_record_row[$k]); } array_push($sql_result_array, $sql_result_row_array); unset($sql_result_row_array); } } else { print "<pre>" print "Hinweis: Die SQL-Anfrage - " . $sql_command . " - konnte nicht ausgef&uuml;hrt werden!!"; print "</pre>" } mysqli_close($db_connect); print "<pre>" print_r($sql_result_array); print "</pre>" ?> Beispiele für einige SQL-Kommandos innerhalb von MySQLi-Anfragen (mysqli_query()): CREATE TABLE `capital_city` ( `id` SMALLINT(6) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `date` DATE, `country` VARCHAR(255), `capital` VARCHAR(255), `capital_info` TEXT, `population` INT(10) UNSIGNED NOT NULL, `status` TINYINT(3) UNSIGNED NOT NULL ) COMMENT = 'Kommentar zur Tabelle' Hinweis: NOT NULL: Mit NOT NULL wird festgelegt, dass ein Wert (das kann auch ein leerer Wert sein) eingetragen werden muss. NULL ist nicht mit der Zahl 0 zu verwechseln. NULL bedeutet einfach kein Wert. Wenn bei INSERT kein Wert für dieses Feld angegeben wurde, wird der Standardwert genommen. AUTO_INCREMENT: Wenn ein Zahlenfeld mit dem Schlüsselwort AUTO_INCREMENT angelegt wurde und kein Wert für dieses Feld festgelegt wurde, wird der höchste Wert +1 genommen. AUTO_INCREMENT kann nur einmal pro Tabelle in einem Primärschlüsselfeld verwendet werden. PRIMARY KEY: Mit PRIMARY KEY wird der Primärschlüssel festgelegt. Bei zusammengesetzten Primärschlüsseln sind alle Felder, die Teil des Schlüssels sind, anzugeben. Primärschlüssel müssen eindeutig sein und es muss NOT NULL angegeben werden. TINYINT (-128 .. 127), TINYINT UNSIGNED (0 .. 255, UNSIGNED .. ohne Vorzeichen), INT (-2.147.483.648 .. 2.147.483.647), INT UNSIGNED (0 .. 4.294.967.295), VARCHAR (Zeichenkette: 1 .. 255 Stellen, Leerstellen am Ende werden gelöscht), TEXT (Text mit einer max. Länge von 65535 Zeichen), TIME (Format: HH:MM:SS, HHMMSS, HHMM oder HH), DATE (Format: YYYY-MM-DD, wobei der Bindestrich - jedes nicht numerische Zeichen sein kann). INSERT INTO capital_city (date, country, capital, capital_info, population, status) VALUES (NOW(), 'Frankreich', 'Paris', 'hier steht Text', 10000000, 1) INSERT INTO capital_city (date, country, capital, capital_info, population, status) VALUES (NOW(), 'Spanien', 'Madrid', 'hier steht Text', 3400000, 1) INSERT INTO capital_city (date, country, capital, capital_info, population, status) VALUES (NOW(), 'Chile', 'Santiago de Chile', 'hier steht Text', 4000000, 1) INSERT INTO capital_city (date, country, capital, capital_info, population, status) VALUES (NOW(), 'Brasilien', 'Brasilia', 'hier steht Text', 1000000, 1) INSERT INTO capital_city (date, country, capital, capital_info, population, status) VALUES (NOW(), 'Algerien', 'Algier', 'hier steht Text', 700000, 1) INSERT INTO capital_city (date, country, capital, capital_info, population, status) VALUES (NOW(), 'Kanada', 'Ottawa', 'hier steht Text', 2500000, 1) INSERT INTO capital_city (date, capital, status) VALUES ('2020-10-05', 'Rom', 1) UPDATE capital_city SET country='Italien', capital_info='hier steht der eingefügte Text', population=2900000 WHERE id=7 SELECT * FROM capital_city SELECT * FROM capital_city WHERE id>2 ORDER BY date SELECT * FROM capital_city ORDER BY id LIMIT 10 SELECT * FROM capital_city ORDER BY id LIMIT 3,10 SELECT * FROM capital_city WHERE country LIKE '%Bra%' ALTER TABLE capital_city ADD embassy VARCHAR(255) NOT NULL AFTER population ALTER TABLE capital_city CHANGE embassy embassy_address VARCHAR(255) NOT NULL ALTER TABLE capital_city DROP embassy_address ALTER TABLE capital_city RENAME capital_city_europe ALTER TABLE capital_city_europe CHANGE country country VARCHAR(128) NOT NULL ALTER TABLE capital_city_europe CHANGE capital capital VARCHAR(128) NOT NULL SHOW COLUMNS FROM capital_city_europe DELETE FROM capital_city_europe WHERE id=3 DELETE FROM capital_city_europe WHERE id BETWEEN 4 AND 6 DELETE FROM capital_city_europe WHERE id>50 DELETE FROM capital_city_europe WHERE country='Chile' OR country='Brasilien' OR country='Algerien' OR country='Kanada' DROP TABLE capital_city_europe SHOW TABLES oben  mysqli_connect_errno() Für den Fall, dass die Verbindung zur Datenbank nicht hergestellt werden kann, kommen die Funktionen mysqli_connect_errno() und mysqli_connect_error() zum Einsatz. Diese Funktionen können nur nach den Aufruf der Funktion mysqli_connect() verwendet werden. Die Funktion mysqli_connect_errno() gibt eine Fehlernummer an, währende die Funktion mysqli_connect_error() eine konkrete Fehlerbeschreibung ausgibt. Siehe auch: mysqli_connect() mysqli_connect_error() Beispiel 1 <?php $link = @mysqli_connect('localhost', 'fake_user', 'my_password', 'my_db'); if(!$link) { die('Connect Error: ' . mysqli_connect_errno()); } ?> Ausgabe 1 Connect Error: 1045 Beispiel 2 <?php $link = mysqli_connect("localhost", "my_user", "my_password", "db_world"); /* check connection */ if(mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } /* Select queries return a resultset */ if($result = mysqli_query($link, "SELECT Name FROM City LIMIT 10")) { printf("Select returned %d rows.\n", mysqli_num_rows($result)); /* free result set */ mysqli_free_result($result); } mysqli_close($link); ?> oben  mysqli_connect_error() Für den Fall, dass die Verbindung zur Datenbank nicht hergestellt werden kann, kommen die Funktionen mysqli_connect_errno() und mysqli_connect_error() zum Einsatz. Diese Funktionen können nur nach den Aufruf der Funktion mysqli_connect() verwendet werden. Die Funktion mysqli_connect_errno() gibt eine Fehlernummer an, währende die Funktion mysqli_connect_error() eine konkrete Fehlerbeschreibung ausgibt. Siehe auch: mysqli_connect() mysqli_connect_errno() Beispiel 1 <?php $link = @mysqli_connect('localhost', 'fake_user', 'my_password', 'my_db'); if(!$link) { die('Connect Error: ' . mysqli_connect_error()); } ?> Ausgabe 1 Connect Error: Access denied for user 'fake_user'@'localhost' (using password: YES) Beispiel 2 <?php $link = mysqli_connect("localhost", "my_user", "my_password", "db_world"); /* check connection */ if(mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } /* Select queries return a resultset */ if($result = mysqli_query($link, "SELECT Name FROM City LIMIT 10")) { printf("Select returned %d rows.\n", mysqli_num_rows($result)); /* free result set */ mysqli_free_result($result); } mysqli_close($link); ?> oben  mysqli_free_result(Ergebnisobjekt $result) Mit mysqli_free_result() kann man anhand eines zurückgegebenes Ergebnisobjekt (z.B. von mysqli_query) den belegten Speicher wieder freigeben. Diese Funktion ist sinnvoll, um die Ressourcen wieder freizugeben. Nach Beendigung des Skripts wird der Speicher automatisch wieder freigegeben. Beachten Sie, dass nach dieser Funktion nicht mehr auf das Ergebnis Ihrer Anfrage zurückgegriffen werden kann, da dieses entfernt wurde. Es wird kein Wert zurückgegeben. Siehe auch: mysqli_query() mysqli_close() Beispiel <?php $link = mysqli_connect("localhost", "my_user", "my_password", "db_world"); /* check connection */ if(mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } /* Select queries return a resultset */ if($result = mysqli_query($link, "SELECT Name FROM City LIMIT 10")) { printf("Select returned %d rows.\n", mysqli_num_rows($result)); /* free result set */ mysqli_free_result($result); } mysqli_close($link); ?> oben  mysqli_close([int Verbindungs-Kennung]) Mit mysqli_close() schließt man eine zuvor geöffnete Datenbankverbindung anhand der Verbindungs-Kennung. Im Erfolgsfall gibt diese Funktion true, sonst false zurück. Offene nicht-persistente MySQL-Verbindungen und Ergebnismengen werden bei der Beendigung der PHP-Skript-Ausführung automatisch beendet. Obwohl das explizite Schließen von offenen Verbindungen und das Freigeben von Ergebnismengen optional ist, wird es dennoch empfohlen. Dadurch werden unmittelbar Ressourcen an PHP und MySQL zurückgeben, was die Performance verbessern kann. Siehe auch: mysqli_connect() mysqli_free_result() mysqli_connect_errno() mysqli_connect_error() Beispiel <?php $link = mysqli_connect("localhost", "my_user", "my_password", "db_world"); /* check connection */ if(mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } /* Select queries return a resultset */ if($result = mysqli_query($link, "SELECT Name FROM City LIMIT 10")) { printf("Select returned %d rows.\n", mysqli_num_rows($result)); /* free result set */ mysqli_free_result($result); } mysqli_close($link); ?> oben  mysqli_select_db(mysqli $link , string $dbname) Mit mysqli_select_db() wählt man eine Datenbank aus. Im Erfolgsfall gibt diese Funktion true, sonst false zurück. Als Parameter wird die Verbindungskennung (mysqli $link) und der Datenbankname ($dbname) gefordert. Diese Funktion kann nur nach den Aufruf der Funktion mysqli_connect() verwendet werden. Siehe auch: mysqli_connect() Parameter-Liste link ... Ein von mysqli_connect() zurückgegebenes Verbindungsobjekt. dbname ... Name der Datenbank Beispiel <?php $link = mysqli_connect("localhost", "my_user", "my_password", "test"); /* check connection */ if(mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } /* return name of current default database */ if($result = mysqli_query($link, "SELECT DATABASE()")) { $row = mysqli_fetch_row($result); printf("Default database is %s.\n", $row[0]); mysqli_free_result($result); } /* change db to world db */ mysqli_select_db($link, "world"); /* return name of current default database */ if($result = mysqli_query($link, "SELECT DATABASE()")) { $row = mysqli_fetch_row($result); printf("Default database is %s.\n", $row[0]); mysqli_free_result($result); } mysqli_close($link); ?> Ausgabe Default database is test. Default database is world. oben  mysqli_real_escape_string(mysqli $link , string $escapestr) Mit mysqli_real_escape_string() kann man einen String (string $escapestr) für die sichere Benutzung in einer SQL-Anfrage maskieren. Folgende Zeichen werden maskiert: NUL (ASCII 0), \n, \r, \, ', " und [Strg] + [Z]. Siehe auch: addslashes() stripslashes() Beispiel <?php $link = mysqli_connect("localhost", "my_user", "my_password", "world"); /* check connection */ if(mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City"); $city = "'s Hertogenbosch"; /* this query will fail, cause we didn't escape $city */ if(!mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) { printf("Error: %s\n", mysqli_sqlstate($link)); } $city = mysqli_real_escape_string($link, $city); /* this query with escaped $city will work */ if(mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) { printf("%d Row inserted.\n", mysqli_affected_rows($link)); } mysqli_close($link); ?> Ausgabe Error: 42000 1 Row inserted. oben  mysqli_num_rows(mysqli_result $result) Mit mysqli_num_rows() kann man sich anhand einer Ergebnis-Kennung (mysqli_result $result) die Anzahl der Datensätze eines Ergebnisses zurückgeben lassen. Hinweis: Ist die Anzahl der Datensätze größer als der Wert von PHP_INT_MAX, so wird die Anzahl der Datensätze als String zurückgegeben. Siehe auch: mysqli_num_fields() mysqli_query() Beispiel <?php $link = mysqli_connect("localhost", "my_user", "my_password", "world"); /* check connection */ if(mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } if($result = mysqli_query($link, "SELECT Code, Name FROM Country ORDER BY Name")) { /* determine number of rows result set */ $row_cnt = mysqli_num_rows($result); printf("Result set has %d rows.\n", $row_cnt); /* close result set */ mysqli_free_result($result); } /* close connection */ mysqli_close($link); ?> Ausgabe Result set has 239 rows. oben  mysqli_num_fields(mysqli_result $result) Mit mysql_num_fields() kann man sich anhand einer Ergebnis-Kennung (mysqli_result $result) die Anzahl der Felder eines Ergebnisses zurückgeben lassen. Siehe auch: mysqli_num_rows() mysqli_query() Beispiel <?php $link = mysqli_connect("localhost", "my_user", "my_password", "world"); /* check connection */ if(mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } if($result = mysqli_query($link, "SELECT * FROM City ORDER BY ID LIMIT 1")) { /* determine number of fields in result set */ $field_cnt = mysqli_num_fields($result); printf("Result set has %d fields.\n", $field_cnt); /* close result set */ mysqli_free_result($result); } /* close connection */ mysqli_close($link); ?> Ausgabe Result set has 5 fields. oben  mysqli_fetch_row(mysqli_result $result) Mit mysqli_fetch_row() kann man sich anhand einer Ergebnis-Kennung (mysqli_result $result) einen Datensatz in Form eines numerisch indizierten Arrays übergeben lassen. Im Erfolgsfall liefert diese Funktion den aktuellen Datensatz, sonst wird false zurückgegeben. Hinweis: Diese Funktion setzt NULL-Felder auf den PHP Wert-NULL. Beispiel <?php $link = mysqli_connect("localhost", "my_user", "my_password", "world"); /* check connection */ if(mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $query = "SELECT Name, CountryCode FROM City ORDER by ID DESC LIMIT 50,5"; if($result = mysqli_query($link, $query)) { /* fetch associative array */ while ($row = mysqli_fetch_row($result)) { printf ("%s (%s)\n", $row[0], $row[1]); } /* free result set */ mysqli_free_result($result); } /* close connection */ mysqli_close($link); ?> Ausgabe Pueblo (USA) Arvada (USA) Cape Coral (USA) Green Bay (USA) Santa Clara (USA) oben  mysqli_fetch_all(mysqli_result $result [, int $resulttype = MYSQLI_NUM ]) Mit mysqli_fetch_all() kann man sich anhand einer Ergebnis-Kennung (mysqli_result $result) einen Datensatz in Form eines numerisch indizierten Arrays, eines assoziatives Arrays oder sich beide Formen des Arrays übergeben lassen. Im Erfolgsfall liefert diese Funktion den aktuellen Datensatz, sonst wird false zurückgegeben. Hinweis: Diese Funktion setzt NULL-Felder auf den PHP Wert-NULL. result ... Ein von mysqli_query() zurückgegebenes Ergebnisobjekt. resulttype MYSQLI_ASSOC ... Ergebnisrückgabe als assoziatives Array MYSQLI_NUM ... Ergebnisrückgabe als numerisch indiziertes Array (default) MYSQLI_BOTH ... Ergebnisrückgabe in beiden Formen des Arrays (numerisch indiziertes Array und assoziatives Array) Beispiel - Tabellen einer Datenbank auflisten <?php if(extension_loaded('mysqli') && (!empty(@ini_get('mysqli.allow_local_infile')) || !empty(@ini_get('mysqli.allow_persistent')))) { if($db_connect = @mysqli_connect($host_name, $db_user_name, $db_password, $db_name)) { $sql_db_tables_array = array_column(@mysqli_fetch_all($db_connect->query('SHOW TABLES')),0); $sql_db_tables_array_count = count($sql_db_tables_array); [...] // siehe: phpinfo() } // [...] } ?> oben  mysqli_fetch_field(mysqli_result $result) Mit mysqli_fetch_field() kann man sich anhand einer Ergebnis-Kennung (mysqli_result $result) ein Objekt mit Feldinformationen (Feldname, Feldtyp, Feldlänge, ...) aus einem Anfrageergebnis zurückgeben lassen. Die Funktion mysqli_fetch_field() ersetzt die MySQL-Funktionen mysql_field_name(), mysql_field_type() und mysql_field_len(). Die Eigenschaften des Objekts: name ... Feldname innerhalb der Tabelle orgname ... Originalname des Feldes, falls ein Alias festgelegt wurde table ... Name der Tabelle, zu der das Feld gehört orgtable ... Originalname der Tabelle, falls ein Alias festgelegt wurde def ... reserviert für default-Werte, aktuell immer "" db ... Dantenbank catalog ... Katalogname, immer "def" max_length ... max. Länge des Feldes length ... Länge des Feldes type ... der Feld-Typ charsetnr ... Zeichensatzcode des Feldes flags ... bit-flag des Feldes als Zahl decimals ... Dezimalstellen von integer-Felder Beispiel 1 <?php $link = mysqli_connect("localhost", "my_user", "my_password", "world"); /* check connection */ if(mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $query = "SELECT Name, SurfaceArea from Country ORDER BY Code LIMIT 5"; if($result = mysqli_query($link, $query)) { /* Get field information for all fields */ while ($finfo = mysqli_fetch_field($result)) { printf("Name: %s\n", $finfo->name); printf("Table: %s\n", $finfo->table); printf("max. Len: %d\n", $finfo->max_length); printf("Flags: %d\n", $finfo->flags); printf("Type: %d\n\n", $finfo->type); } mysqli_free_result($result); } /* close connection */ mysqli_close($link); ?> Ausgabe 1 Name: Name Table: Country max. Len: 11 Flags: 1 Type: 254 Name: SurfaceArea Table: Country max. Len: 10 Flags: 32769 Type: 4 Beispiel 2 <?php if(extension_loaded('mysqli') && (!empty(@ini_get('mysqli.allow_local_infile')) || !empty(@ini_get('mysqli.allow_persistent')))) { $host_name ='localhost'; $db_user_name ='my_user'; $db_password ='my_password'; $db_name ='world'; if($db_connect = @mysqli_connect($host_name, $db_user_name, $db_password, $db_name)) { $sql_db_tables_array = array_column(@mysqli_fetch_all($db_connect->query('SHOW TABLES')),0); $table_count = count($sql_db_tables_array); $types_array=array(); $constants = get_defined_constants(true); foreach($constants['mysqli'] as $c => $n) if(preg_match('/^MYSQLI_TYPE_(.*)/', $c, $m)) $types_array[$n] = $m[1]; $types_array_count = count($types_array); $table_info_array=array(); for($x=0; $x<$table_count; $x++){ $sql_field_name_array=array('Feldname'); $sql_field_length_array=array('Länge'); $sql_field_type_array=array('Feldtyp'); $table_info_current_array=array(); $sql_command = "SELECT * FROM " . $sql_db_tables_array[$x]; $sql_result = $db_connect->query($sql_command) or die("SQL-Anfrage fehlgeschlagen"); while($field_info = @mysqli_fetch_field($sql_result)) { array_push($sql_field_name_array, $field_info -> name); array_push($sql_field_length_array, $field_info -> length); $current_field_type = $field_info -> type; for($y=0; $y<$types_array_count; $y++){ $types_value=0; $current_array_key = key($types_array); if($current_array_key == $current_field_type) { array_push($sql_field_type_array, $types_array[$current_array_key]); $types_value=1; } if(!empty($types_value)) break; next($types_array); } if(empty($types_value)) array_push($sql_field_type_array, $sql_content_no_value); reset($types_array); } @mysqli_free_result($sql_result); } array_push($table_info_current_array, $sql_field_name_array, $sql_field_length_array, $sql_field_type_array); unset($sql_field_name_array); unset($sql_field_length_array); unset($sql_field_type_array); array_push($table_info_array, $table_info_current_array); unset($table_info_current_array); } @mysqli_close($db_connect) or die("Das Schließen der Verbindung zur SQL-Datenbank - " . $db_name . " - ist fehlgeschlagen!!"); /* Name, Laenge und Typ der Felder aller Tabellen der aktuellen Datenbank befinden sich jetzt im Arrays $table_info_array */ print "<pre>"; print_r($table_info_array); print "</pre>"; } } ?> Hinweis (Feldtypen): INT wird als LONG, SMALLINT wird als SHORT, TINYINT wird als CHAR, TEXT wird als BLOB, VARCHAR wird als VAR_STRING ausgegeben. oben  mysqli_fetch_array(mysqli_result $result [, int $resulttype = MYSQLI_BOTH ) Mit mysqli_fetch_array() kann man sich anhand einer Ergebnis-Kennung (mysqli_result $result) Datensätze in einem assoziativen Array übergeben lassen. Dabei werden die Feldnamen innerhalb der Tabelle als Schlüssel des Arrays genutzt. Im Erfolgsfall liefert diese Funktion den aktuellen Datensatz, sonst wird NULL zurückgegeben. Der zweite Parameter (int $resulttype) ist optional. Sie können in diesem Parameter folgende Konstanten übergeben: resulttype MYSQL_ASSOC ... Funktionsergebnis ist ein assoziatives Array MYSQL_NUM ... Funktionsergebnis ist ein numerisch indiziertes Array MYSQL_BOTH ... Funktionsergebnis ist ein Array, das die Elemente des Ergebnisdatensatzes sowohl assoziativ als auch numerisch indiziert enthält. Dies ist der Default-Wert. Hinweis: Feldnamen, die von dieser Funktion zurückgegeben werden, unterscheiden sich in der Groß-/Kleinschreibung und diese Funktion setzt NULL-Felder auf den PHP-Wert NULL. Beispiel <?php $link = mysqli_connect("localhost", "my_user", "my_password", "world"); /* check connection */ if(mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $query = "SELECT Name, CountryCode FROM City ORDER by ID LIMIT 3"; $result = mysqli_query($link, $query); /* numeric array */ $row = mysqli_fetch_array($result, MYSQLI_NUM); printf ("%s (%s)\n", $row[0], $row[1]); /* associative array */ $row = mysqli_fetch_array($result, MYSQLI_ASSOC); printf ("%s (%s)\n", $row["Name"], $row["CountryCode"]); /* associative and numeric array */ $row = mysqli_fetch_array($result, MYSQLI_BOTH); printf ("%s (%s)\n", $row[0], $row["CountryCode"]); /* free result set */ mysqli_free_result($result); /* close connection */ mysqli_close($link); ?> Ausgabe Kabul (AFG) Qandahar (AFG) Herat (AFG) oben  mysqli_field_seek(mysqli_result $result , int $fieldnr) Mit mysqli_field_seek() kann man anhand einer Ergebnis-Kennung (mysqli_result $result) den Feldzeiger auf den angegebenen Feldindex (int $fieldnr) setzen. Wird bei dem nächsten Aufruf der Funktion mysqli_fetch_field() kein Feldindex übergeben, so wird der zuvor mit mysql_field_seek() bestimmte Feldindex genutzt. Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Siehe auch: mysqli_fetch_field() Beispiel <?php $link = mysqli_connect("localhost", "my_user", "my_password", "world"); /* check connection */ if(mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $query = "SELECT Name, SurfaceArea from Country ORDER BY Code LIMIT 5"; if($result = mysqli_query($link, $query)) { /* Get field information for 2nd column */ mysqli_field_seek($result, 1); $finfo = mysqli_fetch_field($result); printf("Name: %s\n", $finfo->name); printf("Table: %s\n", $finfo->table); printf("max. Len: %d\n", $finfo->max_length); printf("Flags: %d\n", $finfo->flags); printf("Type: %d\n\n", $finfo->type); mysqli_free_result($result); } /* close connection */ mysqli_close($link); ?> Ausgabe Name: SurfaceArea Table: Country max. Len: 10 Flags: 32769 Type: 4 oben  Informationen über die MySQLi-Variablen einer MySQLi-Datenbank Zugangsdaten und Datenbankname sind anzupassen. Einige dieser Informationen bekommt man auch über die Funktion phpinfo(). Über den SQL-Befehl SHOW TABLE STATUS kann man sich den Tabellentyp (MyISAM, InnoDB) ausgeben lassen. <?php if(extension_loaded('mysqli') && (!empty(@ini_get('mysqli.allow_local_infile')) || !empty(@ini_get('mysqli.allow_persistent')))) { $host_name ='localhost'; $db_user_name ='my_user'; $db_password ='my_password'; $db_name ='world'; if($db_connect = @mysqli_connect($host_name, $db_user_name, $db_password, $db_name)) { // alle MySQLi-Variablen ausgeben $sql_1="SHOW VARIABLES"; // aktuelle Storage Engine (Default-Wert für den Tabellentyp) ausgeben $sql_2="SHOW VARIABLES LIKE '%storage_engine%'"; // Tabellentyp aller Tabellen einer Dantenbank ausgeben $sql_3="SHOW TABLE STATUS FROM " . $db_name; /* Tabellentyp einer vollstaendig benannten Tabelle (Angabe eines Teil des Tabellennamens ist hier moeglich - LIKE) einer Dantenbank ausgeben */ $sql_4="SHOW TABLE STATUS FROM " . $db_name . " LIKE '%capital_city_europe%'"; /* Tabellentyp einer vollstaendig benannten Tabelle (Angabe eines Teil des Tabellennamens ist hier moeglich - LIKE) der aktuellen Dantenbank ausgeben */ $sql_5="SHOW TABLE STATUS LIKE '%capital_city%'"; $res=mysqli_query($db_connect, $sql_1); while($row = mysqli_fetch_row($res)) { print $row[0] . " : " . $row[1] . "<br>"; } mysqli_free_result($res); mysqli_close($db_connect); } else { print "Hinweis: Die Verbindung zur Datenbank - " . $db_name . " - konnte nicht hergestellt werden!!"; } } else { print "Hinweis: Die MySQLi-Bibliothek (MySQLi-Extension) ist nicht verfügbar oder der Zugriff auf die MySQLi-Datenbank wurde deaktiviert!!"; } ?>
Seitenanfang 

N

nl2br oben  nl2br(string $string [, bool $is_xhtml = TRUE ]) Mit nl2br() kann man aus einen String (string) sämtliche Zeilenumbrüche (\n) in die HTML-Entsprechung <br> (<br />) umwandeln lassen. So bleibt eine Textformatierung, die innerhalb eines Formulars vorgenommen wurde, weiterhin bestehen. Falls die Internet-Browser bei mehrzeiligen Texteingabefelder (Textarea) den Windows-Zeilenumbruch (\r\n) übergeben, so ist stattdessen die Funktion preg_replace() zu verwenden. Siehe auch: preg_replace() wordwrap() str_replace() Parameter-Liste string ... die Eingabezeichenkette is_xhtml ... Bestimmt, ob XHTML-kompatible Zeilenumbrüche verwendet werden sollen oder nicht. Beispiel 1 <?php echo nl2br("foo ist nicht\n bar"); ?> Ausgabe 1 foo ist nicht bar Ausgabe 1 - Seitenquelltext foo ist nicht<br /> bar Beispiel 2 <?php echo nl2br("Willkommen\r\nDies ist mein HTML-Dokument", false); ?> Ausgabe 2 Willkommen Dies ist mein HTML-Dokument Ausgabe 2 - Seitenquelltext Willkommen<br> Dies ist mein HTML-Dokument Beispiel 3 <?php $string = "1.Zeile 2.Zeile 3.Zeile"; echo nl2br($string); // oder echo preg_replace('/\r\n|\r|\n/','<br />',$string); ?> Ausgabe 3 1.Zeile 2.Zeile 3.Zeile 1.Zeile 2.Zeile 3.Zeile Ausgabe 3 - Seitenquelltext 1.Zeile<br /> 2.Zeile<br /> 3.Zeile<br>1.Zeile<br />2.Zeile<br />3.Zeile
Seitenanfang 

O

opendir oben  opendir(string $path [, resource $context ]) Mit opendir() kann man ein Verzeichnis-Handle öffnen. Dieses Verzeichnis-Handle kann später für folgende Befehle genutzt werden: closedir(), readdir(). Gibt bei Erfolg ein Verzeichnis-Handle resource zurück. Im Fehlerfall wird FALSE zurückgegeben und eine E_WARNING ausgegeben. Dies kann passieren, wenn path kein valides Verzeichnis ist oder das Verzeichnis auf Grund von Zugriffsbeschränkungen oder Filesystem-Problemen nicht geöffnet werden kann. Siehe auch: closedir() readdir() Parameter-Liste path ... Der zu öffnende Verzeichnis-Pfad. context ... context ist ein optionaler Parameter. PHP bietet eine Menge von Kontextoptionen und -parametern, die in Zusammenhang mit allen Dateisystem- und Streamwrappern genutzt werden können. Ein Kontext wird mit stream_context_create() erzeugt. Optionen werden mit stream_context_set_option() gesetzt und Parameter mit stream_context_set_params(). Beispiel 1 <?php if($verz = opendir("neu")) echo "Verzeichnis geöffnet!"; echo "<br>Verz.Handle: $verz"; ?> Ausgabe 1 Verzeichnis geöffnet! Verz.Handle: Resource id #1 Beispiel 2 <?php $dir = "./"; // Oeffnen des aktuellen Verzeichnisses und danach seinen Inhalt einlesen if(is_dir($dir)) { if($dh = opendir($dir)) { while(($file = readdir($dh)) !== false) { echo "filename: $file : filetype: " . filetype($dir . $file) . "<br>\n"; } closedir($dh); } } ?> Ausgabe 2 filename: .. : filetype: dir filename: script1b.php : filetype: file filename: stufe1 : filetype: dir filename: numbers : filetype: dir filename: script1a.php : filetype: file filename: counter.txt : filetype: file filename: . : filetype: dir [...]
Seitenanfang 

P

password_hash pathinfo phpinfo posix_getpwuid posix_getgrgid preg_match preg_match_all preg_replace preg_split preg_quote preg_grep print printf print_r oben  password_hash($string_password, int $algo [, array $options ] ) password_hash() erstellt einen neuen Passwort-Hash (Einweg-Schlüssel) und benutzt dabei einen starken Einweg-Hashing-Algorithmus. password_hash() ist kompatibel zu crypt(). Daher können Passwort-Hashes, die durch crypt() erzeugt wurden, mit password_hash() verwendet werden. Bei Erfolg wird ein Passwort-Hash und im Fehlerfall FALSE zurückgegeben. Siehe auch: md5() Anhang: Deprecated features Parameter-Liste password ... Das Passwort des Benutzers. Hinweis: Die Verwendung von PASSWORD_BCRYPT als Algorithmus führt dazu, dass der Parameter password auf eine Höchstlänge von 72 Zeichen gekürzt wird. algo ... Eine Konstante für den Passwort-Algorithmus, die den Algorithmus zum hashen des Passwortes angibt. options ... Ein assoziatives Array mit Optionen. Die folgenden Algorithmen werden zur Zeit unterstützt: PASSWORD_DEFAULT - Benutzt den bcrypt-Algorithmus (Kennung: $2y$). Beachte, dass sich diese Konstante mit der Zeit ändern wird, wenn stärkere Algorithmen in PHP implementiert werden. Aus diesem Grund kann sich die Länge des zurückgegebenen Strings mit der Zeit ändern. Es wird deshalb empfohlen das Ergebnis in einem Datenbankfeld zu speichern, das mehr als 60 Zeichen speichern kann. (z.B. 255 Zeichen). PASSWORD_BCRYPT - Benutzt den CRYPT_BLOWFISH-Algorithmus zum Erstellen des Hashes. Dies erstellt einen crypt()-kompatiblen Hash und benutzt die "$2y$"-Kennung. Es wird immer ein 60 Zeichen langer String zurückgegeben, Im Fehlerfall wird FALSE zurückgegeben. PASSWORD_ARGON2I - Benutzt den CRYPT_ARGON2I-Algorithmus zum Erstellen des Hashes. Dieser Algorithmus ist nur verfügbar, wenn PHP mit der ARGON2IT-Unterstützung kompiliert wurde. PASSWORD_ARGON2ID - Benutzt den CRYPT_ARGON2ID-Algorithmus zum Erstellen des Hashes. Dieser Algorithmus ist nur verfügbar, wenn PHP mit der ARGON2ID-Unterstützung kompiliert wurde. Beispiel 1 <?php $htaccess_password="Die folgenden Algorithmen werden zur Zeit"; $htaccess_password_hash=password_hash($htaccess_password,PASSWORD_DEFAULT); echo $htaccess_password_hash; ?> Ausgabe 1 $2y$10$r2VMCeNnBkdM5XePSs6k0OKtWAVnO92fllKQ1m7WCq7.ip1b7C4u2 Beispiel 2 <?php // cost - Werte 1 und 2 sind unzulässig, 10 ... default $password_2="Die folgenden Algorithmen werden zur Zeit"; $options = [ 'cost' => 12, ]; echo password_hash($password_2, PASSWORD_BCRYPT, $options); ?> Ausgabe 2 $2y$12$M3851yjgioY6uxG.C/xEwO596pgLBEYpviVYTXJMY2ZBNcx8oHpzu Beispiel 3 <?php function secured_hash($input) { $output = password_hash($input,PASSWORD_DEFAULT); return $output; } $password_3="Die folgenden Algorithmen werden zur Zeit"; echo secured_hash($password_3); ?> Ausgabe 3 $2y$10$2DI9XoTF4WCvRg9hjG2H2.iiOMDvOVSSZ26BZ3XoUo5rnfduP2qVq Beispiel 4 <?php if(@password_hash('rasmuslerdorf', PASSWORD_ARGON2I)) { echo 'Argon2i hash: ' . password_hash('rasmuslerdorf', PASSWORD_ARGON2I); } else { echo "Der CRYPT_ARGON2ID-Algorithmus wird möglicherweise nicht unterstützt!"; } ?> Ausgabe 4 Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0 oben  pathinfo(string $path [, int $options = PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME ]) pathinfo() gibt Informationen über einen Dateipfad (string $path) zurück, entweder als assoziatives Array oder als String, abhängig vom options-Parameter. Über das Array erhält man folgende Informationen: dirname - Verzeichnis-Pfad, basename - Dateiname mit Dateiendung, extension - Dateiendung und filename - Dateiname ohne Dateiendung Siehe auch: dirname() basename() Vordefinierte Variablen Parameter-Liste path ... Der zu analysierende Dateipfad. Hinweis: Wenn der path mehr als eine Erweiterung hat, gibt PATHINFO_EXTENSION nur die letzte zurück und PATHINFO_FILENAME entfernt nur die letzte Erweiterung (Extension). Falls path keine Erweiterung hat, wird das extension-Element nicht zurückgegeben. options ... Falls angegeben, wird nur dieses eine Element zurückgegeben. Mögliche Werte: PATHINFO_DIRNAME, PATHINFO_BASENAME, PATHINFO_EXTENSION oder PATHINFO_FILENAME. Falls options nicht angegeben wird, werden alle verfügbaren Elemente zurückgegeben. Beispiel 1 <?php $pfad_info = pathinfo("/www/users/test_php/zahlen.txt"); echo $pfad_info["dirname"]; echo "<br>"; echo $pfad_info["basename"]; echo "<br>"; echo $pfad_info["extension"]; echo "<br>"; echo $pfad_info["filename"]; ?> Ausgabe 1 /www/users/test_php zahlen.txt txt zahlen Beispiel 2 <?php $pfad_info = pathinfo("/www/users/test_php/zahlen.txt"); print "<pre>"; print_r ($pfad_info); print "</pre>"; ?> Ausgabe 2 Array ( [dirname] => /www/users/test_php [basename] => zahlen.txt [extension] => txt [filename] => zahlen ) Beispiel 3 <?php $pfad_info = pathinfo("/www/users/test_php/zahlen.txt", PATHINFO_BASENAME); echo $pfad_info; ?> Ausgabe 3 zahlen.txt oben  phpinfo([ int $what = INFO_ALL ] ) Zeigt eine große Anzahl von Informationen über den aktuellen Zustand von PHP an. Dies umfasst Informationen über die Optionen während des Kompilierens und die Extensions, die PHP-Version, Server-Informationen und Server-Umgebung (falls als Modul kompiliert), die PHP-Umgebung, Versionsinformationen zum Betriebssystem, Pfade, Master- und lokale Werte der Konfigurationsoptionen, HTTP-Header und die PHP-Lizenz. Weil jedes System anders installiert ist, wird phpinfo() oft genutzt, um die Konfigurationseinstellungen und die verfügbaren vordefinierten Variablen auf einem System zu prüfen. Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Siehe auch: ini_get() Vordefinierte Variablen phpinfo()-what-Optionen: INFO_GENERAL - 1 - Die Konfigurationszeile, der Ort der php.ini, das Übersetzungsdatum, der Webserver, das System und mehr. INFO_CREDITS - 2 - PHP-Credits. Siehe auch phpcredits(). INFO_CONFIGURATION - 4 - Aktueller lokaler und Master-Wert der PHP-Direktiven. Siehe auch ini_get(). INFO_MODULES - 8 - Die geladenen Module und ihre jeweiligen Einstellungen. Siehe auch get_loaded_extensions(). INFO_ENVIRONMENT - 16 - Informationen über die Umgebungsvariablen. INFO_VARIABLES - 32 - Zeigt alle vordefinierten Variablen aus EGPCS (Environment, GET, POST, Cookie, Server). INFO_LICENSE - 64 - PHP-Lizenz-Informationen. INFO_ALL - -1 (minus 1) - Zeigt alle genannten Informationen (Default-Wert). Beispiel 1 <?php phpinfo(); ?> Beispiel 2 <?php phpinfo(INFO_VARIABLES); // phpinfo(32); ?> oben  posix_getpwuid(int $uid) Liefert zu einer Benutzer-ID Informationen über diesen Benutzer und gibt ein assoziatives Array zurück. Siehe auch: stat() posix_getgrgid() Parameter-Liste uid ... Benutzerkennung Rückgabewerte Array-Element Beschreibung name - Das name-Element enthält den Benutzernamen (nicht der Realname) mit normalerweise weniger als 16 Zeichen. passwd - Das passwd-Element enthält das verschlüsselte Passwort des Benutzers. Auf einem System mit shadow-Passwörter, wird stattdessen ein Sternchen zurückgegeben. uid - Die Benutzer-ID sollte dieselbe wie der Parameter uid sein und ist von daher redundant. gid - Die Gruppen-ID des Benutzers. Benutzen Sie die Funktion posix_getgrgid(), um den Gruppennamen und eine Liste der Gruppenmitglieder aufzulösen. gecos - GECOS ist ein veralteter Begriff, der sich auf das finger-Informationsfeld auf einem Honeywell Stapelverarbeitungssystem bezieht. Das Feld gibt es aber immer noch und sein Inhalt wurde durch POSIX formalisiert. Es enthält eine durch Komma getrennte Liste, bestehend aus dem kompletten Namen des Benutzers, der Telefonnummer des Büros, der Zimmernummer des Büros und der privaten Telefonnummer. Auf den meisten Systemen ist nur der komplette Name des Benutzers verfügbar. dir - Dieses Element enthält den absoluten Pfad des Homeverzeichnisses des Benutzers. shell - Das shell-Element enthält den absoluten Pfad zur standardmäßigen Shell des Benutzers. Beispiel <?php $test_file_path='./test.txt'; $array1 = @stat($test_file_path); $owner_id =$array1[4]; $group_id = $array1[5]; $owner_name=''; $group_name=''; if($array2 = @posix_getpwuid($owner_id)) { $array2_count = count($array2); for($x=0;$x<$array2_count;$x++) { $key1 = key($array2); if(strcasecmp($key1, "name") == 0) { $owner_name = $array2[$key1]; break; } next($array2); } } echo $owner_name . '<br>'; if($array3 = @posix_getgrgid($group_id)) { $array3_count = count($array3); for($x=0;$x<$array3_count;$x++) { $key2 = key($array3); if(strcasecmp($key2, "name") == 0) { $group_name = $array3[$key2]; break; } next($array3); } } echo $group_name; ?> oben  posix_getgrgid(int $gid) Gibt Informationen über die Gruppe mit der angegebenen ID zurück (Array). Siehe auch: posix_getpwuid() stat() Parameter-Liste gid ... Die Gruppen-ID. Rückgabewerte des Arrays Element Beschreibung name - Das name-Element enthält den Namen der Gruppe. passwd - Das passwd-Element enthält das Passwort der Gruppe in verschlüsselter Form. Auf einem System mit shadow-Passwörter, wird stattdessen ein Sternchen zurückgegeben. gid - Die Gruppen-ID - sollte dieselbe sein wie der Parameter gid, der beim Aufruf der Funktion verwendet wurde und ist von daher redundant. members - Besteht aus einem Array von Zeichenketten aller Gruppenmitglieder. Beispiel <?php $test_file_path='./test.txt'; $array1 = @stat($test_file_path); $owner_id =$array1[4]; $group_id = $array1[5]; $owner_name=''; $group_name=''; if($array2 = @posix_getpwuid($owner_id)) { $array2_count = count($array2); for($x=0;$x<$array2_count;$x++) { $key1 = key($array2); if(strcasecmp($key1, "name") == 0) { $owner_name = $array2[$key1]; break; } next($array2); } } echo $owner_name . '<br>'; if($array3 = @posix_getgrgid($group_id)) { $array3_count = count($array3); for($x=0;$x<$array3_count;$x++) { $key2 = key($array3); if(strcasecmp($key2, "name") == 0) { $group_name = $array3[$key2]; break; } next($array3); } } echo $group_name; ?> oben  preg_match(string $pattern , string $subject [, array $matches [, int $flags = 0 [, int $offset = 0 ]]]) Die Funktion preg_match() durchsucht subject nach Übereinstimmungen mit dem in pattern angegebenen regulären Ausdruck. Die Suche wird nach der ersten Übereinstimmung beendet. Im Gegensatz dazu setzt preg_match_all() die Suche bis zum Ende von subject fort. Die Funktion preg_match() gibt 1 (true) zurück, falls eine Übereinstimmung zwischen pattern und subject gefunden wurde, 0, falls nicht oder FALSE, falls ein Fehler auftrat. Hinweis: Diese Funktion kann sowohl das boolsche FALSE zurückliefern, als auch einen nicht-boolschen Wert, welcher zu FALSE ausgewertet wird. Benutzen Sie deshalb den === Operator, um den Rückgabewert dieser Funktion zu überprüfen. Verwenden Sie nicht preg_match(), wenn Sie nur überprüfen wollen, ob eine Zeichenkette in einer anderen Zeichenkette enthalten ist. Verwenden Sie dafür stattdessen die Funktionen strpos() oder strrpos(), die das schneller erledigen. Normalerweise beginnt PHP am Anfang der zu durchsuchenden Zeichenkette mit dem Suchen nach Übereinstimmungen. Über den optionalen Parameter offset kann aber auch eine andere Stelle definiert werden, ab der gesucht wird. Will man diesen Parameter angeben, aber keine Flags definieren, muss man an der Stelle des Parameters Flags den Wert -1 notieren, so wie im folgenden Beispiel gezeigt wird. <?php preg_match($pattern, $subject, $matches, -1, $offset); ?> Hinweis: Dies gilt übrigens für alle preg-Funktionen, bei denen hinter den Flags noch Parameter angegeben werden sollen. Siehe auch: preg_match_all() - führt eine umfassende Suche nach Übereinstimmungen durch preg_replace() - sucht und ersetzt mit regulären Ausdrücken preg_split() - zerlegt eine Zeichenkette anhand eines regulären Ausdrucks Anhang: Vergleichs-Operatoren Parameter-Liste pattern ... Der Ausdruck, nach dem gesucht werden soll, als Zeichenkette. subject ... Die zu durchsuchende Zeichenkette. matches ... Falls der Parameter matches angegeben wurde, wird er mit den Suchergebnissen gefüllt. $matches[0] enthält dann den Text, der auf das komplette Suchmuster passt, $matches[1] den Text, der auf das erste eingeklammerte Teilsuchmuster passt und so weiter. flags ... flags kann das folgende Flag sein: PREG_OFFSET_CAPTURE Wenn dieses Flag gesetzt ist, wird mit jeder gefundenen Übereinstimmung der dazugehörige Versatz in der Zeichenkette zurückgegeben. Beachten Sie, dass dies den Wert von matches in ein Array ändert, in dem jedes Element ein Array ist, das aus der übereinstimmenden Zeichenkette als Element 0 und deren Stelle in subject als Element 1 besteht. <?php preg_match('/(foo)(bar)(baz)/', 'foobarbaz', $matches, PREG_OFFSET_CAPTURE); print "<pre>"; print_r($matches); print "</pre>"; ?> Das oben gezeigte Beispiel erzeugt folgende Ausgabe: Array ( [0] => Array ( [0] => foobarbaz [1] => 0 ) [1] => Array ( [0] => foo [1] => 0 ) [2] => Array ( [0] => bar [1] => 3 ) [3] => Array ( [0] => baz [1] => 6 ) ) offset ... Normalerweise beginnt die Suche am Anfang der Zeichenkette. Der optionale Parameter offset kann verwendet werden, um eine andere Stelle in Bytes anzugeben, ab der gesucht werden soll. Hinweis: Die Verwendung von offset entspricht nicht der Übergabe von substr($subject, $offset), weil pattern Angaben wie zum Beispiel ^, $ oder (?<=x) enthalten können. Vergleiche: <?php $zeichenkette = "abcdef"; $suchmuster = '/^def/'; // \G Assertion - siehe weiter unten // $suchmuster = '/\Gdef/'; // A Modifikator - siehe weiter unten // $suchmuster = '/def/A'; preg_match($suchmuster, $zeichenkette, $treffer, PREG_OFFSET_CAPTURE, 3); print "<pre>"; print_r($treffer); print "</pre>"; ?> Das oben gezeigte Beispiel erzeugt folgende Ausgabe: Array ( ) während dieses Beispiel <?php $zeichenkette ="abcdef"; $suchmuster = '/^def/'; preg_match($suchmuster,substr($zeichenkette,3), $treffer, PREG_OFFSET_CAPTURE); print "<pre>"; print_r($treffer); print "</pre>"; ?> folgende Ausgabe erzeugt Array ( [0] => Array ( [0] => def [1] => 0 ) ) Als Alternative um die Verwendung von substr() zu vermeiden, kann die \G Assertion statt des ^ Ankers verwendet werden, oder stattdessen der A Modifikator; beide funktionieren in Kombination mit dem Parameter offset. Kurzinfo zu reguläre Ausdrücke: Innerhalb von regulären Ausdrücken haben folgende Zeichen . \ + * ? [ ^ ] $ ( ) { } = ! < > | : - eine besondere Bedeutung. Um diese Befehlsoperatoren in normale Suchzeichen zu verwandeln, ist vor dem Zeichen ein umgekehrter Schrägstrich \ (Backslash) zu notieren. Für bestimmte häufig vorkommende reguläre Ausdrücke gibt es Abkürzungen. So entspricht [0-9] => \d, [ \r\n\t\f] => \s und [a-zA-Z0-9_] entspricht der Abkürzung \w. /\baus/ _=> passt auf 'aus' oder 'außen' aber nicht 'Haus' (Wortgrenze) /\baus\b/ => passt auf 'aus' aber nicht 'Haus' und auch nicht 'außen' (Wortgrenze) /Hans\b/ => passt auf 'Hans' aber nicht 'Hansel' (Wortgrenze) /^Hans/ => passt auf 'Hans' nur am Anfang des zu durchsuchenden Bereichs /Hans$/ => passt auf 'Hans' nur am Ende des zu durchsuchenden Bereichs Beispiel 1 - benannte Teilsuchmuster (named subpatterns) <?php $str = 'foobar: 2008'; preg_match('/(?P<name>\w+): (?P<zahl>\d+)/', $str, $treffer); /* Benannte Teilsuchmuster akzeptieren sowohl die Syntaxen (?<name>) und (?'name') als auch (?P<name>). Vorherige Versionen (vor PHP-Version 5.2.2) akzeptierten nur (?P<name>). */ // preg_match('/(?<name>\w+): (?<zahl>\d+)/', $str, $treffer); print "<pre>"; print_r($treffer); print "</pre>"; ?> Ausgabe 1 Array ( [0] => foobar: 2008 [name] => foobar [1] => foobar [zahl] => 2008 [2] => 2008 ) Beispiel 2 - Überprüfung von Zahlen <?php $directory_depth = 2; // $directory_depth = 12; if(!preg_match("/^[1-9]$/",$directory_depth)) $directory_depth=3; echo $directory_depth . "<br>"; $counter = 12345; // $counter = 12345678; // 1 bis 5-stellige ganze Zahlen if(!preg_match("/^[0-9]{1,5}$/",$counter)) $counter=1; echo $counter; ?> Beispiel 3 - nur Buchstaben erlauben <?php $buchstaben = "Dies ist der Test"; /* Text mit Leerzeichen ergibt FALSE, da die Leerzeichen im regulaeren Ausdruck nicht beruecksichtigt wurden */ if(preg_match('#^[a-z]+$#i',$buchstaben)) { echo 'Nur Buchstaben!'; } else { echo 'Nicht nur Buchstaben!'; } ?> Beispiel 4 - eine kombinierte Zeichenkette auf Gültigkeit überprüfen Im folgenden Beispiel wird ein einfacher String, der zur Anmeldung an einer Datenbank (MySQL-, CSV- oder Text-Datenbanken) verwendet wird, auf Gültigkeit überprüft. <?php $id="MR74"; if(preg_match("/^[^0-9 _\+\-\.\?\!]{2,12}[0-9]{2}$/", $id)) { $db_id="MR74"; // ID wurde aus einer Datenbank ausgelesen $wert = strcmp($db_id,$id); if($wert == 0) { echo "Gültiger Wert!!"; /* oder Weiterleitung: header("Location: http://" . $_SERVER['HTTP_HOST'] . "/admin/login.php"); exit; */ } } ?> Der Ausdruck kann aus 4 bis 14 Zeichen bestehen. Die ersten 2 bis 12 Zeichen dürfen alle Zeichen enthalten, außer keine Zahlen, Leerzeichen, Unterstrich, Minuszeichen, Pluszeichen, Fragezeichen und Ausrufezeichen. Die nächsten 2 Zeichen des Ausdrucks dürfen nur Zahlen enthalten. Hinweis: Zeichen aus anderen Schriftsystemen (z.B. koreanisches, chinesisches Schriftssystem) werden in ihrer Länge von PHP anders bewertet als Zeichen aus dem englischen Schriftsystem. MR -> Zeichenlänge 2 캠핑 -> Zeichenlänge 6 (koreanisch: 캠핑 ... Camping) Das Beispiel kann für die Übergabe eines ID-Code's mittels der GET- oder POST-Methode (z.B. Suchen-Feld) verwendet werden. Entspricht der String dem Muster, kann der Benutzer z.B. zum Verwaltungsbereich (Administration) weiter geleitet werden. Das Ergebnis des Algorithmus ist TRUE oder FALSE. Beispiel 5 - Überprüfung einer Benutzereingabe auf Gültigkeit (Monat) <?php // Eingabe eines Monats $user_input=" 12abc "; $current_month_a =trim($user_input); if(preg_match("(^[0-9]{1,2}$)",$current_month_a) && $current_month_a <= 12) { $current_month = $current_month_a; } else { $current_month=1; } echo $current_month; ?> Beispiel 6 - Kürzung von zu langen Texten <?php $original_text_array=array(); $text_array=array(); array_push($original_text_array, "dies ist ein zu langer Text", "ein kurzer Text"); $text_array_count = count($original_text_array); for($y=0; $y<$text_array_count; $y++){ // Texte mit mehr als 16 Zeichen werden gekuerzt if(preg_match('/^(.{16,})$/', $original_text_array[$y])) { preg_match('/^(.{0,16})(.*)$/', $original_text_array[$y], $truncated_string_array); $truncated_current_string = $truncated_string_array[1] . "..."; array_push($text_array, $truncated_current_string); } else { array_push($text_array, $original_text_array[$y]); } } print "<pre>"; print_r ($text_array); print "</pre>"; ?> Beispiel 7 - Überprüfung einer Benutzereingabe auf Gültigkeit (Jahr) <?php $year_a = "2011-11"; // nur 4-stellige Jahresangaben if(!preg_match("(^[1-9]{1,1}[0-9]{3,3}$)",$year_a)) { $user_year=date("Y"); } else { $user_year=$year_a; } echo $user_year; ?> Beispiel 8 - Überprüfung einer Benutzereingabe auf Gültigkeit (Email-Adresse) <?php $mail_address = "hello@example.net"; // $mail_address = "hello@example.co.uk"; // $mail_address = "hello@example.education"; if(!empty($mail_address) && preg_match("/^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,9}$/i", $mail_address)) { echo "Die Syntax der Email-Adresse ist korrekt!!"; } else { echo "Die Syntax der Email-Adresse ist NICHT korrekt!!"; } ?> Beispiel 9 - Überprüfung der Syntax von Strings, Dateinamen <?php $csv_file_name = "/dir/content_24.dat"; if(preg_match("/content_[0-9]{1,2}\.dat/", $csv_file_name)) { echo "Die Syntax ist korrekt !!"; } ?> Beispiel 10 - Überprüfung von Dateiendungen <?php $directory_name = "./dir_a"; $file_name_1 = "./dir_a/test.html"; $file_name_2 = "./dir_a/test.php"; $file_name_3 = "./dir_a/test.jpeg"; $file_name_4 = "./dir_a/test.xyz"; $file_name_5 = "./dir_a/test.csv"; if(preg_match("@^" . $directory_name . "/[^/]+\.htm[l]?$@i",$file_name_1)) { echo "HTML-Datei <br>"; } if(preg_match("@^" . $directory_name . "/[^/]+\.php$@i",$file_name_2)) { echo "PHP-Datei <br>"; } if(preg_match("@^" . $directory_name . "/[^/]+\.(jp[e]?g|gif|png)$@i",$file_name_3)) { echo "JPEG-Datei <br>"; } if(preg_match("@^" . $directory_name . "/[^/]+\.[0-9a-z]{2,4}$@i",$file_name_4)) { echo "eine beliebige Dateiendung <br>"; } if(preg_match("@^" . $directory_name . "/[^/]+\.(css|txt|js|csv)$@i",$file_name_5)) { echo "TEXT-Datei"; } ?> Beispiel 11 - Syntax einer CSV-Datei überprüfen <?php /* CSV-Datei wird ausgelesen und zeilenweise an ein Array uebergeben; der Wert der Variablen $current_data_record entspricht einer Zeile, Datensatz */ $current_data_record = "245|8|1|123456789|987654321|hello world"; if(preg_match("/^[0-9]{1,4}\|[0-9]{1,2}\|[0-1]{1}\|[0-9]{1,10}\|[0-9]{1,10}\|.*$/",$current_data_record)) { echo "Der aktuelle Datensatz ist nicht beschaedigt!"; } else { echo "DER AKTUELLE DATENSATZ IST BESCHAEDIGT!"; } ?> Beispiel 12 - Überprüfung einer hochgeladenen Datei (Upload) <?php [...] // Werte einer hochgeladenen Datei mit der PHP-Variablen $_FILES['xxx'] auslesen // Dateiname, Dateigroesze, Dateityp if(!empty($_FILES['upload_file_1']['name']) && $_FILES['upload_file_1']['size'] > 10) { if(preg_match("#image/jpeg#i", $_FILES['upload_file_1']['type'])) { echo "JPEG-Datei"; } } if(!empty($_FILES['upload_file_2']['name']) && $_FILES['upload_file_2']['size'] > 10) { if(preg_match("/^.*\.tar\.gz$/i", $_FILES['upload_file_2']['name']) { echo "Dateiendung ist .tar.gz"; } } /* Hinweis: preg_match-Modifikator i - es wird nicht zwischen Klein- und Grossschreibung unterschieden; die hochgeladene Datei muss > 10 Byte sein */ ?> Beispiel 13 - Auslesen von Server-Variablen <?php // [...] // enthaelt den Domainnamen und den Namen der aufgerufenen Datei if(!empty($_SERVER['SCRIPT_URI']) && preg_match("/^http:\/\//i",$_SERVER['SCRIPT_URI'])) { if(preg_match("/\?/",$_SERVER['SCRIPT_URI'])) { $server_script_uri=explode('?',$_SERVER['SCRIPT_URI']); print "<pre>"; print_r($server_script_uri); print "</pre>"; } } // enthaelt den Domainnamen und den Namen der aufgerufenen Datei if(!empty($_SERVER['HTTP_REFERER']) && preg_match("/^http:\/\//i",$_SERVER['HTTP_REFERER'])) { if(preg_match("/\?/",$_SERVER['HTTP_REFERER'])) { $server_http_referer=explode('?',$_SERVER['HTTP_REFERER']); print "<pre>"; print_r($server_http_referer); print "</pre>"; } } // siehe auch: $_SERVER['xxx'] - enthaelt die IP-Adresse des Webseiten-Besuchers if(!empty($_SERVER['REMOTE_ADDR'])) { echo $_SERVER['REMOTE_ADDR'] . "<br>"; } // siehe auch: $_SERVER['xxx'] - enthaelt den vollständigen Browsernamen if(!empty($_SERVER['HTTP_USER_AGENT'])) { echo $_SERVER['HTTP_USER_AGENT'] . "<br>"; } // Erzeugung eines einmaligen Benutzerschluessels if(isset($_SERVER['REMOTE_ADDR']) && isset($_SERVER['HTTP_USER_AGENT'])) { $id_write_raw=$_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'] . time(); $id_write = md5($id_write_raw); if(preg_match("/^[0-9a-f]{32}$/i", $id_write) ) { echo $id_write; } else { echo "ES KONNTE KEIN GUELTIGER SCHLUESSEL ERZEUGT WERDEN!"; } } // [...] // Hinweis: Es stehen mitunter nicht alle Variablen zur Verfuegung. ?> Beispiel 14 - Überprüfung der zur Verfügung stehenden PHP-Funktionen <?php // Aus Sicherheitsgruenden stehen mitunter einige PHP-Funktionen nicht zur Verfuegung $functions_disable = ini_get('disable_functions'); if(!preg_match("/exec/", $functions_disable)) { echo "Die PHP-Funktion exec steht zur Verfuegung!"; } else { echo "Die PHP-Funktion exec steht NICHT zur Verfuegung!"; } ?> Beispiel 15 - die Zeichenkette "php" finden <?php // Das "i" nach der Suchmuster-Begrenzung kennzeichnet eine Suche // ohne Berücksichtigung von Groß- und Kleinschreibung if(preg_match("/php/i", "PHP ist die Web-Scripting-Sprache der Wahl.")) { echo "Es wurde eine Übereinstimmung gefunden."; } else { echo "Es wurde keine Übereinstimmung gefunden."; } ?> Beispiel 16 - die Zeichenkette "web" finden <?php // Das \b im Suchmuster kennzeichnet eine Wortgrenze, weshalb nur eine // Übereinstimmung mit der einzelnen Zeichenkette "web" gefunden wird und // nicht ein Teilwort in "webbing" oder "cobweb" if(preg_match("/\bweb\b/i", "Für das Web ist PHP die Scripting-Sprache der Wahl.")) { echo "Es wurde eine Übereinstimmung gefunden."; } else { echo "Es wurde keine Übereinstimmung gefunden."; } print "<br>"; if(preg_match("/\bweb\b/i", "PHP ist die Web-Scripting-Sprache der Wahl.")) { echo "Es wurde eine Übereinstimmung gefunden."; } else { echo "Es wurde keine Übereinstimmung gefunden."; } ?> Beispiel 17 - den Domänen-Namen aus einer URL holen <?php // den Hostnamen aus URL holen /* als Begrenzer fuer den regulaeren Ausdruck wird hier das @-Zeichen eingesetzt, da der Slash in der URL vorkommt */ preg_match('@^(?:http://)?([^/]+)@i', "http://www.php.net/index.html", $treffer); $host = $treffer[1]; // die letzten beiden Segmente aus Hostnamen holen preg_match('/[^.]+\.[^.]+$/', $host, $treffer); echo "Der Domänen-Name lautet: {$treffer[0]}\n"; ?> Ausgabe 17 Der Domänen-Name lautet: php.net Beispiel 18 - benannte Teilsuchmuster (named subpatterns) <?php $str = 'foobar: 2008'; preg_match('/(?P<name>\w+): (?P<zahl>\d+)/', $str, $treffer); /* Folgendes funktioniert ab PHP 5.2.2 (PCRE 7.0) ebenfalls, für die * Rueckwaertskompatibilitaet wird aber die vorherige Form empfohlen. */ // preg_match('/(?<name>\w+): (?<zahl>\d+)/', $str, $treffer); print "<pre>"; print_r ($treffer); print "</pre>"; ?> Ausgabe 18 Array ( [0] => foobar: 2008 [name] => foobar [1] => foobar [zahl] => 2008 [2] => 2008 ) Beispiel 19 - MD5-Hash überprüfen <?php $hash = md5(time()); if(!preg_match('/^[a-f0-9]{32}$/',$hash)){ echo 'Falscher MD5-Hash!<br>'; echo 'Generiere neuen MD5-Hash: '. $hash = md5(time()); } else { echo 'MD5-Hash ist in Ordnung: ' . $hash; } ?> Ausgabe 19 MD5Hash ist in Ordnung: 6935bd151d0b7f43f86f42b2ce1d7998 Beispiel 20 - den Titel einer entfernten Seite auslesen <?php $datei = fopen ("http://www.example.com/", "r"); if(!$datei) { echo "<p>Datei konnte nicht geöffnet werden.\n"; exit; } while(!feof($datei)) { $zeile = fgets ($datei, 1024); /* Funktioniert nur, wenn Titel und title-Tags in einer Zeile stehen */ /* als Begrenzer fuer den regulaeren Ausdruck wird hier das @-Zeichen eingesetzt */ if(preg_match ("@\<title\>(.*)\</title\>@i", $zeile, $treffer)) { $title = $treffer[1]; break; } } fclose($datei); print $title; ?> Beispiel 21 - Überprüfung von URLs <?php //$url = "https://localhost"; //$url = "https://localhost/"; //$url = "https://localhost/www/work-x/laboretum"; //$url = "https://localhost/www/work-x/laboretum/"; //$url = "https://localhost/www/work-x/laboretum/index.php"; //$url = "https://localhost/www/work-x/laboretum/index.php?paula:secret@ssh.server.de"; //$url = "https://localhost/www/work-x/laboretum/index.php?paula@ssh.server.de"; //$url = "https://localhost/www/work-x/laboretum/index.php#kapitel_abc"; //$url = "https://localhost/www/work-x/laboretum/index.php:12345"; $url = "https://localhost/www/work-x/laboretum/index.php?script_a=2&script_b=7&script_b=12"; $regex = "(((https?|sftp)\:\/\/)?[a-z0-9_-]+([\/a-z0-9_-]+)?([a-z0-9_-]+\.[a-z]{2,9})?){1}"; // URL-Schema $regex .= "(\?[a-z0-9_-]{0,}(\:[a-z0-9_-]{1,})?@[a-z0-9_-]{0,}\.[a-z0-9_-]{0,}\.[a-z]{2,9})?"; // Benutzer, Passwort, Host $regex .= "(#[a-z_-]+)?"; // Anker $regex .= "(\:[0-9]{2,5})?"; // Port $regex .= "(\?[a-z0-9_-]+[=a-z0-9_-]{0,}[\&=a-z0-9_-]{0,})?"; // GET-Anfrage if(preg_match("/^$regex$/i", $url)) { print "URL ist in Ordnung"; } else { print "URL ist NICHT in Ordnung"; } ?> Beispiel 22 - liest Dateien aus einem Verzeichnis, ohne die Dateien "." oder ".." <?php $directory_name = './directory_name/pages/'; if(is_dir($directory_name)) { $handle = opendir($directory_name); $pages = array(); while(false !== ($file = readdir($handle))) { if(!preg_match("/^[.]/", $file, $out, PREG_OFFSET_CAPTURE)) { echo $file . "<br>"; array_push($pages, $file); } } echo "<br>Anzahl der Dateien: " . count($pages); } else { echo "DIRECTORY " . $directory_name . " NOT FOUND"; } ?> Beispiel 23 - Logbuch nach bestimmten Einträgen durchsuchen <?php [...] $SESSIONID = session_id(); $log_book_name = "logbook.txt" if(file_exists($log_book_name)) { $log_book_array = @file($log_book_name); for($x=0; $x<count($log_book_array); $x++) { if(preg_match("/" . $SESSIONID . "/", $log_book_array[$x])) { [...] } // der Slash (/) wird hier von preg_quote zusaetzlich mit beruecksichtigt if(preg_match("/" . preg_quote($_SERVER['HTTP_USER_AGENT'], '/') . "/", $log_book_array[$x])) { [...] } // preg_quote versieht die folgenden Zeichen mit einem Backslash: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : - if(preg_match("/" . preg_quote($_SERVER['REMOTE_ADDR']) . "/", $log_book_array[$x])) { [...] } } } [...] ?> Beispiel 24 - Datums-Ueberpruefung <?php /* Datums-Ueberpruefung: Fuer die Benutzereingabe soll folgendes erlaubt sein: 2009-1-2 2009-01-02 */ function check_date($date) { $date=trim($date); if(preg_match('/^([1-2]\d\d\d)-(\d{1,2})-(\d{1,2})$/', $date, $date_array)) { if($date_array[2] <=12 && $date_array[3] <= 31 && strcmp($date, date("Y-m-d", strtotime($date))) == 0) { return $date; } else { return false; } } else { return false; } } // Benutzereingabe erfolgt im endgueltigen Skript ueber ein Formular $benutzer_eingabe="2000-02-33"; // Aufruf der Funktion check_date() $datum=check_date($benutzer_eingabe); if(empty($datum)) { $datum="Falsche Eingabe!!"; } print $datum; ?> Beispiel 25 - regulären Ausdruck überprüfen <?php // [...] $regular_expression_content=''; // $regex_a = $_POST["regex_a"]; $regex_a='888(('; $test_content = "&auml;&ouml;&uuml;&szlig;&Auml;&Ouml;&Uuml;"; if(@preg_match('#' . $regex_a . '#i', $test_content) === FALSE) { // der mit der Methode POST uebertragene regulaere Ausdruck hat einen Fehler verursacht $regular_expression_content .=''; echo 'Der regulaere Ausdruck hat einen Fehler verursacht: ' . $regex_a; } else { // der mit der Methode POST uebertragene regulaere Ausdruck wird uebernommen $regular_expression_content .= $regex_a . "\n"; echo $regex_a; } // [...] ?> oben  preg_match_all(string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]]) Die Funktion durchsucht subject nach allen Übereinstimmungen mit dem in pattern angegebenen regulären Ausdruck und legt sie in der durch flags festgelegten Reihenfolge in matches ab. Nachdem die erste Übereinstimmung gefunden wurde, wird die nachfolgende Suche jeweils am Ende der letzten Übereinstimmung fortgesetzt. Gibt die Anzahl der Übereinstimmungen mit dem kompletten Suchmuster zurück (die auch Null sein kann) oder FALSE, falls ein Fehler auftrat. Siehe auch: preg_match() - führt eine Suche mit einem regulären Ausdruck durch preg_replace() - sucht und ersetzt mit regulären Ausdrücken preg_split() - zerlegt eine Zeichenkette anhand eines regulären Ausdrucks Parameter-Liste pattern ... Der Ausdruck, nach dem gesucht werden soll, als Zeichenkette. subject ... Die zu durchsuchende Zeichenkette. matches ... Ein mehrdimensionales Array mit allen gefundenen Übereinstimmungen, das den flags entsprechend sortiert ist. flags ... kann eine Kombination folgender Flags sein (beachten Sie, dass es keinen Sinn hat, PREG_PATTERN_ORDER zusammen mit PREG_SET_ORDER zu verwenden) PREG_PATTERN_ORDER Ordnet die Ergebnisse so an, dass $matches[0] ein Array von Übereinstimmungen mit dem kompletten Suchmuster ist, $matches[1] ein Array von Zeichenketten, die auf das erste eingeklammerte Teilsuchmuster passen und so weiter. <?php preg_match_all("|<[^>]+>(.*)</[^>]+>|U", "<b>Beispiel: </b><div align=left>das ist ein Test</div>", $ausgabe, PREG_PATTERN_ORDER); echo $ausgabe[0][0] . ", " . $ausgabe[0][1] . "\n"; echo $ausgabe[1][0] . ", " . $ausgabe[1][1] . "\n"; ?> Das oben gezeigte Beispiel erzeugt folgende Ausgabe: Beispiel: , das ist ein Test Beispiel: , das ist ein Test Ausgabe des Seitenquelltextes: <b>Beispiel: </b>, <div align=left>das ist ein Test</div> Beispiel: , das ist ein Test Also enthält $ausgabe[0] ein Array von Zeichenketten, die auf das komplette Suchmuster passen und $ausgabe[1] ein Array von Zeichenketten, die sich zwischen Tags befinden. PREG_SET_ORDER Ordnet die Ergebnisse so an, dass $matches[0] ein Array aus dem ersten Satz von Übereinstimmungen ist, $matches[1] ein Array aus dem zweiten Satz von Übereinstimmungen und so weiter. <?php preg_match_all("|<[^>]+>(.*)</[^>]+>|U", "<b>Beispiel: </b><div align=\"left\">das ist ein Test</div>", $ausgabe, PREG_SET_ORDER); echo $ausgabe[0][0] . ", " . $ausgabe[0][1] . "\n"; echo $ausgabe[1][0] . ", " . $ausgabe[1][1] . "\n"; ?> Das oben gezeigte Beispiel erzeugt folgende Ausgabe: Beispiel: , Beispiel: das ist ein Test , das ist ein Test Ausgabe des Seitenquelltextes: <b>Beispiel: </b>, Beispiel: <div align="left">das ist ein Test</div>, das ist ein Test PREG_OFFSET_CAPTURE Wenn dieses Flag gesetzt ist, wird mit jeder gefundenen Übereinstimmung der dazugehörige Versatz in der Zeichenkette zurückgegeben. Beachten Sie, dass dies den Wert von matches in ein Array ändert, in dem jedes Element ein Array ist, das aus der übereinstimmenden Zeichenkette als Element 0 und deren Stelle in subject als Element 1 besteht. PREG_UNMATCHED_AS_NULL Wird dieses Flag angegeben werden nicht gefundene Teilsuchmuster als NULL geliefert; andernfalls werden sie als eine leere Zeichenkette (string) geliefert. Hinweis: Falls kein Flag für die Anordnung angegeben wurde, wird PREG_PATTERN_ORDER (Default-Wert) angenommen. offset : Normalerweise beginnt die Suche am Anfang der Zeichenkette. Der optionale Parameter offset kann verwendet werden, um eine andere Stelle in Bytes anzugeben, ab der gesucht werden soll. Hinweis: Die Verwendung von offset entspricht nicht der Übergabe von substr($zeichenkette, $versatz) an Stelle der Zeichenkette an preg_match_all(), weil pattern Angaben wie zum Beispiel ^, $ oder (?<=x) enthalten kann (siehe auch: preg_match()). Kurzinfo zu reguläre Ausdrücke: Innerhalb von regulären Ausdrücken haben folgende Zeichen . \ + * ? [ ^ ] $ ( ) { } = ! < > | : - eine besondere Bedeutung. Um diese Befehlsoperatoren in normale Suchzeichen zu verwandeln, ist vor dem Zeichen ein umgekehrter Schrägstrich \ (Backslash) zu notieren. Für bestimmte häufig vorkommende reguläre Ausdrücke gibt es Abkürzungen. So entspricht [0-9] => \d, [ \r\n\t\f] => \s und [a-zA-Z0-9_] entspricht der Abkürzung \w. /\baus/ _=> passt auf 'aus' oder 'außen' aber nicht 'Haus' (Wortgrenze) /\baus\b/ => passt auf 'aus' aber nicht 'Haus' und auch nicht 'außen' (Wortgrenze) /Hans\b/ => passt auf 'Hans' aber nicht 'Hansel' (Wortgrenze) /^Hans/ => passt auf 'Hans' nur am Anfang des zu durchsuchenden Bereichs /Hans$/ => passt auf 'Hans' nur am Ende des zu durchsuchenden Bereichs Beispiel 1 - alle Telefonnummern aus einem Text holen <?php preg_match_all("/\(? (\d{3})? \)? (?(1) [\-\s] ) \d{3}-\d{4}/x", "Wählen Sie 555-1212 oder 1-800-555-1212", $telefon); print "<pre>"; print_r ($telefon); print "</pre>"; ?> Ausgabe 1 Array ( [0] => Array ( [0] => 555-1212 [1] => 800-555-1212 ) [1] => Array ( [0] => [1] => 800 ) ) Beispiel 2 - zusammengehörende HTML-Tags finden <?php // Das \\2 ist ein Beispiel für Rückreferenzierung. Es teilt pcre mit, dass der reguläre Ausdruck auf den für das zweite Klammerpaar gefundenen // Ausdruck selbst, also in diesem Fall auf den für ([\w]+) gefundenen Ausdruck passen muss. // Der zusätzliche Backslash wird wegen der doppelten Anführungsstriche benötigt. $html = "<b>fett gedruckter Text</b><a href=howdy.html>klick mich an</a>"; preg_match_all("/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/", $html, $treffer, PREG_SET_ORDER); foreach ($treffer as $wert) { echo "gefunden: " . $wert[0] . "\n"; echo "Teil 1: " . $wert[1] . "\n"; echo "Teil 2: " . $wert[2] . "\n"; echo "Teil 3: " . $wert[3] . "\n"; echo "Teil 4: " . $wert[4] . "\n\n"; } ?> Ausgabe 2 gefunden: fett gedruckter Text Teil 1: Teil 2: b Teil 3: fett gedruckter Text Teil 4: gefunden: klick mich an Teil 1: Teil 2: a Teil 3: klick mich an Teil 4: Ausgabe 2 - Seitenquelltext gefunden: <b>fett gedruckter Text</b> Teil 1: <b> Teil 2: b Teil 3: fett gedruckter Text Teil 4: </b> gefunden: <a href=howdy.html>klick mich an</a> Teil 1: <a href=howdy.html> Teil 2: a Teil 3: klick mich an Teil 4: </a> Beispiel 3 - benannte Teilsuchmuster (named subpatterns) <?php $str = <<<FOO a: 1 b: 2 c: 3 FOO; preg_match_all('/(?P<name>\w+): (?P<zahl>\d+)/', $str, $treffer); /* Folgendes funktioniert ab PHP 5.2.2 (PCRE 7.0) ebenfalls, für die Rückwärtskompatibilität wird aber die vorherige Form empfohlen. */ // preg_match_all('/(?<name>\w+): (?<zahl>\d+)/', $str, $treffer); print "<pre>"; print_r ($treffer); print "</pre>"; ?> Ausgabe 3 Array ( [0] => Array ( [0] => a: 1 [1] => b: 2 [2] => c: 3 ) [name] => Array ( [0] => a [1] => b [2] => c ) [1] => Array ( [0] => a [1] => b [2] => c ) [zahl] => Array ( [0] => 1 [1] => 2 [2] => 3 ) [2] => Array ( [0] => 1 [1] => 2 [2] => 3 ) ) oben  preg_replace(mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]]) Durchsucht die Zeichenkette subject nach Übereinstimmungen mit pattern und ersetzt sie mit replacement. Die Funktion preg_replace() gibt ein Array zurück, falls subject ein Array ist, andernfalls eine Zeichenkette. Falls Übereinstimmungen gefunden wurden, wird die neue Zeichenkette subject zurückgegeben, andernfalls wird subject unverändert zurückgegeben oder NULL, falls ein Fehler auftrat. Bei Verwendung von Arrays für pattern und replacement werden die Schlüssel in der Reihenfolge bearbeitet, in der sie im Array vorliegen. Das ist nicht notwendigerweise dieselbe, wie die numerische Reihenfolge der Indizes. Wenn Sie Indizes verwenden, um festzulegen welches pattern durch welchen Ersatz replacement ersetzt werden soll, sollten Sie vor dem Aufruf von preg_replace() ksort() auf jedes Array anwenden. Hinweis: Falls Sie die Leistung regulärer Ausdrücke nicht benötigen (einfache Zeichenketten), können Sie stattdessen die schnelleren und einfacheren Alternativen wie explode(), implode(), str_replace() verwenden. Siehe auch: preg_match() - führt eine Suche mit einem regulären Ausdruck durch preg_split() - zerlegt eine Zeichenkette anhand eines regulären Ausdrucks str_replace() explode() implode() nl2br() Anhang: Deprecated features Parameter-Liste pattern : Der Ausdruck, nach dem gesucht wird. Es kann entweder eine Zeichenkette oder ein Array mit Zeichenketten sein. Mit dem Modifikator e wird der Parameter replacement nach den entsprechenden Ersetzungen der Referenzen von preg_replace() wie PHP-Code behandelt. Tipp: Stellen Sie sicher, dass replacement gültigen PHP-Code erzeugt, weil sich PHP sonst über einen Syntaxfehler (parse error) in der Zeile beschwert, die den Aufruf von preg_replace() enthält. Hinweis: preg_replace() - Ab PHP 5.5.0 wird bei Übergabe des Modifikators "\e" ein Fehler der Stufe E_DEPRECATED ausgegeben. Ab PHP 7.0.0 ist die Verwendung des "\e" Modifikators ein Fehler; ein E_WARNING wird in diesem Fall ausgegeben. Die Unterstützung für den /e Modifikator wurde entfernt. replacement : Die Zeichenkette oder das Array mit Zeichenketten zum Ersetzen. Falls dieser Parameter eine Zeichenkette ist und der Parameter pattern ein Array, werden alle Suchmuster durch diese Zeichenkette ersetzt. Falls sowohl pattern als auch replacement Arrays sind, wird jedes Suchmuster pattern durch das Gegenstück aus replacement ersetzt. Wenn das replacement-Array weniger Elemente hat als das pattern-Array, wird jedes überzählige pattern durch die leere Zeichenkette ersetzt. replacement darf Referenzen in der Form \\n oder $n enthalten, wobei Letztere vorzuziehen ist. Jede dieser Referenzen wird mit dem Text ersetzt, der vom n-ten eingeklammerten Suchmuster erfasst wurde. n kann einen Wert von 0 bis 99 haben. \\0 oder $0 beziehen sich auf den Text, der auf das komplette Suchmuster passt. Um die Nummer des erfassenden Teil-Suchmusters zu erhalten, werden öffnende Klammern mit 1 beginnend von links nach rechts gezählt. Um einen Backslash im Ersatz zu verwenden, muss er verdoppelt werden ("\\\\" PHP-Zeichenkette). Wenn Sie mit einer Ersetzung arbeiten wollen, in der auf eine Rückreferenzierung direkt eine weitere Zahl folgt (d.h., direkt nach der Übereinstimmung mit einem Suchmuster soll eine Zahl kommen), können Sie für Ihre Rückreferenzierung nicht die Schreibweise \\1 verwenden. So würde z.B. \\11 die Funktion preg_replace() verwirren, weil sie nicht weiß, ob Sie die Rückreferenzierung \\1 gefolgt von der Zahl 1 wollen oder nur die Rückreferenzierung \\11. In diesem Fall ist die Lösung, \${1}1 zu verwenden. Damit wird eine isolierte Rückreferenzierung $1 erzeugt und die 1 bleibt ein Buchstabensymbol. Wenn Sie den Modifikator e verwenden, maskiert diese Funktion ein paar Zeichen (nämlich ', ", \ und NULL) in den Zeichenketten, mit denen die Rückreferenzierungen ersetzen werden. Das wird gemacht, um sicherzustellen, dass keine Syntaxfehler entstehen, wenn Rückreferenzierungen verwendet werden, die einfache oder doppelte Anführungszeichen enthalten (z.B. 'strlen(\'$1\')+strlen("$2")'). Vergewissern Sie sich, dass Sie die Zeichenketten-Syntax von PHP kennen, um genau zu wissen, wie die ausgewertete Zeichenkette aussieht. Hinweis: preg_replace() - Ab PHP 5.5.0 wird bei Übergabe des Modifikators "\e" ein Fehler der Stufe E_DEPRECATED ausgegeben. Ab PHP 7.0.0 ist die Verwendung des "\e" Modifikators ein Fehler; ein E_WARNING wird in diesem Fall ausgegeben. Die Unterstützung für den /e Modifikator wurde entfernt. subject : Die Zeichenkette oder ein Array mit Zeichenketten zum Durchsuchen. Falls subject ein Array ist, wird das Suchen und Ersetzen auf jedes Element von subject angewandt und der Rückgabewert ist ebenfalls ein Array. limit : Die maximal mögliche Anzahl von Ersetzungen für jedes Suchmuster in jeder subject. Standardmäßiger Wert: -1 (kein Limit). count : Falls angegeben, wird dieser Variable die Anzahl vorgenommener Ersetzungen zugewiesen. Hinweis: Bei Verwendung von Arrays für pattern und replacement werden die Schlüssel in der Reihenfolge bearbeitet, in der sie im Array vorliegen. Das ist nicht notwendigerweise dieselbe, wie die numerische Reihenfolge der Indizes. Kurzinfo zu reguläre Ausdrücke: Innerhalb von regulären Ausdrücken haben folgende Zeichen . \ + * ? [ ^ ] $ ( ) { } = ! < > | : - eine besondere Bedeutung. Um diese Befehlsoperatoren in normale Suchzeichen zu verwandeln, ist vor dem Zeichen ein umgekehrter Schrägstrich \ (Backslash) zu notieren. Für bestimmte häufig vorkommende reguläre Ausdrücke gibt es Abkürzungen. So entspricht [0-9] => \d, [ \r\n\t\f] => \s und [a-zA-Z0-9_] entspricht der Abkürzung \w. /\baus/ _=> passt auf 'aus' oder 'außen' aber nicht 'Haus' (Wortgrenze) /\baus\b/ => passt auf 'aus' aber nicht 'Haus' und auch nicht 'außen' (Wortgrenze) /Hans\b/ => passt auf 'Hans' aber nicht 'Hansel' (Wortgrenze) /^Hans/ => passt auf 'Hans' nur am Anfang des zu durchsuchenden Bereichs /Hans$/ => passt auf 'Hans' nur am Ende des zu durchsuchenden Bereichs Beispiel 1 - die Verwendung von Rückreferenzierungen mit darauf folgenden numerischen Literalen <?php $zeichenkette = '15. April 2003'; $suchmuster = '/(\d+)\. (\w+) (\d+)/i'; $ersetzung = '${2}1,$3'; echo preg_replace($suchmuster, $ersetzung, $zeichenkette); ?> Ausgabe 1 April1,2003 Beispiel 2 - die Verwendung von preg_replace() mit indizierten Arrays <?php $zeichenkette = 'Der schnelle braune Fuchs sprang über den faulen Hund.'; $suchmuster = array(); $suchmuster[0] = '/schnelle/'; $suchmuster[1] = '/braune/'; $suchmuster[2] = '/Fuchs/'; $ersetzungen = array(); $ersetzungen[2] = 'Bär'; $ersetzungen[1] = 'schwarze'; $ersetzungen[0] = 'langsame'; echo preg_replace($suchmuster, $ersetzungen, $zeichenkette); echo "<br><br>"; // Wenn wir Suchmuster und Ersetzungen mit ksort() sortieren, sollten wir bekommen was wir wollten. ksort($suchmuster); ksort($ersetzungen); echo preg_replace($suchmuster, $ersetzungen, $zeichenkette); ?> Ausgabe 2 Der Bär schwarze langsame sprang über den faulen Hund. Der langsame schwarze Bär sprang über den faulen Hund. Beispiel 3 - Ersetzen mehrerer Werte <?php $suchmuster = array ('/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/', '/^\s*{(\w+)}\s*=/'); $ersetzen = array ('\4.\3.\1\2', '$\1 ='); echo preg_replace($suchmuster, $ersetzen, '{startDatum} = 1999-5-27'); ?> Ausgabe 3 $startDatum = 27.5.1999 Beispiel 4 - Leerzeichen entfernen Dieses Beispiel entfernt überschüssige Leerzeichen aus einer Zeichenkette. <?php $str = 'foo      o'; $str = preg_replace('/\s\s+/', ' ', $str); // Das ist jetzt 'foo o' echo $str; ?> Beispiel 5 - die Verwendung des Parameters count <?php $anzahl = 0; echo preg_replace(array('/\d/', '/\s/'), '*', 'xp 4 to', -1 , $anzahl); echo $anzahl; //3 ?> Ausgabe 5 xp***to 3 Beispiel 6 - Ersetzen von Zeichen <?php $text="enthaelt Zeichenketten die mit $_POST[] oder $_GET[] uebergeben wurden"; $text = preg_replace("/([0-9]{2,}[#: ?]{2,3})/","",$text); // erstetzt z.B 12#: und ein optionales Leerzeichen durch eine leere Zeichenkette $text = preg_replace('/<br>/', "\n", $text); // ersetzt den HTML-Code <br> durch einen normalen Zeilenumbruch (Unix/linux: \n) $text = preg_replace('/\\\'/', "&#39;", $text); // ersetzt das geschuetzte einfache Hochkomma (\') durch den entsprechenden HTML-Code $text = preg_replace('/\\\"/', '"', $text); // ersetzt das geschuetzte doppelte Hochkomma (\\\") durch ein doppeltes Hochkomma $text = preg_replace('/\n/', '<br>', $text); // Zeilenumbruch (Windows: \r\n, MAC: \r, Unix/linux: \n) in den HTML-Code umsetzen $text = preg_replace('/\r\n|\r|\n/','<br />',$text); // ersetzt den normalen Zeilenumbruch (Windows: \r\n, Mac: \r, Unix/linux: \n) durch den entsprechenden HTML-Code (XML-Syntax) $text = preg_replace('/\|/', '&#124;', $text); // ersetzt den geschuetzten geraden Strich (\| - z.B. Feldtrenner in CSV-Dateien) durch den entsprechenden HTML-Code // Hinweis: Das Skript erzeugt keine Ausgabe. ?> Beispiel 7 - aus einem Dateipfad den Dateinamen extrahieren <?php $img_path='/home/img/picture.jpg'; /* als Begrenzer für den regulären Ausdruck wird hier das @-Zeichen eingesetzt, da der Slash im Dateipfad vorkommt */ $image_name=preg_replace('@^.*/@', '', $img_path); echo $image_name; ?> Ausgabe 7 picture.jpg Beispiel 8 - aus einem Dateinamen eine Zahl extrahieren <?php $file_name = "content_14.dat"; /* der reguläre Ausdruck des zweiten Klammerpaares (\\2) muss auf den gefunden Ausdruck passen */ $file_number = preg_replace('/(content_)([0-9]{1,2})(\.dat)/', '\\2', $file_name); echo $file_number; // ergibt: 14 ?> Beispiel 9 - Formatierungshinweise werden für die Ausgabe aufbereitet <?php $csv_data_link = "@link&#58;http&#58;//www.domain-name.de@Dieser Text wird als Hyperlink dargestellt.@@"; // die Daten in einer CSV-Datei werden fuer die Ausgabe aufbereitet - $csv_data_link // Hinweis: \/\/ ... Backslash Slash Backslash Slash $html_link=preg_replace('/@link&#58;http&#58;(\/\/.*)@(.*)@@/', '<a target="_blank" href="http:\\1">\\2</a>',$csv_data_link); echo $html_link; ?> Ausgabe 9 Dieser Text wird als Hyperlink dargestellt. Ausgabe 9 - Seitenquelltext <a target="_blank" href="http://www.domain-name.de">Dieser Text wird als Hyperlink dargestellt.</a> oben  preg_split(string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]]) Zerlegt die angegebene Zeichenkette anhand eines regulären Ausdrucks. Gibt ein Array zurück, bestehend aus Teilzeichenketten der Zeichenkette subject, die an den auf das Suchmuster pattern passenden Stellen zerlegt wurde. Im Fehlerfall wird FALSE zurückgegeben. Hinweis: Falls Sie die Leistung regulärer Ausdrücke nicht benötigen (einfache Zeichenketten), können Sie stattdessen die schnelleren und einfacheren Alternativen wie explode(), implode(), str_replace() verwenden. Siehe auch: preg_match() - führt eine Suche mit einem regulären Ausdruck durch preg_match_all() - führt eine umfassende Suche nach Übereinstimmungen mit regulärem Ausdruck durch preg_replace() - sucht und ersetzt mit regulären Ausdrücken implode() - verbindet Array-Elemente zu einem String str_replace() explode() Parameter-Liste pattern : Der Ausdruck, nach dem gesucht werden soll, als Zeichenkette. subject : Die zu zerlegende Zeichenkette. limit : Falls angegeben, werden maximal limit Teilzeichenketten zurückgegeben, wobei der Rest der Zeichenkette in der letzten Teilzeichenkette abgelegt wird. Ein limit von -1, 0 oder Null bedeutet "kein Limit" und wie es in PHP Standard ist, kann Null verwendet werden um den Parameter flags zu überspringen. flags : flags kann jede Kombination der folgenden Flags sein (verknüpft mit dem bitweisen | Operator). PREG_SPLIT_NO_EMPTY Falls dieses Flag gesetzt ist, werden von preg_split() nur die Teile zurückgegeben, die nicht leer sind. PREG_SPLIT_DELIM_CAPTURE Falls dieses Flag gesetzt ist, werden auch die eingeklammerten Ausdrücke des Trennsymbol-Suchmusters erfasst und zurückgegeben. PREG_SPLIT_OFFSET_CAPTURE Falls dieses Flag gesetzt ist, wird mit jeder gefundenen Übereinstimmung der dazugehörige Versatz in der Zeichenkette zurückgegeben. Beachten Sie, dass dies die Rückgabewerte in einem Array dahingehend ändert, dass jedes Element ein Array ist, das aus der übereinstimmenden Zeichenkette als Element 0 und deren Stelle in subject als Element 1 besteht. Hinweis: Falls keine Übereinstimmungen gefunden wurden, wird ein Array mit nur einem Element zurückgegeben, das die übergebene Zeichenkette enthält. Beispiel 1 - eine Zeichenkette in ihre Bestandteile zerlegen <?php // zerlegt die Zeichenkette an Stellen mit beliebiger Anzahl von Kommata oder Leerzeichen, die " ", \r, \t, \n und \f umfassen /* \f ... Seitenvorschub \n ... Zeilenvorschub \r ... Wagenrücklauf \t ... horizontaler Tabulator */ $schluesselwoerter = preg_split("/[\s,]+/", "hypertext language, programming"); print "<pre>"; print_r($schluesselwoerter); print "</pre>"; ?> Ausgabe 1 Array ( [0] => hypertext [1] => language [2] => programming ) Beispiel 2 - eine Zeichenkette in einzelne Zeichen zerlegen <?php $str = 'Zeichenkette'; $zeichen = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY); print "<pre>"; print_r($zeichen); print "</pre>"; ?> Ausgabe 2 Array ( [0] => Z [1] => e [2] => i [3] => c [4] => h [5] => e [6] => n [7] => k [8] => e [9] => t [10] => t [11] => e ) Beispiel 3 - eine Zeichenkette in Übereinstimmungen mit dem Suchmuster und deren Versatz zerlegen <?php $str = 'hypertext language programming'; $zeichen = preg_split('/ /', $str, -1, PREG_SPLIT_OFFSET_CAPTURE); print "<pre>"; print_r($zeichen); print "</pre>"; ?> Ausgabe 3 Array ( [0] => Array ( [0] => hypertext [1] => 0 ) [1] => Array ( [0] => language [1] => 10 ) [2] => Array ( [0] => programming [1] => 19 ) ) oben  preg_quote(string $str [, string $delimiter = NULL ]) preg_quote() maskiert Zeichen regulärer Ausdrücke und setzt damit einen Backslash vor jedes Zeichen von str, das zur Syntax eines regulären Ausdrucks gehört. Das ist nützlich, wenn Sie einen Text nach Übereinstimmungen mit einer zur Laufzeit erzeugten Zeichenkette durchsuchen müssen, die spezielle RegEx-Zeichen enthalten könnte. Gibt die maskierte Zeichenkette zurück. Hinweis: Es ist zu beachten, dass der Backslash (/) kein besonderes RegEx-Zeichen ist. Weiter ist zu beachten, dass preg_quote() nicht dazu gedacht ist, auf die $replacement Zeichenkette(n) von preg_replace() etc. angewendet zu werden. Fall Sie die Leistung regulärer Ausdrücke nicht benötigen (einfache Zeichenketten), können Sie stattdessen die schnelleren und einfacheren Alternativen wie explode(), implode(), str_replace() verwenden. Spezielle Zeichen regulärer Ausdrücke sind: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : - # Parameter-Liste str ... die zu durchsuchende Zeichenkette delimiter ... Falls der optionale delimiter angegeben wurde, wird dieser ebenfalls maskiert. Das ist nützlich, um den Begrenzer zu maskieren, der von den PCRE-Funktionen benötigt wird. Der Backslash (/) ist der am häufigsten verwendete Begrenzer. Beispiel 1 <?php $schluesselwoerter = '$40 f&uuml;r einen G3/400'; $schluesselwoerter = preg_quote($schluesselwoerter, '/'); echo $schluesselwoerter; // liefert \$40 für einen G3\/400 ?> Ausgabe 1 \$40 für einen G3\/400 Beispiel 2 - Kursivdruck eines Wortes in einem Text <?php // In diesem Beispiel wird preg_quote($wort) verwendet, damit die Asterisks (*) für den regulären Ausdruck keine spezielle Bedeutung haben. $text = "Dieses Buch ist *sehr* schwer zu finden."; $wort = "*sehr*"; $text = preg_replace ("/" . preg_quote($wort) . "/", "<i>" . $wort . "</i>", $text); echo $text; ?> Ausgabe 2 Dieses Buch ist *sehr* schwer zu finden. Beispiel 3 - Logbuch nach bestimmten Einträgen durchsuchen <?php // [...] $SESSIONID=session_id(); $log_book_name="logbook.txt"; if(file_exists($log_book_name)) { $log_book_array=@file($log_book_name); for($x=0; $x<count($log_book_array); $x++) { if(preg_match("/" . $SESSIONID . "/",$log_book_array[$x])) { echo "tue etwas"; } // der Slash (/) wird hier von preg_quote zusaetzlich mit beruecksichtigt if(preg_match("/" . preg_quote($_SERVER['HTTP_USER_AGENT'], '/') . "/",$log_book_array[$x])) { echo "tue etwas"; } // preg_quote versieht die folgenden Zeichen mit einem Backslash: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : - if(preg_match("/" . preg_quote($_SERVER['REMOTE_ADDR']) . "/",$log_book_array[$x])) { echo "tue etwas"; } } } else { echo "LOGBOOK NOT FOUND!"; } // [...] ?> oben  preg_grep(string $pattern , array $input [, int $flags = 0 ]) Gibt ein Array zurück, das aus den Elementen des input -Arrays besteht, die auf das angegebene Suchmuster pattern passen. Gibt ein Array zurück, das mit den Schlüsseln des input -Arrays indiziert ist. Parameter-Liste pattern : der Ausdruck, nach dem gesucht werden soll, als Zeichenkette input : das Eingabe-Array flags : Falls auf PREG_GREP_INVERT gesetzt, gibt die Funktion die Elemente des Eingabe-Arrays zurück, die nicht auf das angegebene Suchmuster pattern passen. Beispiel <?php // liefert alle Array-Elemente, // die Fließkommazahlen enthalten $array = array(1.01, 2, 3, 0.123); $fl_array = preg_grep("/^(\d+)?\.\d+$/", $array); print "<pre>"; print_r($fl_array); print "</pre>"; ?> Ausgabe Array ( [0] => 1.01 [3] => 0.123 ) oben  print() Mit print() wird der String (arg) ausgegeben. Da es sich bei print() um keine Funktion (sondern ein Sprachkonstrukt) handelt, kann man die Klammern auch einfach weglassen. Der Hauptunterschied zu echo besteht darin, dass print nur ein einziges Argument entgegen nimmt, und immer 1 zurückgibt. Beispiel 1 <?php $string = "PHP 3/4 - Die Befehlsreferenz"; echo $string; echo "<br>"; print "PHP 3/4 <br>"; print "Auch über mehrere <br>Zeilen anwendbar"; ?> Ausgabe 1 PHP 3/4 - Die Befehlsreferenz PHP 3/4 Auch über mehrere Zeilen anwendbar Beispiel 2 <?php print("Hallo Welt"); print "<br>"; print "print() funktioniert auch ohne Klammern."; print "<br>"; print "Dies umfasst mehrere Zeilen. Die Zeilenumbrüche werden ebenfalls ausgegeben"; print "<br>"; print "Dies umfasst\nmehrere Zeilen. Die Zeilenumbrüche werden\nebenfalls ausgegeben."; print "<br>"; print "Escape-Zeichen werden \"so\" geschrieben."; print "<br>"; // Sie können in einer print-Anweisung auch Variablen benutzen $foo = "foobar"; print "<br>"; $bar = "barbaz"; print "<br>"; print "foo ist $foo"; // foo ist foobar print "<br>"; // Sie können auch Arrays verwenden $bar = array("value" => "foo"); print "<br>"; print "Das ist {$bar['value']} !"; // Das ist foo ! print "<br>"; // Einfache Anführungsstriche geben den Variablennamen aus, nicht den Inhalt print 'foo ist $foo'; // foo ist $foo print "<br>"; // Benutzen Sie keine anderen Zeichen, können Sie auch nur // Variablen ausgeben print $foo; // foobar print "<br>"; print <<<END Dies verwendet die "here document" Syntax zur Ausgabe von mehreren Zeilen mit \$Variablen-Interpolation.<br>Beachten Sie, dass das "here document" Endezeichen in einer Zeile nur mit einem Semikolon ohne Whitespaces stehen muss! END; ?> Ausgabe 2 Hallo Welt print() funktioniert auch ohne Klammern. Dies umfasst mehrere Zeilen. Die Zeilenumbrüche werden ebenfalls ausgegeben Dies umfasst mehrere Zeilen. Die Zeilenumbrüche werden ebenfalls ausgegeben. Escape-Zeichen werden "so" geschrieben. foo ist foobar Das ist foo ! foo ist $foo foobar Dies verwendet die "here document" Syntax zur Ausgabe von mehreren Zeilen mit $Variablen-Interpolation. Beachten Sie, dass das "here document" Endezeichen in einer Zeile nur mit einem Semikolon ohne Whitespaces stehen muss! oben  printf(string $format [, mixed $... ]) Mit printf() kann man Parameter (args) nach einem bestimmten Muster (format) formatieren und ausgeben lassen. Dabei beschreibt das Muster genau, wo und wie die Parameter zu formatieren sind. Außerdem gibt die Funktion die Länge des Ergebnisstrings zurück. Mögliche Formatierungsangaben: % - Legt die zu formatierende Stelle fest. b - Der Wert wird als Integer interpretiert und binär ausgegeben. c - Der Wert wird als Integer interpretiert und als ASCII-Zeichen ausgegeben. d - Der Wert wird als Integer interpretiert und als Dezimalzahl ausgegeben. e - Der Parameter wird als Zahl in wissenschaftlicher Schreibweise (z.B. 1.2e+2) behandelt. f - Der Wert wird als Double interpretiert und als Fließkommazahl ausgegeben. o - Der Wert wird als Integer interpretiert und als Oktalzahl ausgegeben. s - Der Wert wird als String interpretiert und als String ausgegeben. u - Der Parameter wird als Ganzzahl betrachtet und als vorzeichenlose Dezimalzahl ausgegeben. x - Der Wert wird als Integer interpretiert und als Hexadezimalwert in Kleinbuchstaben ausgegeben. X - Der Wert wird als Integer interpretiert und als Hexadezimalwert in Großbuchstaben ausgegeben. Beispiel 1 <?php $n = 43951789; $u = -43951789; $c = 65; // ASCII 65 is 'A' // Beachten Sie das doppelte %%, dies gibt ein '%'-Zeichen aus printf("%%b = '%b'\n", $n); // Binärdarstellung print '<br>'; printf("%%c = '%c'\n", $c); // Ausgabe des ASCII-Zeichens; gleicht der chr() Funktion print '<br>'; printf("%%d = '%d'\n", $n); // Standard-Integerdarstellung print '<br>'; printf("%%e = '%e'\n", $n); // Wissenschaftliche Notation print '<br>'; printf("%%u = '%u'\n", $n); // vorzeichenlose Integerdarstellung einer positiven Zahl print '<br>'; printf("%%u = '%u'\n", $u); // vorzeichenlose Integerdarstellung einer negativen Zahl print '<br>'; printf("%%f = '%f'\n", $n); // Fließkommazahldarstellung print '<br>'; printf("%%o = '%o'\n", $n); // Oktaldarstellung print '<br>'; printf("%%s = '%s'\n", $n); // Stringdarstellung print '<br>'; printf("%%x = '%x'\n", $n); // Hexadezimaldarstellung (Kleinbuchstaben) print '<br>'; printf("%%X = '%X'\n", $n); // Hexadezimaldarstellung (Großbuchstaben) print '<br>'; printf("%%+d = '%+d'\n", $n); // Vorzeichenangabe für positive Integerzahlen print '<br>'; printf("%%+d = '%+d'\n", $u); // Vorzeichenangabe für negative Integerzahlen ?> Ausgabe 1 %b = '10100111101010011010101101' %c = 'A' %d = '43951789' %e = '4.395179e+7' %u = '43951789' %u = '18446744073665599827' %f = '43951789.000000' %o = '247523255' %s = '43951789' %x = '29ea6ad' %X = '29EA6AD' %+d = '+43951789' %+d = '-43951789' Beispiel 2 <?php $s = 'monkey'; $t = 'many monkeys'; printf("[%s]\n", $s); // normale rechtsbündige Ausgabe print '<br>'; printf("[%10s]\n", $s); // rechtsbündige Ausgabe, mit Leerzeichen aufgefüllt print '<br>'; printf("[%-10s]\n", $s); // linksbündige Ausgabe, mit Leerzeichen aufgefüllt print '<br>'; printf("[%010s]\n", $s); // auffüllen mit Nullen funktioniert auch bei Strings print '<br>'; printf("[%'#10s]\n", $s); // Verwendung des benutzerdefinierten Auffüllzeichens '#' print '<br>'; printf("[%10.9s]\n", $t); // rechtsbündige Ausgabe mit Abschneiden überflüssiger Buchstaben nach der achten Stelle print '<br>'; printf("[%-10.9s]\n", $t); // linksbündige Ausgabe mit Abschneiden überflüssiger Buchstaben nach der achten Stelle ?> Ausgabe 2 [monkey] [ monkey] [monkey ] [0000monkey] [####monkey] [ many monk] [many monk ] oben  print_r(mixed $expression [, bool $return = FALSE]) Mit dem Befehl print_r() können Variablen (meist Arrays) in lesbarer und vorformatierter Form ausgegeben werden. Der optionale Parameter return sorgt dafür, das die Ausgabe zwischengespeichert wird. Bei der Ausgabe von Arrays wird nicht nur der Wert, sondern auch der Schlüssel mit ausgegeben. Beim Aufruf von print_r() wird der interne Array-Zeiger auf das letzte Element gesetzt. Mit der Funktion reset() kann der interne Array-Zeiger wieder auf das erste Element (Anfang) gesetzt werden. Hinweis: Die Funktion print_r() ist nur hilfreich während der Entwicklung von PHP-Skripts, um den Inhalt von Arrays zu überprüfen. Siehe auch: var_dump() Parameter-Liste expression ... der auszugebende Ausdruck return ... ist diese Option auf TRUE gesetzt, so übergibt print_r() die Information an eine Variable; es erfolgt keine direkte Ausgabe Beispiel <?php $var = array('name' => 'Damir', 'SELFPHP', '4'=>'24', 99); $var2 = array(6, 2, 4, 'new' => array ( 12, 13, 14 )); print "<pre>"; print_r ( $var ); print "</pre>"; $result = print_r ( $var2, true ); print "<pre>"; echo $result; print "</pre>"; ?> Ausgabe Array ( [name] => Damir [0] => SELFPHP [4] => 24 [5] => 99 ) Array ( [0] => 6 [1] => 2 [2] => 4 [new] => Array ( [0] => 12 [1] => 13 [2] => 14 ) )
Seitenanfang 

Q

quotemeta oben  quotemeta(string str) Mit quotemeta() versieht man alle Meta-Zeichen innerhalb eines Strings (str) mit einem Backslash (\). Gibt die Zeichenkette mit gequoteten Metazeichen zurück oder FALSE falls eine leere Zeichenkette als str übergeben wurde. Siehe auch: addslashes() htmlentities() htmlspecialchars() stripslashes() Folgende Zeichen werden erkannt: . - Punkt \ - Backslash + - Pluszeichen * - Sternchen ? - Fragezeichen [] - eckige Klammern ^ - Dach () - runde Klammern $ - Dollar-Zeichen Beispiel <?php $var = ". + * ? ^ $ \ [ ] ( )"; echo quotemeta($var); ?> Ausgabe \. \+ \* \? \^ \$ \\ \[ \] \( \)
Seitenanfang 

R

rand readdir readfile rmdir rename rewinddir rewind require round oben  rand([ int min [, int max]]) Diese Funktion liefert eine Pseudo-Zufallszahl zwischen min und max (inclusive). Ohne die optionalen Parameter min und max liefert rand() eine Pseudo-Zufallszahl zwischen 0 und einem plattformabhängigen Maximalwert, der mit getrandmax() ermittelt werden kann. Wenn Sie z.B. einen Zufallswert zwischen 5 und 15 benötigen so wäre der Aufruf dafür rand(5, 15). Der Rückgabewert ist ein Pseudozufallswert zwischen min (oder 0) und max (oder getrandmax(), inklusive). Der Bereich zwischen min und max muss innerhalb von getrandmax() liegen; d.h. (max - min) <= getrandmax(); ansonsten wird rand() möglicherweise Zufallszahlen schlechter Qualität zurückgeben. Es besteht keine Notwendigkeit mehr, den Zufallsgenerator für Zahlen mit srand() oder mt_srand() zu füttern, das geschieht automatisch. Hinweis: Ab PHP 7.1.0 wurde rand() zu einem Alias von mt_rand(). Die Funktion erzeugt keine kryptographisch sicheren Werte und sollte nicht für kryptographische Zwecke verwendet werden. Parameter-Liste min ... Der niedrigste zurückzugebende Wert (Vorgabe: 0) max ... Der höchste zurückzugebende Wert (Vorgabe: getrandmax()) Beispiel <?php // unter Windows erhaelt man mit getrandmax() den Wert: 32767 // unter Unix/Linux erhaelt man mit getrandmax() den Wert: 2147483647 echo rand() . "\n"; echo "<br>"; echo rand() . "\n"; echo "<br>"; echo rand(5, 15); echo "<br>"; echo rand(0,date("s")); echo getrandmax(); ?> Ausgabe 1617539164 450755966 8 22147483647 oben  readdir([ resource $dir_handle ]) Mit readdir() kann man sich den kompletten Inhalt eines Verzeichnisses (dir_handle) auflisten lassen. Die Einträge werden in der Reihenfolge zurück gegeben, in der sie innerhalb des Filesystems angelegt wurden. Gibt bei Erfolg den Namen des Eintrags zurück. Im Fehlerfall wird FALSE zurückgegeben. Hinweis: Diese Funktion kann sowohl das boolsche FALSE zurückliefern, als auch einen nicht-boolschen Wert, welcher zu FALSE ausgewertet wird. Beachten Sie, dass auch die Punkt-Dateien "." und ".." aufgelistet werden. Wenn Sie das nicht wünschen, müssen Sie die Ausgabe mit einer if-Abfrage filtern. Siehe auch: opendir() closedir() is_dir() Parameter-Liste dir_handle ... Das Verzeichnis-Handle resource, das zuvor mit opendir() geöffnet wurde. Wenn das Verzeichnis-Handle nicht angegeben ist, wird dasjenige verwendet, das auf das zuletzt mittels opendir() geöffnete Verzeichnis zeigt. Beispiel 1 <?php $dir = "../"; // Öffnen eines bekannten Verzeichnisses und danach seinen Inhalt einlesen if (is_dir($dir)) { if ($dh = opendir($dir)) { // Das ist der korrekte Weg, ein Verzeichnis zu durchlaufen. while (($file = readdir($dh)) !== false) { echo "filename: $file : filetype: " . filetype($dir . $file) . "<br>\n"; } closedir($dh); } } /* Der Rückgabewert von readdir() muss identisch (inhaltlich und typgleich) zu FALSE sein, andernfalls würde jeder Verzeichnis-Eintrag, dessen Name als FALSE ausgewertet wird, das Durchlaufen der Schleife beenden (z.B. ein Verzeichnis namens "0"). */ ?> Hinweis: Mitunter kann es vorkommen, dass die korrekte Schreibweise um ein Verzeichnis zu durchlaufen, einen auch mit dem @-Zeichnen nicht unterdrückbaren Fehler hervorruft. In diesem Fall kann man es mit der veralteten Schreibweise versuchen. <?php $dir = "../"; // Öffnen eines bekannten Verzeichnisses und danach seinen Inhalt einlesen if (is_dir($dir)) { if ($dh = opendir($dir)) { // Das ist der veraltete Weg, ein Verzeichnis zu durchlaufen. while ($file = readdir($dh)) { echo "filename: $file : filetype: " . filetype($dir . $file) . "<br>\n"; } closedir($dh); } } ?> Beispiel 2 <?php $verz = opendir('.'); while(($file = readdir ($verz)) !== false) { echo "$file <br>"; } closedir($verz); ?> Ausgabe 2 . .. php.php index.php Beispiel 2 <?php $verz=opendir('.'); while(($file = readdir ($verz)) !== false) { if($file != "." && $file != "..") echo "$file <br>"; } closedir($verz); ?> Ausgabe 2 php.php index.php oben  readfile(string $filename [, bool $use_include_path = FALSE [, resource $context ]]) Mit readfile() kann man eine Datei (filename) einlesen und im Browser ausgeben. Der optionale Parameter use_include_path kann auf 1 gesetzt werden, wenn die Funktion auch im Include-Pfad nach der Datei suchen soll. Als Ergebnis gibt diese Funktion im Erfolgsfall die Größe der Datei zurück, sonst false und eine eine E_WARNING. Siehe auch: file() fopen() Parameter-Liste filename ... Der Name der Datei, die gelesen werden soll. Folgende Verbindungsmöglichkeiten können Sie im Parameter filename angeben: "http://" - Öffnen per http Alles andere - Öffnen vom lokalen Dateisystem use_include_path ... Sie können optional den zweiten Parameter benutzen und diesen auf TRUE setzen, wenn Sie auch im include_path nach der Datei suchen möchten. context ... context ist ein optionaler Parameter. PHP bietet eine Menge von Kontextoptionen und -parametern, die in Zusammenhang mit allen Dateisystem- und Streamwrappern genutzt werden können. Ein Kontext wird mit stream_context_create() erzeugt. Optionen werden mit stream_context_set_option() gesetzt und Parameter mit stream_context_set_params(). Beispiel Hinweis: Die PHP-Seite darf nur den nachfolgenden Programm-Code enthalten (kein HTML-Code). <?php $file = 'monkey.gif'; if(file_exists($file)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.basename($file).'"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); readfile($file); exit; } ?> oben  rmdir(string $dirname [, resource $context ]) Versucht das durch dirname angegebene Verzeichnis zu löschen. Das Verzeichnis muss dafür leer sein und PHP muss die notwendigen Rechte besitzen, ansonsten wird ein E_WARNING geworfen. Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Siehe auch: is_dir() mkdir() Parameter-Liste dirname ... Pfad zum Verzeichnis. context ... context ist ein optionaler Parameter. PHP bietet eine Menge von Kontextoptionen und -parametern, die in Zusammenhang mit allen Dateisystem- und Streamwrappern genutzt werden können. Ein Kontext wird mit stream_context_create() erzeugt. Optionen werden mit stream_context_set_option() gesetzt und Parameter mit stream_context_set_params(). Beispiel <?php $dir = "./tmp"; if(is_dir($dir)) { if($verz = @rmdir($dir)) { echo $verz; } else { echo "Verzeichnis ist nicht leer"; } } else { echo "Verzeichnis nicht gefunden"; } ?> Ausgabe 1 oben  rename(string $oldname , string $newname [, resource $context]) Mit rename() kann man versuchen, eine Datei oder ein Verzeichnis (oldname) umzubenennen. Der neue Name steht im Parameter newname. Wenn die Funktion den Namen der Datei ändern konnte, gibt sie true zurück, sonst false. Siehe auch: copy() unlink() Parameter-Liste oldname ... Der alte Name. newname ... Der neue Name. Hinweis: Wird ein Verzeichnis umbenannt und newname exisitiert bereits, so wird eine Warnung erzeugt. context ... context ist ein optionaler Parameter. PHP bietet eine Menge von Kontextoptionen und -parametern, die in Zusammenhang mit allen Dateisystem- und Streamwrappern genutzt werden können. Ein Kontext wird mit stream_context_create() erzeugt. Optionen werden mit stream_context_set_option() gesetzt und Parameter mit stream_context_set_params(). Beispiel <?php if(file_exists("./selfphp.htm")) { if(rename("selfphp.htm","selfphp.php")) { echo "Datei wurde umbenannt"; } else { echo "Datei konnte nicht umbenannt werden"; } } else { echo "Datei konnte nicht gefunden werden"; } ?> Ausgabe Datei wurde umbenannt oben  rewinddir([ resource $dir_handle ]) Mit rewinddir() kann man ein bestehendes dir_handle auf den Anfang (Reset) zurücksetzen. Das bedeutet, dass die Funktion readdir() beim nächsten Aufruf die Dateien wieder ab dem ersten Eintrag des Verzeichnisses auflistet. Im Erfolgsfall wird NULL, ansonsten wird FALSE zurückgegeben. Siehe auch: readdir() Parameter-Liste dir_handle ... Das Verzeichnis-Handle resource, das zuvor mit opendir() geöffnet wurde. Wenn das Verzeichnis-Handle nicht angegeben ist, wird dasjenige verwendet, das auf das zuletzt mittels opendir() geöffnete Verzeichnis zeigt. Beispiel <?php $verz=opendir('.'); while($file = readdir ($verz)) { if($file != "." && $file != "..") echo "$file <br>"; } rewinddir($verz); while($file = readdir ($verz)) { if($file != "." && $file != "..") echo "$file <br>"; } closedir($verz); ?> oben  rewind(resource $handle) Mit rewind() kann man die Position des Dateizeigers auf den Anfang der Datei (fp) setzen. Es ist darauf zu achten, dass es sich bei fp um einen gültigen Dateizeiger handeln muss. Im Erfolgsfall gibt die Funktion true zurück, sonst false. Hinweis: Wurde die Datei im Anfüge-Modus ("a" oder "a+") geöffnet, werden unabhängig von der Position des Dateizeigers alle zu schreibenden Daten angehängt. Siehe auch: fread() ftell() fwrite() Parameter-Liste handle ... Der Dateizeiger muss gültig sein und auf eine Datei zeigen, die zuvor erfolgreich durch fopen() geöffnet wurde. Beispiel 1 <?php $fp = fopen("members.txt","r"); for($x=1;$x<4;$x++) { echo "$x: "; echo fgets($fp,50); echo "<br>"; } for($x=4;$x<7;$x++) { rewind($fp); echo "$x: "; echo fgets($fp,50); echo "<br>"; } fclose($fp); ?> Ausgabe 1 1: Dieser Text wird gespeichert 2: 3: 4: Dieser Text wird gespeichert 5: Dieser Text wird gespeichert 6: Dieser Text wird gespeichert Beispiel 2 <?php $file = "./counter.txt"; if(file_exists($file)) { $handle = fopen($file, 'r+'); fwrite($handle, 'Wirklich langer Satz.'); rewind($handle); fwrite($handle, 'Foo'); rewind($handle); echo fread($handle, filesize($file)); fclose($handle); } ?> Ausgabe 2 Fooklich langer Satz. oben  require() Der require-Befehl hat zur Folge, dass vom PHP-Parsing-Modus in den HTML-Modus geschaltet wird und die angegebene Datei eingelesen und ausgewertet wird. Ist innerhalb der zu inkludierenden Datei PHP-Code, so muss dieser in gültigen PHP-Start- (<?php) und End-Tags (?>) eingebunden werden. Sie können den require-Befehl nicht innerhalb von Schleifen nutzen, da die Datei nur einmal eingelesen wird, sogar falls der require-Befehl in einem Zweig steht, der nicht ausgeführt wird - nutzen Sie in diesem Fall include(). Hinweis: require entspricht im Wesentlichen include, wirft aber im Fehlerfall einen E_COMPILE_ERROR Fehler. Es beendet also die Programmausführung während include nur einen Hinweis (E_WARNING) generiert und so die weitere Programmausführung gestattet. Siehe auch: include() Beispiel <?php require("./php.php"); ?> oben  round(float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]]) Rundet den Parameter val auf die mit precision angegebene Anzahl von Nachkommastellen. precision kann dabei auch null (Vorgabewert) oder negativ sein. So wird bei einer Stellenzahl von -1 z.B. auf volle Zehner gerundet. Es wird der auf die angegebene precision gerundete Wert als float zurückgegeben. Siehe auch: floor() Parameter-Liste val ... Der zu rundende Wert. precision ... Auf wie viele Nachkommastellen gerundet werden soll. Ist die precision positiv, erfolgt die Rundung nach dem Dezimalpunkt. Ist die precision negativ, erfolgt die Rundung vor dem Dezimalpunkt. Ist der Absolutwert der precision größer oder gleich der Anzahl der Stellen, ist das Rundungsergebnis gleich 0. mode ... Eine der folgenden Konstanten kann verwendet werden, um den Rundungsmodus festzulegen. PHP_ROUND_HALF_UP ... Rundet val auf precision Dezimalstellen weg von Null. Somit wird 1.5 zu 2 und -1.5 zu -2 (Default-Wert). PHP_ROUND_HALF_DOWN ... Rundet val auf precision Dezimalstellen hin zu Null. Somit wird 1.5 zu 1 und -1.5 zu -1. PHP_ROUND_HALF_EVEN ... Rundet val auf precision Dezimalstellen zum nächsten geraden Wert. PHP_ROUND_HALF_ODD ... Rundet val auf precision Dezimalstellen zum nächsten ungeraden Wert. Beispiel <?php echo round(22.86); echo "<br>"; echo round(22.25); echo "<br>"; echo round(22.86, 1); echo "<br>"; echo round(22.25, 1); echo "<br>"; echo round(22.86, 1, PHP_ROUND_HALF_EVEN); echo "<br>"; echo round(22.25, 1, PHP_ROUND_HALF_EVEN); ?> Ausgabe 23 22 22.9 22.3 22.9 22.2
Seitenanfang 

S

Session-Funktionen session_start session_name session_write_close session_destroy session_id session_unset setcookie show_source similar_text sizeof sleep stat strcasecmp strcmp strrchr strpos strrpos stristr strstr strlen substr substr_count stripslashes stripcslashes strip_tags str_replace strtolower strtoupper switch
oben  Session-Funktionen Das Ziel einer Session liegt darin, dass Webseiten-Besucher eine einmalige ID-Nummer zugewiesen wird. Diese ID-Nummer gilt solange, bis diese Session-Nummer wegen Untätigkeit (Timeout) oder über ein Skript gelöscht wird. Die Session-Id wird in einen Cookie oder in einer GET-Variablen gespeichert. In der superglobalen Variablen $_SESSION (assoziatives Array) können weitere Daten gespeichert werden. Den Speicherort der Session-Datei auf dem Server, kann man der Datei php.ini entnehmen (siehe: phpinfo(); print ini_get('session.save_path'); oder print session_save_path();). Alternativ kann man die Session-Dateien auch in einen anderes Verzeichnis ablegen. Dazu ist im Wurzel- bzw. Startverzeichnis der Webseite eine Datei unter den Namen php.ini zu speichern, soweit dies vom Webhoster gestattet wird. Siehe auch: Anhang: PHP-Variablen Beispiel 1 - Aufbau einer alternativen Datei php.ini Im Wurzelverzeichnis der Webseiten-Domain (htdocs) ist ein Verzeichnis tmp anzulegen. Den PHP-Webseiten muss der Lese- und Schreibzugriff auf dieses Verzeichnis erlaubt werden. Der Pfad (session.save_path) ist entsprechen anzupassen (siehe: print getcwd();). Die Verwaltung (Löschung alter Session-Dateien) obliegt in diesem Fall dem Webseiten-Inhaber und nicht mehr dem Webhoster. Datei: php.ini [Session] ; Argument passed to save_handler. In the case of files, this is the path ; where data files are stored. Note: Windows users have to change this ; variable in order to use PHP's session functions. session.save_path = /mnt/web803/c4/78/12000024/htdocs/tmp ; End: Beispiel 2 - Funktion: Löschung von alten Session-Dateien Das PHP-Skript benötigt 2 Verzeichnisse (./inc und ./»Verzeichnis mit den alten Dateien«). Oberhalb des Verzeichnisses ./inc befindet sich die Datei start.php. Beim Aufruf der Datei start.php bzw. index.php wird das Verzeichnis tmp überprüft und die alten Session-Dateien automatisch gelöscht. Datei: inc_delete_old_data.php <?php // +++ ANFANG KONFIGURATION +++ $directory_old_data = "../tmp"; // Verzeichnis mit den alten Dateien $time_to_life = 3600 * 4; // Lebenszeit der alten Dateien; default: 3600 * 4 (4 Stunden) // +++ ENDE KONFIGURATION +++ if(empty($include_key)) exit; // verhindert die Ausfuehrung der include-Datei bei einem direkten Aufruf if(@is_dir($directory_old_data)) { $current_time = time(); $handle = @opendir($directory_old_data); while($read_file = @readdir($handle)) { if($read_file != "." && $read_file != "..") { $read_file_path = $directory_old_data . "/" . $read_file; if(@is_file($read_file_path)) { $file_time_lag = $current_time - filemtime($read_file_path); if($file_time_lag > $time_to_life) @unlink($read_file_path); } } } clearstatcache(); @closedir($handle); } ?> Datei: start.php <?php $inc_filename = "inc_delete_old_data.php"; $inc_file_path = "./inc/" . $inc_filename; if(file_exists($inc_file_path)) { $include_key=1; // siehe: inc_delete_old_data.php include($inc_file_path); } ?> <!doctype html> <html> <head> <title>LOESCHUNG VON ALTEN DATEIEN</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <style type="text/css"> <!-- body { margin:10px 15px 15px 10px; font-family:"Nimbus Sans L",Arial; background-color:#FFFFFF; color:#000000; } --> </style> </head> <body> <h2>AUFRUFENDE DATEI</h2> </body> </html> oben  session_start([ array $options = array() ]) session_start() erzeugt eine Session oder nimmt die aktuelle wieder auf, die auf der Session-Kennung basiert, die mit einer GET- oder POST-Anfrage oder mit einem Cookie übermittelt wurde. Um eine benannte Session zu verwenden, rufen Sie session_name() auf, bevor Sie session_start() aufrufen. Falls die Session erfolgreich gestartet wurde, gibt diese Funktion TRUE zurück, andernfalls FALSE. Für die Übermittlung der Session-ID gibt es zwei Methoden, eine Session-ID zu übermitteln: Cookies und URL-Parameter (SID). Das Session-Modul unterstützt beide Methoden. Cookies sind optimal, aber da sie nicht immer zur Verfügung stehen, wird auch noch eine Alternative angeboten. Die zweite Methode hängt die Session-ID direkt an die URLs. PHP ist in der Lage, Links transparent umzuwandeln. Ist die Laufzeit-Option session.use_trans_sid aktiviert, werden relative URIs automatisch so geändert, dass sie die Session-ID enthalten. Alternativ kann die Konstante SID verwendet werden, die definiert ist, nachdem die Session gestartet wurde. Falls der Client kein geeignetes Session-Cookie gesendet hat, hat sie die Form session_name=session_id. Andernfalls wird sie zu einer leeren Zeichenkette erweitert. Aus diesem Grund kann sie bedingungslos in URLs eingebettet werden. Hinweis: session_start() sollte am Anfang der Datei stehen, bevor es zu einer Ausgabe über normale HTML-Befehle oder PHP-Befehle wie echo, print etc. kommt. Ansonsten wird sehr wahrscheinlich die Fehlermeldung «Warning: Cannot send session cache limiter ... » auftauchen. Vor der PHP-Deklaration <?php sollte auch keine Leerzeile und nicht einmal ein Leerzeichen stehen. Siehe auch: session_name() session_write_close() Parameter-Liste options ... Als optionaler Parameter kann ein assoziatives Array mit Optionen angegeben werden, das die aktuell gesetzten Sessionkonfigurationsdirektiven überschreiben. Die Schlüssel sollten nicht das session.-Präfix beinhalten. Beispiel 1 <?php if(session_start()) echo "Session wurde erstellt!"; ?> Ausgabe 1 Session wurde erstellt! Beispiel 2 Nach dem Aufruf von seite1.php enthält automatisch auch die zweite Seite, seite2.php, die Session-Daten. <?php // seite1.php session_start(); echo 'Willkommen auf Seite #1'; $_SESSION['farbe'] = 'grün'; $_SESSION['tier'] = 'Spinne'; $_SESSION['zeit'] = time(); // Funktioniert, falls das Session-Cookie akzeptiert wurde echo '<br /><a href="seite2.php">Seite 2</a>'; // Oder die Session-ID mit übergeben, für den Fall, dass sie benötigt wird echo '<br /><a href="seite2.php?' . SID . '">Seite 2</a>'; ?> Ausgabe 2 Willkommen auf Seite #1 Seite 2 Seite 2 Ausgabe 2 - Seitenquelltext Willkommen auf Seite #1<br /><a href="seite2.php">Seite 2</a><br /><a href="seite2.php?">Seite 2</a> Beispiel 3 <?php // seite2.php session_start(); echo 'Willkommen auf Seite #2;' . "<br>"; echo $_SESSION['farbe'] . "<br>"; // grün echo $_SESSION['tier'] . "<br>"; // Spinne echo date('d.m.Y H:i:s', $_SESSION['zeit']) . "<br>"; // Sie können auch hier, genauso wie bei seite1.php, SID verwenden echo '<a href="seite1.php">Seite 1</a>'; ?> Ausgabe 3 Willkommen auf Seite #2; grün Spinne 15.03.2021 11:02:49 Seite 1 Ausgabe 3 - Seitenquelltext Willkommen auf Seite #2;<br>grün<br>Spinne<br>15.03.2021 11:02:49<br><a href="seite1.php">Seite 1</a> Beispiel 4 - Cookie-Gültigkeitsdauer überschreiben (Optionen an session_start() übergeben) Hinweis: Um Cookie-basierte Sessions zu verwenden muss session_start() aufgerufen werden, bevor irgend etwas an den Browser geschickt wird. <?php // Einen persistenten Cookie senden, der einen Tag lang gültig ist. session_start(['cookie_lifetime' => 86400]); ?> Beispiel 5 - Session lesen und schließen <?php // Sofern wir wissen, dass wir keine Daten zu verändern brauchen, // können wir die Session unmittelbar nach dem Auslesen automatisch // schließen, um eine Sperre für die Session zu vermeiden und // andere Seiten während der Zeit am Zugriff nicht zu behindern. session_start([ 'cookie_lifetime' => 86400, 'read_and_close' => true]); ?> Beispiel 6 - Zählen der Seitenaufrufe eines einzelnen Benutzers Das Beispiel demonstriert, wie eine Variable registriert wird und wie unter Verwendung einer SID korrekt auf eine andere Seite verwiesen wird. <?php session_start(); if(empty($_SESSION['zaehler'])) { $_SESSION['zaehler'] = 1; } else { $_SESSION['zaehler']++; } ?> <p> Hallo Besucher, Sie haben diese Seite <?php echo $_SESSION['zaehler']; ?> mal aufgerufen. </p> <p> Hier gehts <a href="nextpage.php?<?php echo htmlspecialchars(SID); ?>">weiter</a>. </p> Die Funktion htmlspecialchars() kann dazu verwendet werden, um bei der Ausgabe der SID (Session-ID) Angriffe zu verhindern. Die oben gezeigte Ausgabe der SID ist nicht nötig, wenn PHP mit --enable-trans-sid übersetzt wurde. Hinweis: Bei nichtrelativen URLs wird davon ausgegangen, dass sie auf externe Seiten zeigen und deshalb wird auch keine SID angehängt, weil es ein Sicherheitsrisiko wäre, die SID an einen anderen Server zu übermitteln. oben  session_name([ string $name ]) session_name() gibt den Namen der aktuellen Session zurück. Falls der Parameter name angegeben wurde, aktualisiert session_name() den Namen der Session und gibt den alten Namen der Session zurück. session_name() muss vor session_start() aufgerufen werden, damit die Session ordnungsgemäß funktioniert. Hinweis: Der Sessionname wird auf den Ausgangswert zurückgesetzt, der zu Beginn in der Variablen session.name (siehe: phpinfo()) gespeichert wurde. Deshalb muss session_name() bei jeder Anfrage aufgerufen werden, bevor session_start() aufgerufen wurde. Die Funktion gibt den Namen der aktuellen Session zurück. Wird der Parameter name übergeben, so aktualisiert die Funktion den Sessionnamen und gibt den Namen der alten Sitzung zurück. Siehe auch: session_start() session_write_close() Parameter-Liste name ... Der Sessionname referenziert den Namen der Session, der in Cookies und URLs verwendet wird (z.B. PHPSESSID). Er sollte nur alphanumerische Zeichen enthalten und sollte kurz und beschreibend sein (z.B. für Benutzer mit aktivierter Cookie-Warnung). Wenn name angegeben wird, wird der Name der aktuellen Session durch dessen Wert ersetzt. Hinweis: Der Sessionname kann nicht nur aus Zahlen bestehen, sondern muss mindestens einen Buchstaben enthalten. Andernfalls wird jedes Mal eine neue Session-ID erzeugt. Beispiel 1 <?php /* den Sessionnamen auf WebsiteID setzen */ $name_vorher = session_name ("WebsiteID"); echo "Der vorhergehende Sessionname war $name_vorher<br />"; ?> Ausgabe 1 Der vorhergehende Sessionname war PHPSESSID Beispiel 2 <?php echo session_name(); session_name("SESSION"); echo "<br>"; echo session_name(); ?> Ausgabe 2 PHPSESSID SESSION oben  session_write_close() Beendet die aktuelle Session und speichert die Session-Daten. Session-Daten werden normalerweise nach Beenden eines Skripts gespeichert, ohne dass session_write_close() aufgerufen werden muss, aber da Session-Daten gesperrt werden, um gleichzeitiges Schreiben zu verhindern, kann jeweils immer nur ein Skript auf eine Session einwirken. Bei der Verwendung von Framesets zusammen mit Sessions werden Sie merken, dass wegen dieser Sperrung ein Frame nach dem anderen geladen wird. Sie können die Zeit zum Laden aller Frames reduzieren, indem Sie die Session beenden, sobald alle Änderungen an den Session-Variablen durchgeführt sind. Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Hinweis: Die Funktion verwendet keine Parameter. Siehe auch: session_destroy() session_unset() oben  session_destroy() session_destroy() löscht alle in Verbindung mit der aktuellen Session stehenden Daten. Mit der Session zusammenhängende globale Variablen und das Session-Cookie werden nicht gelöscht. Um wieder Session-Variablen verwenden zu können, muss session_start() aufgerufen werden. Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Hinweis: Normalerweise ist es nicht erforderlich session_destroy() aufzurufen; stattdessen sollte das $_SESSION Array bereinigt werden. Um die Session komplett zu löschen, muss auch die Session-ID gelöscht werden. Wenn zum Verfolgen der Session ein Cookie benutzt wird (standardmäßige Einstellung), muss das Session-Cookie gelöscht werden. Dafür kann setcookie() verwendet werden. Die Funktion verwendet keine Parameter. Siehe auch: session_unset() session_write_close() setcookie() session_unset() Beispiel <?php // Initialisierung der Session. // Wenn Sie session_name("irgendwas") verwenden, vergessen Sie es // jetzt nicht! session_start(); // Löschen aller Session-Variablen. $_SESSION = array(); // Falls die Session gelöscht werden soll, löschen Sie auch das // Session-Cookie. // Hinweis: Damit wird die Session gelöscht, nicht nur die Session-Daten! if (ini_get("session.use_cookies")) { $params = session_get_cookie_params(); setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"] ); } // Zum Schluß, löschen der Session. session_destroy(); ?> Hinweis: Verwenden Sie session_unset() nur bei veraltetem Code, bei dem nicht $_SESSION benutzt wird. oben  session_id([ string $id ]) Die Funktion session_id() wird verwendet, um die Session-ID der aktuellen Session zu erhalten oder zu setzen. Die Konstante SID kann auch dazu verwendet werden, den aktuellen Namen und die Session-ID als Zeichenkette passend zum Anhängen an URLs zu erhalten. session_id() gibt die Session-ID der aktuellen Session zurück oder die leere Zeichenkette (""), falls es keine aktuelle Session gibt. Hinweis: Falls Session-Cookies verwendet werden und für session_id() eine id angegeben wird, wird ungeachtet dessen, ob die aktuelle Session-ID mit der neuen identisch ist, bei jedem Aufruf von session_start() ein neues Cookie gesendet. Bei nichtrelativen URLs wird davon ausgegangen, dass Sie auf externe Seiten zeigen. Da dies ein Sicherheitsrisiko wäre, die SID an einen anderen Server zu übermitteln, sollte an nichtrelativen URLs auch keine SID angehängt werden. Siehe auch: session_start() Parameter-Liste id ... Wenn id angegeben wird, wird die die aktuelle Session-ID ersetzt. session_id() muss zu diesem Zweck vor session_start() aufgerufen werden. In Abhängigkeit von der Session-Prozedur sind in der Session-ID nicht alle Zeichen erlaubt. Zum Beispiel erlaubt die dateibasierte Session-Prozedur nur Zeichen im Bereich a-z A-Z 0-9 , (Komma) und - (Minus). Beispiel <?php session_start(); echo 'Willkommen auf Seite #1'; /* für den Fall, dass der Benutzer Cookies deaktiviert hat, ist das <?php echo SID?> nötig, um die Session-ID zu erhalten (wenn die Option short tag aktiviert ist, kann <?=SID?> verwendet werden) */ // Funktioniert, falls das Session-Cookie akzeptiert wurde echo '<br /><a href="seite2.php">Seite 2</a>'; // Oder die Session-ID direkt mit übergeben, für den Fall, dass sie benötigt wird echo '<br /><a href="seite2.php?' . SID . '">Seite 2</a>'; ?> Ausgabe Willkommen auf Seite #1 Seite 2 Seite 2 Ausgabe - Seitenquelltext Willkommen auf Seite #1<br /><a href="seite2.php">Seite 2</a><br /><a href="seite2.php?">Seite 2</a> oben  session_unset() Die Funktion session_unset() löscht alle Session-Variablen, die gegenwärtig registriert sind. Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Hinweis: Benutzen Sie bei Verwendung von $_SESSION die Funktion unset() um die Registrierung einer Session-Variablen (unset ($_SESSION['varname']);) aufzuheben. Heben Sie NICHT die Registrierung der gesamten $_SESSION mit unset($_SESSION) auf, weil dies die Registrierung von Variablen durch die Superglobale $_SESSION deaktivieren würde. Die Funktion session_unset() sollte nur in alten Anwendungen verwendet werden, die nicht die Superglobale $_SESSION ($HTTP_SESSION_VARS - veraltet, wird nicht mehr empfohlen) verwenden. Hinweis: Normalerweise ist es nicht erforderlich session_destroy() aufzurufen; stattdessen sollte das $_SESSION Array bereinigt werden. Um die Session komplett zu löschen, muss auch die Session-ID gelöscht werden. Die Funktion verwendet keine Parameter. Hinweis: Heben Sie nicht die Registrierung der gesamten $_SESSION mit unset($_SESSION) auf, weil dies die Registrierung von Variablen durch die Superglobale $_SESSION deaktivieren würde. Siehe auch: unset() session_destroy() Anhang: Deprecated features
oben  setcookie(string $name [, string $value = "" [, int $expires = 0 [, string $path = "" [, string $domain = "" [, bool $secure = FALSE [, bool $httponly = FALSE ]]]]]]) setcookie(string $name [, string $value = "" [, array $options = [] ]]) Die Funktion setcookie() definiert ein mit den HTTP Header-Informationen zu übertragendes Cookie. Wie andere Header auch, müssen Cookies vor jeglicher Ausgabe Ihres Skriptes gesendet werden. Das bedeutet, dass Sie diese Funktion aufrufen müssen, bevor Sie eine Ausgabe, dazu zählen auch <html>- oder <head>-Tags, Leerzeichen und Leerzeilen, übermitteln. Sind die Cookies einmal gesetzt, können Sie beim nächsten Seitenaufruf anhand des $_COOKIE Arrays auf diese zugreifen. Die Cookie-Werte können auch in $_REQUEST vorhanden sein. Alle Argumente - außer name - sind optional. Sie können beliebige Argumente auch durch einen Leerstring ("") ersetzen, um diese Argumente zu übergehen. Der expire-Parameter und das secure-Argument sind Integer-Werte und können nicht mit einem Leerstring übersprungen werden. Setzen Sie stattdessen NULL (0). Der expire-Parameter ist ein normaler UNIX-Zeitwert als Integer-Zahl, wie er von der time() oder mktime()-Funktion zurück gegeben wird. Das secure-Argument bedeutet, dass das Cookie nur über eine sichere HTTP-Verbindung geschickt werden soll. Erfolgt eine Ausgabe vor dem Aufruf dieser Funktion, wird setcookie() fehlschlagen und FALSE zurückgeben. Wenn setcookie() erfolgreich durchgeführt wird, wird TRUE zurückgegeben. Dies sagt jedoch nichts darüber aus, ob der Benutzer das Cookie auch akzeptiert hat. Siehe auch: header() Hinweis: Ist die PHP-Direktive register_globals auf on gesetzt, stehen die Cookies auch als eigene Variablen zur Verfügung. In den Beispielen wird $TextCookie also existieren. Es ist jedoch dringend empfohlen, $_COOKIE zu verwenden. Cookies werden nicht sichtbar, bevor nicht eine Seite geladen wird, für die das Cookie sichtbar sein soll. Um zu testen, ob ein Cookie erfolgreich gesetzt wurde, prüfen Sie noch vor der Ablaufzeit auf der nächsten geladenen Seite, ob das Cookie vorhanden ist. Die Ablaufzeit wird mittels des Parameters expires gesetzt. Eine gute Möglichkeit, die Existenz von Cookies zu prüfen, ist einfach print_r($_COOKIE); aufzurufen. Cookies müssen mit den selben Parametern gelöscht werden, mit denen sie gesetzt wurden. Ist der value-Parameter ein leerer String oder FALSE und alle anderen Werte entsprechen dem früheren Aufruf von setcookie, wird das Cookie mit dem angegebenen Namen vom Client gelöscht. Die wird intern ausgeführt, indem der Wert auf 'deleted' und die Verfallszeit auf ein Jahr in der Vergangenheit gesetzt wird. Da beim Setzen eines Cookies mit dem Value FALSE versucht wird, das entsprechende Cookie zu löschen, sollten Sie keine boolschen Werte verwenden. Nutzen Sie stattdessen 0 für FALSE und 1 für TRUE. Namen von Cookies können auch als Arraynamen gesetzt werden und stehen dann in Ihren Skripten als Arrays zu Verfügung, während sie auf dem System des Benutzers als separate Cookies abgespeichert werden. Erwägen Sie den Einsatz von explode(), um ein ein Cookie mit mehreren Namen und Werten zu setzen. Es ist nicht empfehlenswert, zu diesem Zweck serialize() einzusetzen, da hieraus Sicherheitslöcher erwachsen können. Mehrfache Aufrufe von setcookie() werden in der Reihenfolge ihres Aufrufs ausgeführt. Bei einem RFC (Request for Comments) handelt es sich um ein nummeriertes Dokument, in dem Protokolle, Konzepte, Methoden und Programme des Internets behandelt, beschrieben und definiert werden. Die Verwaltung der RFCs erfolgt durch die IETF (Internet Engineering Task Force). Parameter-Liste - RFC 6265 liefert die normative Referenz für die Interpretation der jeweiligen setcookie()-Parameter name ... Name des Cookies value ... Der Wert des Cookies. Dieser Wert wird auf dem Computer des Benutzers gespeichert, speichern Sie deshalb darin keine sensiblen Informationen. Angenommen der Parameter name ist 'cookiename', so erhält man seinen Wert mittels $_COOKIE['cookiename']. expires ... Der Zeitpunkt, an dem das Cookie ungültig wird. Dies ist ein Unix Timestamp, also die Anzahl Sekunden seit Beginn der Epoche. Mit anderen Worten, Sie werden diesen Wert wahrscheinlich mittels der Funktion time() plus der Anzahl Sekunden bis zum gewünschten Ablauf des Cookies setzen. Sie könnten aber auch mktime() verwenden. time()+60*60*24*30 wird das Cookie in 30 Tagen ablaufen lassen. Hat der Parameter den Wert 0 oder ist er nicht gesetzt, verfällt das Cookie am Ende der Session (wenn der Browser geschlossen wird). Hinweis: Beachten Sie, dass der expires-Parameter einen Unix-Timestamp enthält, im Gegensatz zum Datumsformat Wdy, DD-Mon-YYYY HH:MM:SS GMT. Die Konvertierung wird von PHP intern durchgeführt. path ... Der Pfad auf dem Server, für welchen das Cookie verfügbar sein wird. Ist er auf '/' gesetzt, wird das Cookie innerhalb der gesamten domain verfügbar. Ist er auf '/foo/' gesetzt, wird das Cookie nur innerhalb des Verzeichnisses /foo/ sowie allen Unterverzeichnissen wie z.B. /foo/bar/ der domain verfügbar. Der Standardwert ist das aktuelle Verzeichnis, in dem das Cookie gesetzt wurde. domain ... Die (Sub)-Domain, der das Cookie zur Verfügung steht. Wird dies auf eine Subdomain (wie 'www.example.com') gesetzt, dann steht dieser Subdomain und allen anderen Subdomains davon (z.B. w2.www.example.com) das Cookie zur Verfügung. Um das Cookie der ganzen Domain zur Verfügung zu stellen (einschließlich aller Subdomains davon), muss der Wert einfach auf den Domainnamen (in diesem Fall 'example.com') gesetzt werden. secure ... Gibt an, dass das Cookie vom Client nur über eine sichere HTTPS-Verbindung übertragen werden soll. Ist der Wert auf TRUE gesetzt, wird das Cookie nur gesendet, wenn eine sichere Verbindung besteht. Auf der Serverseite muss der Programmierer selbst darauf achten, dass entsprechende Cookies über eine sichere Verbindung gesendet werden (z.B. unter Berücksichtigung von $_SERVER["HTTPS"]). httponly ... Wenn auf TRUE gesetzt, ist das Cookie nur via HTTP-Protokoll zugreifbar. Das bedeutet, dass das Cookie nicht mehr für Skriptsprachen wie JavaScript auslesbar/veränderbar ist. Diese Einstellung kann eine effektive Hilfe sein, um Identitätsdiebstahl per XSS-Angriff zu vermindern (allerdings wird dies nicht von allen Browsern unterstützt). options ... Ein assoziatives Array, das die Schlüssel expires, path, domain, secure, httponly und samesite enthalten kann. Ist irgendein anderer Schlüssel vorhanden, wird ein Fehler der Stufe E_WARNING generiert. Die Werte haben dieselbe Bedeutung wie für die gleichnamigen Parameter beschrieben. Der Wert des samesite Elements sollte entweder None, Lax oder Strict sein. Ist eine der erlaubten Optionen nicht angegeben, dann ist ihr Standardwert derselbe wie für den expliziten Parameter. Wird das samesite Element nicht angegeben, dann wird kein SameSite-Cookie-Attribute gesetzt. Beispiel 1 Beachten Sie, dass der Wertebereich des Cookies automatisch URL-konform kodiert (urlencoded) wird, sobald Sie das Cookie senden und es wird beim Erhalt automatisch dekodiert und einer Variablen zugewiesen, die den selben Namen wie das Cookie trägt. <?php $value = 'irgendetwas von irgendwo'; setcookie("TestCookiexx", $value); setcookie("TestCookiexx", $value, time()+3600); /* verfällt in 1 Stunde */ setcookie("TestCookiexx", $value, time()+3600, "/~rasmus/", "example.com", 1); if(isset($_COOKIE["TestCookiexx"])) { // ein bestimmtes Cookie ausgeben echo $_COOKIE["TestCookiexx"]; // Ein anderer Weg zu Debuggen/Testen ist, alle Cookies anzuzeigen print "<pre>"; print_r($_COOKIE); print "</pre>"; } else { echo 'Um etwas zu sehen, ist die Seite neu zu laden (Kontextmenü über rechte Maustaste aufrufen).'; } ?> Ausgabe 1 irgendetwas von irgendwo Array ( [TestCookie] => irgendetwas von irgendwo ) Beispiel 2 - Cookie löschen Beim Löschen eines Cookies sollten Sie sicherstellen, dass das Verfallsdatum in der Vergangenheit liegt, um den Mechanismus zum Löschen des Cookies im Browser auszulösen. <?php // Setzen des Verfalls-Zeitpunktes auf 1 Stunde in der Vergangenheit setcookie("TestCookie", "", time() - 3600); setcookie("TestCookie", "", time() - 3600, "/~rasmus/", "example.com", 1); ?> Beispiel 3 - Array von Cookies setzen Sie können auch ein Array von Cookies setzen, in dem Sie die Array-Schreibweise im Cookienamen verwenden. Dadurch werden so viele Cookies gesetzt, wie Ihr Array Elemente hat. Sobald das Cookie aber von Ihrem Skript gelesen wird, werden alle Werte in ein einziges Array mit dem Cookienamen eingelesen. <?php // Setzen der Cookies setcookie ("cookie[three]", "cookiethree"); setcookie ("cookie[two]", "cookietwo"); setcookie ("cookie[one]", "cookieone"); // Nach dem Neuladen der Seite wieder ausgeben if(isset($_COOKIE['cookie'])) { foreach ($_COOKIE['cookie'] as $name => $value) { $name = htmlspecialchars($name); $value = htmlspecialchars($value); echo "$name : $value <br />\n"; } } else { echo 'Um etwas zu sehen, ist die Seite neu zu laden (Kontextmenü über rechte Maustaste aufrufen).'; } ?> Ausgabe 3 three : cookiethree two : cookietwo one : cookieone oben  show_source(string filename) Die Funktion show_source() erzeugt die Ausgabe des Codes der Datei filename mit hervorgehobener Syntax. Dabei werden die Farben des in PHP eingebauten Syntax-Highlighter benutzt. Hinweis: Diese Funktion ist ein Alias der Funktion highlight_file(). Siehe auch: highlight_file() highlight_string() oben  similar_text(string $first , string $second [, float &$percent ]) Mit similar_text() kann man die Ähnlichkeit von zwei Strings (Zeichenketten) (first und second) berechnen. Wenn Sie im dritten Parameter eine Variable übergeben, so wird similar_text() darin einen Prozentwert zurückgeben. Die Funktion gibt die Anzahl übereinstimmender Zeichen in beiden Zeichenketten zurück. Die Anzahl übereinstimmender Zeichen wird berechnet, indem die längste erste gemeinsame Teilzeichenkette gesucht wird, und dies dann rekursiv für die Prä- und Suffixe wiederholt wird. Die Längen aller gefundenen gemeinsamen Teilzeichenketten werden aufsummiert. Parameter-Liste first ... erste Zeichenkette second ... zweite Zeichenkette percent ... Falls Sie als Referenz ein drittes Argument angeben, wird similar_text() die Ähnlichkeit als Prozentwert errechnen. Dazu wird das Ergebnis von similar_text() durch den Durchschnitt der Längen der angegebenen Zeichenketten dividiert, und mit 100 multipliziert. Beispiel 1 <?php $var_1 = "SELFPHP - Die Befehlsreferenz"; $var_2 = "PHP 3/4 - Die Befehlsreferenz"; $menge = similar_text($var_1,$var_2); echo "Gefundene Übereinstimmungen: " . $menge; echo "<br>"; similar_text($var_1, $var_2, $prozent); $prozent = sprintf ("%01.2f", $prozent); echo "Gefundene Übereinstimmungen: " . $prozent."%"; ?> Ausgabe 1 Gefundene Übereinstimmungen: 25 Gefundene Übereinstimmungen: 86.21% Beispiel 2 - Vertauschung der Argumente von similar_text() Durch das Vertauschen des first und second Arguments kann ein anderes Ergebnis zur Folge haben. <?php $sim = similar_text('bafoobar', 'barfoo', $perc); echo "Ähnlichkeit: $sim ($perc %)\n"; echo "<br>"; $sim = similar_text('barfoo', 'bafoobar', $perc); echo "Ähnlichkeit: $sim ($perc %)\n"; ?> Ausgabe 2 Ähnlichkeit: 5 (71.428571428571 %) Ähnlichkeit: 3 (42.857142857143 %) oben  sizeof(mixed $array_or_countable [, int $mode = COUNT_NORMAL ]) Die Funktion sizeof() zählt die Anzahl der Elemente eines Arrays und gibt das Ergebnis zurück. Diese Funktion ist ein Alias der Funktion count(). Siehe auch: count() Parameter-Liste array_or_countable ... Ein Array oder Countable Objekt. mode ... Wenn der optionale Parameter mode auf COUNT_RECURSIVE (oder 1) gesetzt ist, wird sizeof() rekursiv durch das Array zählen. Dies kann besonders nützlich sein, um alle Elemente eines mehrdimensionalen Arrays zu zählen. Hinweis: sizeof() kann Rekursion erkennen, um eine Endlosschleife zu vermeiden, wird aber jedes Mal, wenn es das tut, ein E_WARNING erzeugen (im Fall, dass das Array sich selbst mehr als einmal enthält), und gibt dann eine höhere Anzahl zurück als möglicherweise erwartet. Beispiel <?php $array = array("banane","birne","apfel"); for($x=0;$x<sizeof($array);$x++){ echo $array[$x] . "<br>"; } ?> Ausgabe banane birne apfel oben  sleep(int seconds) Mit sleep() kann man Skriptausführung für eine gewisse Zeit (seconds) unterbrechen. Die Zeit wird dabei in Sekunden angegeben. Sobald die Zeit verstrichen ist, wird die Ausführung des Skripts wieder aufgenommen. Gibt bei Erfolg null oder im Fehlerfall FALSE zurück. Wenn der Aufruf durch ein Signal unterbrochen wurde, gibt sleep() eine positive Zahl (Anzahl der Sekunden die das Programm eigentlich noch "schlafen" sollte) zurück. Falls die angegebene Anzahl von Sekunden negativ ist, erzeugt diese Funktion einen Fehler des Typs E_WARNING. Hinweis: Die Funktion flush() hat keinen Einfluss auf das Pufferverhalten des Webservers oder des Browsers auf der Clientseite. Es hat auch keinen Einfluss auf mit ob_start() erstellte Ausgabepuffer. Daher müssen Sie sowohl ob_flush() als auch flush() aufrufen, um den Ausgabepuffer zu leeren. Siehe auch: flush() usleep() Beispiel <?php echo "Selfphp<br>"; echo "Diese und die nächste Zeile werden auch noch an den Browser gesendet.<br>"; echo "Jetzt passiert 3 Sekunden gar nichts.<br>"; ob_flush(); flush(); sleep(3); echo "<br>"; echo "Die 3 Sekunden sind vorbei und erst jetzt<br>"; echo "wird dieser Text ausgegeben."; ?> Ausgabe Selfphp Diese und die nächste Zeile werden auch noch an den Browser gesendet. Jetzt passiert 3 Sekunden gar nichts. Die 3 Sekunden sind vorbei und erst jetzt wird dieser Text ausgegeben. oben  stat(string $filename) Sammelt Informationen über die per filename angegebene Datei. Falls filename ein symbolischer Link ist, beziehen sich die Statistiken auf die Datei selbst, nicht auf den symbolischen Link. Unter Windows NTS-Builds vor PHP 7.4.0 bezogen sich in diesem Fall die size, atime, mtime und ctime Statistiken auf den symbolischen Link. Hinweis: lstat() ist identisch zu stat(), mit dem Unterschied, dass es sich auf den Status des symbolischen Links bezieht. Im Fehlerfall gibt stat() FALSE zurück. Hinweis: Weil PHPs Integer Typ vorzeichenbehaftet ist und viele Plattformen 32bit Integer verwenden, können einige Dateisystem-Funktionen für Dateien größer als 2GB unerwartete Ergebnisse liefern. Die Ergebnisse dieser Funktion werden gecached (clearstatcache). Siehe auch: posix_getpwuid() posix_getgrgid() clearstatcache() Parameter-Liste filename ... Pfad zur Datei. Rückgabewerte - stat()-Ergebnisformat Numerisch Assoziativ Beschreibung 0 dev Gerätenummer *** 1 ino Inode-Nummer **** 2 mode Inode-Schutzmodus 3 nlink Anzahl der Links 4 uid userid des Besitzers * 5 gid groupid des Besitzers * 6 rdev Gerätetyp, falls Inode-Gerät 7 size Größe in Bytes 8 atime Zeitpunkt des letzten Zugriffs (Unix-Timestamp) 9 mtime Zeitpunkt der letzten Änderung (Unix-Timestamp) 10 ctime Zeitpunkt der letzten Inode-Änderung (Unix-Timestamp) 11 blksize Blockgröße des Dateisystem-I/O ** 12 blocks Anzahl der zugewiesenen 512-Byte-Blöcke ** * Unter Windows wird dies immer 0 sein. ** Nur gültig unter Systemen, die den st_blksize-Typ unterstützen - andere Systeme (z.B. Windows) geben -1 zurück. *** Unter Windows, von PHP 7.4.0 an, ist dies die Seriennummer des Laufwerks, das die Datei enhält, welches eine 64-bit Ganzzahl ohne Vorzeichen ist, so dass auf 32-bit-Systemen ein Überlauf erfolgen kann. Zuvor war es die numerische Darstellung des Laufwerksbuchstabens (z.B. 2 für C:). **** Unter Windows, von PHP 7.4.0 an, ist dies die mit der Datei assozierte Kennung, welche eine 64-bit Ganzzahl ohne Vorzeichen ist, so dass ein Überlauf erfolgen kann. Zuvor war es immer 0. Der Wert von mode enthält Informationen, die von mehreren Funktionen gelesen werden. Wenn als Oktalzahl dargestellt und von rechts betrachtet, werden die ersten drei Ziffern von chmod() zurückgegeben. Die nächste Ziffer wird von PHP ignoriert. Die nächsten beiden Ziffern geben den Dateityp an. mode Dateitypen: mode als Oktalzahl Bedeutung 0120000 Verknüpfung 0100000 reguläre Datei 0060000 Block-Gerät 0040000 Verzeichnis 0010000 FIFO So könnte beispielsweise eine reguläre Datei 0100644, und ein Verzeichnis 0040755 sein. Beispiel <?php /* Hole Datei-Statistik */ $stat = stat('./upload_1.zip'); /* * Gebe den Zugriffszeitpunkt der Datei aus; dies entspricht dem * Aufruf von fileatime() */ echo 'Zugriffszeitpunkt: ' . $stat['atime'] . "<br>"; /* * Gebe den Änderungszeitpunkt der Datei aus; dies entspricht dem * Aufruf von filemtime() */ echo 'Änderungszeitpunkt: ' . $stat['mtime'] . "<br>"; /* Gebe die Gerätenummer aus */ echo 'Gerätenummer: ' . $stat['dev'] . "<br>"; ?> Ausgabe Zugriffszeitpunkt: 1625818734 Änderungszeitpunkt: 1606305082 Gerätenummer: 66305 oben  strcasecmp(string str1, string str2) Mit strcasecmp() kann man zwei Zeichenketten (str1 und str2) auf Binärbasis miteinander vergleichen. Achten Sie darauf, dass bei dem Vergleich nicht zwischen Groß- und Kleinschreibung unterschieden wird. Siehe auch: strcmp() preg_match() Folgende Werte werden zurückgegeben: < 0 - str1 ist kleiner als str2 = 0 - str1 ist gleich str2 > 0 - str1 ist größer als str2 Beispiel <?php $var_1 = "php3 - Die Befehlsreferenz"; $var_2 = "PHP3 - DIE BEFEHLSREFERENZ"; $wert = strcasecmp($var_1,$var_2); if($wert < 0) { echo "<b>$var_1</b> ist kleiner als <b>$var_2</b>"; } elseif($wert == 0) { echo "<b>$var_1</b> ist gleich <b>$var_2</b>"; } elseif($wert > 0) { echo "<b>$var_1</b> ist größer als <b>$var_2</b>"; } ?> Ausgabe php3 - Die Befehlsreferenz ist gleich PHP3 - DIE BEFEHLSREFERENZ oben  strcmp(string str1, string str2) Mit strcmp() kann man zwei Zeichenketten (str1 und str2) auf Binärbasis miteinander vergleichen. Achten Sie darauf, dass bei dem Vergleich zwischen Groß- und Kleinschreibung unterschieden wird. Siehe auch: strcasecmp() preg_match() Folgende Werte werden zurückgegeben: < 0 - str1 ist kleiner als str2 = 0 - str1 ist gleich str2 > 0 - str1 ist größer als str2 Beispiel <?php $var_1 = "php3"; $var_2 = "PHP3"; $wert = strcmp($var_1,$var_2); if($wert < 0) { echo "<b>$var_1</b> ist kleiner als <b>$var_2</b>"; } elseif($wert == 0) { echo "<b>$var_1</b> ist gleich <b>$var_2</b>"; } elseif($wert > 0) { echo "<b>$var_1</b> ist größer als <b>$var_2</b>"; } ?> Ausgabe php3 ist größer als PHP3 oben  strrchr(string haystack, string needle) Mit strrchr() kann man innerhalb einer Zeichenkette (haystack) das letzte Vorkommen eines Zeichens (needle) suchen und sich den restlichen Teil des Strings ab der letzten Position des zu suchenden Zeichens zurückgeben lassen. Enthält needle mehr als ein Zeichen, so wird nur das erste Zeichen als Suchmuster genommen. Als Rückgabewert der Funktion erhalten Sie den restlichen String (inkl. needle), sonst false. Siehe auch: strstr() strrpos() Anhang: Deprecated features Beispiel <?php $text = "PHP 3/4 - Die Befehlsreferenz"; $treffer = strrchr($text,"r"); echo $treffer; echo "<br>"; ?> Ausgabe renz oben  strpos(string $haystack , mixed $needle [, int $offset = 0 ]) Gibt die numerische Position des ersten Vorkommens von needle innerhalb der Zeichenkette haystack zurück. Es ist zu beachten, dass Stringpositionen bei 0 beginnen, und nicht bei 1. Gibt FALSE zurück, wenn needle nicht gefunden wurde. Hinweis: Diese Funktion kann sowohl das boolsche FALSE zurückliefern, als auch einen nicht-boolschen Wert, welcher zu FALSE ausgewertet wird. Benutzen Sie deshalb den === Operator, um den Rückgabewert dieser Funktion zu überprüfen. Unterstützung für negative offset-Werte wurde in der PHP-Version 7.1.0 hinzugefügt. Siehe auch: strrpos() strstr() chr() Anhang: Vergleichs-Operatoren Anhang: Deprecated features Parameter-Liste haystack ... Die Zeichenkette, in der gesucht werden soll. needle ... Ist der Parameter needle kein String, so wird dieser in eine Ganzzahl umgewandelt und als ordinaler Wert eines Zeichens betrachtet. Dieses Verhalten gilt seit PHP 7.3.0 als veraltet. Ist das Verhalten gewünscht, so sollte man stattdessen die Funktion chr() aufrufen. offset ... Wenn angegeben, wird die Suche diese Anzahl an Zeichen vom Anfang der Zeichenkette gezählt beginnen. Ist der Wert negativ, beginnt die Suche stattdessen diese Anzahl an Zeichen vom Ende des Strings gezählt. Beispiel 1 - Verwendung von === <?php $meinString = 'abc'; $findMich = 'a'; $pos = strpos($meinString, $findMich); // Beachten Sie die Verwendung von ===. Ein einfacher Vergleich (==) liefert // nicht das erwartete Ergebnis, da die Position von 'a' die nullte Stelle // (also das erste Zeichen) ist if($pos === false) { echo "Der String '$findMich' wurde nicht im String '$meinString' gefunden"; } else { echo "Der String '$findMich' wurde im String '$meinString' gefunden"; echo " und befindet sich an Position $pos"; } ?> Ausgabe 1 Der String 'a' wurde im String 'abc' gefunden und befindet sich an Position 0 Beispiel 2 - Verwendung von !== <?php $meinString = 'abc'; $findMich = 'a'; $pos = strpos($meinString, $findMich); // Der !==-Operator kann ebenfalls verwendet werden. Die Verwendung von != // würde in unserem Beispiel nicht wie erwartet arbeiten, da die Position // von 'a' 0 ist. Das Statement (0 != false) evaluiert hierbei zu false. if($pos !== false) { echo "Der String '$findMich' wurde im String '$meinString' gefunden"; echo " und befindet sich an Position $pos"; } else { echo "Der String '$findMich' wurde nicht im String '$meinString' gefunden"; } ?> Ausgabe 2 Der String 'a' wurde im String 'abc' gefunden und befindet sich an Position 0 Beispiel 3 - Verwendung eines Offsets <?php // Wir koennen nach einem Zeichen suchen und dabei alles vor dem Offset ignorieren $newstring = 'abcdef abcdef'; $pos = strpos($newstring, 'a', 1); // $pos = 7, nicht 0 echo $pos; ?> Ausgabe 3 7 oben  strrpos(string $haystack , mixed $needle [, int $offset = 0 ]) Mit strrpos() kann man innerhalb einer Zeichenkette (haystack) das letzte Vorkommen eines Zeichens (needle) finden. Als Rückgabewert der Funktion erhält man einen numerischen Wert, welcher der Position des Suchtreffers entspricht, sonst wird false zurückgegeben. Gibt man für needle mehr als ein Zeichen an, so wird nur das erste Zeichen berücksichtigt. Hinweis: Diese Funktion kann sowohl das boolsche FALSE zurückliefern, als auch einen nicht-boolschen Wert, welcher zu FALSE ausgewertet wird. Siehe auch: strpos() chr() Parameter-Liste haystack ... Die Zeichenkette in der gesucht werden soll. needle ... Ist der Parameter needle kein String, so wird dieser in eine Ganzzahl umgewandelt und als ordinaler Wert eines Zeichens betrachtet. Dieses Verhalten gilt seit PHP 7.3.0 als veraltet. Ist das Verhalten gewünscht, so sollte man stattdessen die Funktion chr() aufrufen. offset ... Wenn null (0) oder positiv, wird die Suche von links nach rechts durchgeführt, wobei die ersten offset Bytes des haystack übersprungen werden. Wenn negativ, wird die Suche von rechts nach links durchgeführt, wobei die letzten offset Bytes des haystack übersprungen werden. Beispiel 1 <?php $text = "PHP 3/4 - Die Befehlsreferenz"; $first = strrpos($text,101); $second = strrpos($text,"f"); $third = strrpos($text,"ef"); echo $first; echo "<br>"; echo $second; echo "<br>"; echo $third ; ?> Ausgabe 1 26 23 22 Beispiel 2 <?php $foo = "0123456789a123456789b123456789c"; // Sucht '0' ab dem nullten Byte (vom Anfang an) var_dump(strrpos($foo, '0', 0)); echo '<br>'; // Sucht '0' ab dem ersten Byte (nach Byte "0") var_dump(strrpos($foo, '0', 1)); echo '<br>'; // Sucht '7' ab dem 21ten Byte (nach Byte 20) var_dump(strrpos($foo, '7', 20)); echo '<br>'; // Sucht '7' ab dem 29ten Byte (nach Byte 28) var_dump(strrpos($foo, '7', 28)); echo '<br>'; // Sucht '7' von rechts nach links ab dem fünften Byte vom Ende var_dump(strrpos($foo, '7', -5)); echo '<br>'; // Sucht 'c' von rechts nach links ab dem zweiten Byte vom Ende var_dump(strrpos($foo, 'c', -2)); echo '<br>'; // Sucht '9c' von rechts nach links ab dem zweiten Byte vom Ende var_dump(strrpos($foo, '9c', -2)); ?> Ausgabe 2 int(0) bool(false) int(27) bool(false) int(17) bool(false) int(29) oben  stristr(string $haystack , mixed $needle [, bool $before_needle = FALSE ]) Mit stristr() kann man innerhalb einer Zeichenkette (haystack) nach einem String oder einem einzelnen Zeichen (needle) suchen. Es wird nicht zwischen Groß- und Kleinschreibung unterschieden. Als Ergebnis gibt die Funktion die Zeichenkette ab dem ersten Vorkommen des gesuchten Zeichens bzw. des gesuchten Strings zurück. Gibt den gefundenen Teilstring zurück. Wenn needle nicht gefunden wurde, gibt die Funktion FALSE zurück. Siehe auch: strstr() chr() Anhang: Deprecated features Parameter-Liste haystack ... Die Zeichenkette, in der gesucht werden soll. needle ... Ist der Parameter needle kein String, so wird dieser in eine Ganzzahl umgewandelt und als ordinaler Wert eines Zeichens betrachtet. Dieses Verhalten gilt seit PHP 7.3.0 als veraltet. Ist das Verhalten gewünscht, so sollte man stattdessen die Funktion chr() aufrufen. before_needle ... Wenn der Wert auf TRUE gesetzt ist, gibt stristr() den Teil von haystack vor dem ersten Auftreten von needle zurück (ohne needle selbst). Beispiel <?php $text = "Ab heute lerne ich PHP."; $suche = "LERNE"; $var = stristr($text,$suche); echo $var; echo "<br>"; $text_1 = "Ab heute lerne ich PHP."; $suche_1 = 105; $var_1 = stristr($text_1,$suche_1); echo $var_1; ?> Ausgabe lerne ich PHP. ich PHP. oben  strstr(string $haystack , mixed $needle [, bool $before_needle = FALSE ]) Mit strstr() kann man innerhalb einer Zeichenkette (haystack) das erste Vorkommen eines Strings (needle) suchen. Bei der Überprüfung der Zeichenkette wird Groß- und Kleinschreibung berücksichtigt. Gibt einen Teil der Zeichenkette zurück. Wird needle nicht gefunden, wird FALSE zurückgegeben. Hinweis: Wenn Sie nur herausfinden möchten, ob ein bestimmter needle innerhalb von haystack vorkommt, verwenden Sie stattdessen die schnellere und weniger speicherintensive Funktion strpos(). Siehe auch: stristr() strpos() chr() Anhang: Deprecated features Parameter-Liste haystack ... Die Eingabezeichenkette. needle ... Ist der Parameter needle kein String, so wird dieser in eine Ganzzahl umgewandelt und als ordinaler Wert eines Zeichens betrachtet. Dieses Verhalten gilt seit PHP 7.3.0 als veraltet. Ist das Verhalten gewünscht, so sollte man stattdessen die Funktion chr() aufrufen. before_needle ... Ist der Wert auf TRUE gesetzt, gibt strstr() den Teil von haystack zurück, der sich vor dem ersten Vorkommen von needle befindet (ohne needle selbst). Beispiel <?php $text = "PHP 3/4 - Die Befehlsreferenz"; $array = array(101,"Die","Dis","f"); for($x=0;$x<count($array);$x++) { if(strstr($text,$array[$x])) { echo strstr($text,$array[$x])."<br>"; } else { echo "$array[$x] wurde nicht gefunden!<br>"; } } ?> Ausgabe e Befehlsreferenz Die Befehlsreferenz Dis wurde nicht gefunden! fehlsreferenz oben  strlen(string str) Mit strlen() kann man sich die Länge einer Zeichenkette (str) zurückgeben lassen. Gibt im Erfolgsfall die Länge von string zurück und 0 wenn string leer ist. Hinweis: strlen() gibt die Anzahl von Bytes statt der Anzahl von Zeichen in einer Zeichenkette zurück. strlen() gibt NULL zurück, falls sie mit Arrays aufgerufen wird und eine E_WARNING wird ausgelöst. Siehe auch: count() sizeof() Beispiel <?php $text = "SELFPHP - Die Befehlsreferenz"; $laenge = strlen($text); echo $laenge; ?> Ausgabe 29 oben  substr(string string, int start [, int length]) Mit substr() können Sie sich einen Teilstring aus einem String (string) zurückgeben lassen. Dabei geben Sie die Position (start) innerhalb des Strings an, an der der Teilstring beginnen soll. Der optionale Parameter length bestimmt die Länge des Teilstrings. Sie können für die Parameter start und length positive oder negative Werte angeben. Bei positiven Werten wird von links nach rechts und bei negativen Werten von rechts nach links gezählt. Das erste Zeichen (wenn positiv) innerhalb des Strings hat die Position Null. Gibt den extrahierten Teil von string zurück. Im Fehlerfall wird FALSE zurückgegeben oder eine leere Zeichenkette. Siehe auch: strrchr() substr_replace() preg_match() trim() Beispiel <?php echo substr("1234567", 2) . '<br>'; // Es wird alles ab der zweiten Position nach rechts bis zum Ende zurückgegeben - also 34567. echo substr("1234567", -2) . '<br>'; // Es wird alles vom "Ende -2" bis zum tatsächlichen Ende des Strings zurückgegeben - also 67. echo substr("1234567", -2, 3) . '<br>'; // Es werden 3 Zeichen ab der Position "Ende-2" zurückgegeben. Da aber in diesem String nur noch zwei Zeichen zur Verfügung stehen, // werden nur diese zurückgegeben. Es wird nicht wieder am Anfang angefangen! - also 67. echo substr("1234567", -6, -5) . '<br>'; // Es wird der Teilstring von "Ende -6" bis zur Position "Ende -5" zurückgegeben - also 2. ?> Ausgabe 34567 67 67 2 oben  substr_count(string $haystack , string $needle [, int $offset = 0 [, int $length ]) Die Funktion substr_count() ermittelt, wie oft needle in dem String haystack vorkommt. Beachten Sie, dass der Parameter needle zwischen Groß- und Kleinschreibung unterscheidet. Die Funktion gibt einen Wert vom Typ integer zurück. Siehe auch: strpos() substr() strstr() Parameter-Liste haystack ... Der String, in dem gesucht werden soll. needle ... Der Substring, nach dem gesucht werden soll. offset ... Die Zeichenposition, an der die Zählung begonnen werden soll. Ist diese negativ, beginnt die Zählung am Ende der Zeichenkette. length ... Die maximale Länge nach dem angegebenen Offset, in der nach dem Substring gesucht werden soll. Es wird ein Hinweis ausgegeben, wenn Offset plus Länge größer als die Länge von haystack sind. Eine negative Länge zählt vom Ende des haystack an. Beispiel <?php $text = 'Dies ist ein Test'; echo strlen($text) . '<br>'; // 17 echo substr_count($text, 'es') . '<br>'; // 2 // wird der String auf 's ist ein Test' reduziert, // lautet das ausgegebene Ergebnis 1 echo substr_count($text, 'es', 3) . '<br>'; // wird der String auf 's i' reduziert, // lautet das Ergebnis 0 echo substr_count($text, 'es', 3, 3) . '<br>'; // generiert einen Hinweis, da 5+13 > 17 echo substr_count($text, 'es', 5, 13) . '<br>'; // gibt 1 aus, da überlappende Substrings nicht gezählt werden $text2 = 'gcdgcdgcd'; echo substr_count($text2, 'gcdgcd') . '<br>'; ?> Ausgabe 17 2 1 0 Warning: substr_count(): Invalid length value in /opt/lampp/htdocs/www/work-x/Laboretum/script1a.php on line 27 1 oben  stripslashes(string str) Mit stripslashes() kann man Backslashes (\), die durch die Funktion addslashes() vor zu schützende Zeichen gestellt wurden, aus dem String wieder entfernen lassen. Die Funktion gibt einen String zurück, aus dem alle Backslashes (\) entfernt wurden. Doppelte Backslashes (\\) werden zu einem einfachen Backslash (\) umgesetzt. Siehe auch: addslashes() stripcslashes() Beispiel 1 <?php $text = "'©2001' by \"SELFPHP\""; $str = addslashes($text); echo $text; echo "<br>"; echo $str; echo "<br>"; $str = stripslashes($text); echo $str; ?> Ausgabe 1 '©2001' by "SELFPHP" \'©2001\' by \"SELFPHP\" '©2001' by "SELFPHP" Beispiel 2 - Verwendung von stripslashes() in einem Array Die Funktion stripslashes() ist nicht rekursiv. Wenn Sie die Funktion auf ein mehrdimensionales Array anwenden wollen, müssen Sie eine rekursive Funktion verwenden. <?php function stripslashes_deep($value) { $value = is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value); return $value; } $array = array("f\\'oo", "b\\'ar", array("fo\\'o", "b\\'ar")); $array = stripslashes_deep($array); print "<pre>"; print_r($array); print "</pre>"; ?> Ausgabe 2 Array ( [0] => f'oo [1] => b'ar [2] => Array ( [0] => fo'o [1] => b'ar ) ) oben  stripcslashes(string str) Mit stripcslashes() kann man Backslashes, die durch die Funktion addcslashes() vor zu schützende Zeichen gestellt wurden, wieder aus einem String (str) entfernen lassen. Hinweis: Steuerzeichen für das Zeilenende (\n, \r), oktal- und hexadezimale Zeichen werden erkannt. Siehe auch: addcslashes() Beispiel <?php $text = "#--## ©2001 by SELFPHP ##--#"; $str = addcslashes($text,"#-"); echo $text; echo "<br>"; echo $str; echo "<br>"; $str = stripcslashes($text); echo $str; ?> Ausgabe #--## ©2001 by SELFPHP ##--# \#\-\-\#\# ©2001 by SELFPHP \#\#\-\-\# #--## ©2001 by SELFPHP ##--# oben  strip_tags(string str [, string allowable_tags]) Mit strip_tags() kann man versuchen, innerhalb einer Zeichenkette (str) HTML- und PHP-Tags entfernen zu lassen. Mit dem optionalen Parameter (tags) können bestimmte HTML- und PHP-Tags als zulässig deklariert werden. Bei sinnlosen oder unvollständigen Tags werden Fehler ausgegeben. Hinweis: HTML-Kommentare und PHP-Tags werden ebenfalls entfernt. Dieses Verhalten ist hartkodiert und kann nicht mittels allowable_tags verändert werden. Selbst-schließende XHTML-Tags werden ignoriert, und nur nicht-selbst-schließende Tags sollten in allowable_tags verwendet werden. Um beispielsweise sowohl <br;> als auch <br/> zu erlauben, sollte folgendes verwendet werden: <?php strip_tags($input, '<br>'); ?> Siehe auch: htmlspecialchars() htmlentities() Beispiel <?php $str = "<b>Bitte besuchen Sie auch folgende Seiten:</b> "; $url = "<a href=http://www.selfphp3.de>SELFPHP</a><br>"; $text = $str . $url; echo $text; echo strip_tags($text, "<b><i><u><ol><ul><li>"); ?> Ausgabe Bitte besuchen Sie auch folgende Seiten: SELFPHP // dieser Text fettgedruckt und mit SELFPHP als Hyperlink Bitte besuchen Sie auch folgende Seiten: SELFPHP //diesmal ohne Hyperlink, aber fettgedruckt, da <b></b> erlaubt ist oben  str_replace(smixed $search , mixed $replace , mixed $subject [, int &$count ]) Diese Funktion gibt einen String oder ein Array zurück, in dem alle Vorkommen von search innerhalb von subject durch den angegebenen replace-Wert ersetzt werden. Einfache Ersetzungen (ohne reguläre Ausdrücke) sollten immer mit dieser Funktion umgesetzt werden. Für ausgefallenere Ersetzungen bietet sich preg_replace() an. Die Funktion berücksichtigt Groß- und Kleinschreibung. str_replace() gibt eine Zeichenkette oder ein Array mit den ersetzten Werten zurück. Hinweis: Weil str_replace() von links nach rechts ersetzt, kann ein zuvor eingesetzter Wert ersetzt werden, wenn mehrere Ersetzungen nacheinander in einer Schleife durchgeführt werden. Siehe auch: preg_replace() strtr() Anhang: Zeichen-»Salat« verhindern Parameter-Liste Sind search und replace Arrays, nimmt str_replace() je einen Wert beider Arrays und verwendet diese zum Suchen und Ersetzen in subject. Hat replace weniger Werte als search, so wird ein leerer String zum Ersetzen für den Rest der Werte verwendet. Ist search ein Array und replace ein String, dann wird dieser String für jeden Wert von search angewandt. Das Gegenteil ist nicht sinnvoll. Sind search und/oder replace Arrays, werden ihre Elemente vom ersten zum letzten hin verarbeitet. search ... Der gesuchte Wert, auch Nadel (needle) genannt. Ein Array kann genutzt werden, um mehrere Nadeln zu bestimmen. replace ... Der Ersetzungswert, der gefundene search Werte ersetzt. Ein Array kann genutzt werden, um mehrere Werte zu bestimmen. subject ... Die zu durchsuchende und darin enthaltene zu ersetzende Zeichenkette oder das Array, auch Heuhaufen (haystack) genannt. Ist subject ein Array, erfolgt das Suchen und Ersetzen für jeden Wert von subject, und der Rückgabewert ist ebenfalls ein Array. count ... Falls übergeben, wird dies auf die Anzahl der durchgeführten Ersetzungen gesetzt. Beispiel 1 <?php $vari = "Wäre ich ein Holzfäller, so müßte ich Bäume fällen."; echo $vari . "<br>"; $array_1 = array("ä","ü", "ß"); $array_2 = array("ae","ue","ss"); for($x=0;$x<3;$x++){ $vari = str_replace($array_1[$x],$array_2[$x],$vari); } echo $vari; echo "<br>"; echo str_replace(" ","_",$vari); ?> Ausgabe 1 Wäre ich ein Holzfäller, so müßte ich Bäume fällen. Waere ich ein Holzfaeller, so muesste ich Baeume faellen. Waere_ich_ein_Holzfaeller,_so_muesste_ich_Baeume_faellen. Beispiel 2 <?php // Liefert: body text='schwarz' $bodytag = str_replace("%body%", "schwarz", "body text='%body%'"); echo $bodytag . "<br><br>"; // Liefert: Hll PHP-Wlt $vokale = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U"); $onlyconsonants = str_replace($vokale, "", "Hallo PHP-Welt"); echo $onlyconsonants . "<br><br>"; // Liefert: Sie sollten taeglich Pizza, Bier und Eiscreme essen. $phrase = "Sie sollten taeglich Fruechte, Gemuese und Ballaststoffe essen."; $gesund = array("Fruechte", "Gemuese", "Ballaststoffe"); $lecker = array("Pizza", "Bier", "Eiscreme"); $newphrase = str_replace($gesund, $lecker, $phrase); echo $newphrase . "<br><br>"; // Liefert: 2 $str = str_replace("ll", "", "good golly miss molly!", $count); echo $count; ?> Ausgabe 2 body text='schwarz' Hll PHP-Wlt Sie sollten taeglich Pizza, Bier und Eiscreme essen. 2 Beispiel 3 Weil str_replace() von links nach rechts ersetzt, kann ein zuvor eingesetzter Wert ersetzt werden, wenn mehrere Ersetzungen durchgeführt werden. <?php // Ausgabe: F da A durch B ersetzt wird, dann B durch C, und so weiter... // Letztlich wird E durch F ersetzt, wegen der Ersetzung von Links nach Rechts $search = array('A', 'B', 'C', 'D', 'E'); $replace = array('B', 'C', 'D', 'E', 'F'); $subject = 'A'; echo str_replace($search, $replace, $subject) . "<br>"; // Ausgabe: apearpearle pear $letters = array('a', 'p'); $fruit = array('apple', 'pear'); $text = 'a p'; $output = str_replace($letters, $fruit, $text); echo $output; ?> Ausgabe 3 F apearpearle pear oben  strtolower(string str) Mit strtolower() kann man den Inhalt einer Zeichenkette (str) in Kleinbuchstaben umwandeln. Es ist darauf zu achten, dass die Interpretation der Buchstaben von den Ländereinstellungen abhängig sind. So kann es zum Beispiel sein, dass Umlaute in anderen Sprachen nicht bekannt sind und somit nicht umgewandelt werden. Die Funktion gibt die Zeichenkette in Kleinbuchstaben zurück. Siehe auch: strtoupper() ucfirst() Beispiel <?php $text = "PHP 3/4 - Die Befehlsreferenz"; echo $text; echo "<br>"; echo strtolower($text); ?> Ausgabe PHP 3/4 - Die Befehlsreferenz php 3/4 - die befehlsreferenz oben  strtoupper(string str) Mit strtoupper() kann man den Inhalt einer Zeichenkette (str) in Großbuchstaben umwandeln. Es ist darauf zu achten, dass die Interpretation der Buchstaben von den Ländereinstellungen abhängig sind. So kann es zum Beispiel sein, dass Umlaute in anderen Sprachen nicht bekannt sind und somit nicht umgewandelt werden. Die Funktion gibt die Zeichenkette in Großbuchstaben zurück. Siehe auch: strtolower() ucfirst() Beispiel <?php $text = "PHP 3/4 - Die Befehlsreferenz"; echo $text; echo "<br>"; echo strtoupper($text); ?> Ausgabe PHP 3/4 - Die Befehlsreferenz PHP 3/4 - DIE BEFEHLSREFERENZ oben  switch Switch ist vergleichbar mit einer if-Abfrage. Der Vorteil ist aber, dass Sie mit der switch-Anweisung verschiedene Argumente einer Variablen prüfen können. Innerhalb der Verzweigung haben Sie die Möglichkeit, den Durchlauf mit break abzubrechen und somit die Schleife zu verlassen. Beispiel <?php $var = 2; switch ($var) { case 0: echo "\$var ist gleich 0"; break; case 1: echo "\$var ist gleich 1"; break; case 2: echo "\$var ist gleich 2"; break; default: echo "\$var ist gleich 0"; break; } ?> Ausgabe $var ist gleich 2
Seitenanfang 

T

time touch trim

Hinweis: Bei Funktionen (z.B. touch(), ImagePNG(), ...) die Dateien - wie Bilder oder Textdateien - erstellen, verändern oder löschen; sollte das entsprechende Verzeichnis mit ausreichenden Zugriffsrechten ausgestattet sein. Zugriffsrechte auf 777 einstellen, sofern dies kein Sicherheitsrisiko darstellt.

oben  time() Mit time() kann man sich den aktuellen UNIX-Zeitstempel zurückgeben lassen. Dieser Zeitstempel enthält die Anzahl der Sekunden seit Beginn der Unix-Epoche (01.01.1970 um 00:00:00 Uhr). Die Bezugszeitzone ist GMT (Greenwich Mean Time ) bzw. die koordinierte Weltzeit UTC (Universal Time Coordinated). GMT oder UTC ist auf die Zeit am Nullmeridian, der durch Greenwich / England verläuft, bezogen. Die Sommerzeit findet bei GMT und UTC keine Beachtung. Die Funktion verwendet keine Parameter. Hinweis: Der Timestamp des Beginns der aktuellen Anfrage steht auch in der Variablen $_SERVER['REQUEST_TIME'] zur Verfügung. Siehe auch: date() mktime() gmdate() Vordefinierte_Variablen Beispiel 1 <?php echo time(); ?> Ausgabe 1 991165204 Beispiel 2 <?php $nextWeek = time() + (7 * 24 * 60 * 60); // 7 Tage; 24 Stunden; 60 Minuten; 60 Sekunden echo 'Jetzt: '. date('Y-m-d') ."<br>"; echo 'Naechste Woche: '. date('Y-m-d', $nextWeek) . "<br>"; // oder strtotime() verwenden: echo 'Naechste Woche: '. date('Y-m-d', strtotime('+1 week')) ."<br>"; ?> Ausgabe 2 Jetzt: 2021-03-22 Naechste Woche: 2021-03-29 Naechste Woche: 2021-03-29 oben  touch(string $filename [, int $time = time() [, int $atime ]]) Versucht die Zugriffs- und Modifikationszeit der im filename-Parameter angegebenen Datei auf time zu setzen. Beachten Sie, dass die Zugriffszeit unabhängig von der Anzahl der Parameter immer geändert wird. Wenn die Datei nicht existiert, wird sie erzeugt. Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Hinweis: Beachten Sie, dass die zeitliche Auflösung bei verschiedenen Dateisystemen unterschiedlich sein kann. Siehe auch: fileatime() filectime() filemtime() Parameter-Liste filename ... Der Name der zu ändernden Datei. time ... Die Modifikationszeit. Wenn time nicht angegeben ist, wird die aktuelle Systemzeit verwendet. atime ... Falls angegeben, wird die Zugriffszeit der angegebenen Datei auf atime gesetzt. Andernfalls wird sie auf den angegebenen time-Parameter gesetzt. Falls beide nicht angegeben wurden, wird die aktuelle Systemzeit verwendet. Beispiel 1 <?php $date = time(); $datei = "zukunft.php"; if(touch($datei)) { echo "Datum und Uhrzeit auf " . strftime ("%e.%m.%Y - %R",$date) . " geändert"; } else { echo "Datum und Uhrzeit konnten nicht geändert werden."; } ?> Ausgabe 1 Datum und Uhrzeit auf 22.03.2021 - 10:37 geändert Beispiel 2 <?php // Modifikationszeit (eine Stunde in der Vergangenheit) $time = time() - 3600; // Ändern der Datei if (!touch('eine_datei.txt', $time)) { echo 'Ein Fehler ist aufgetreten ...'; } else { echo 'Änderung der Modifikationszeit war erfolgreich'; } ?> Ausgabe 2 Änderung der Modifikationszeit war erfolgreich oben  trim(string $str [, string $character_mask = " \t\n\r\0\x0B" ]) Die Funktion entfernt Whitespaces am Anfang und Ende von str und gibt den String dann zurück. Siehe auch: chop() str_replace() Ohne Verwendung des zweiten Parameters entfernt trim() folgende Zeichen: " " (ASCII 32 (0x20)), ein normales Leerzeichen. "\t" (ASCII 9 (0x09)), ein Tabulatorzeichen. "\n" (ASCII 10 (0x0A)), einen Zeilenvorschub (Line Feed). "\r" (ASCII 13 (0x0D)), ein Wagenrücklaufzeichen (Carriage Return). "\0" (ASCII 0 (0x00)), das NUL-Byte. "\x0B" (ASCII 11 (0x0B)), ein vertikaler Tabulator. Parameter-Liste str ... string erwartet die zu trimmende Zeichenkette. character_mask ... Optional kann die Liste der Zeichen angegeben werden, die an Anfang und Ende der Zeichenkette entfernt werden sollen. Um diese Zeichen anzugeben, wird der character_mask Parameter verwendet. Er enthält eine Liste aller zu entfernenden Zeichen. Mit .. können darüber hinaus auch ganze Bereiche von Zeichen angegeben werden. Beispiel <?php $var_1 = "Dies "; $var_2 = " ist ein "; $var_3 = " Test"; echo $var_1 . $var_2 . $var_3 . "\n"; $var_4 = trim ($var_2); echo "<br>" . $var_1 . $var_4 . $var_3; ?> Ausgabe Dies ist ein Test Dies ist ein Test Ausgabe - Seitenquelltext Dies ist ein Test <br>Dies ist ein Test
Seitenanfang 

U

ucfirst umask unlink unset uslepp oben  ucfirst(string str) Die Funktion ucfirst() wandelt das erste Zeichen von str in einen Großbuchstaben um, wenn es ein Zeichen des Alphabets ist und gibt den veränderten String zurück. Beachten Sie, dass die Zeichen des Alphabets abhängig vom Wert der gesetzten locale-Einstellungen erkannt werden. In der Voreinstellung werden Sonderzeichen wie die deutschen Umlaute (ä, ö, ü) nicht erkannt und daher nicht umgewandelt. Siehe auch: strtolower() strtoupper() Beispiel <?php $var = "hier lerne ich PHP"; $var = ucfirst($var); echo $var; ?> Ausgabe Hier lerne ich PHP oben  umask(int mask) Mit umask() kann man die aktuellen Zugriffsrechte von PHP ändern. Übergeben Sie dazu im Parameter mask den gewünschten Wert. Als Ergebnis gibt die Funktion die bisherige umask zurück. Sollten Sie die Funktion ohne Argument aufrufen, so wird die aktuelle umask zurückgegeben. umask ist praktisch gesehen, ein Filter der von den Standardvorgaben der Zugriffsrechte Rechte wegnimmt (1 ... execute, 2 ... write, 4 ... read). Verzeichnisse werden mit den Zugriffsrechten 777 und Dateien mit den Zugriffsrechten 666 erstellt. Bei einer Standardinstallation der Linux/Unix-Distributionen ist für die Benutzer schon eine Standard-umask aktiv - umask 022. Für die Zugriffsrechte bedeutet dies, dass bei der Erstellung von Verzeichnissen das Zugriffsrecht 755 und bei Dateien das Zugriffsrecht 644 automatisch vergeben wird. Die automatische Vergabe dieser Zugriffsrechte kann mit dem Befehl umask abgestellt werden, dabei ist der Befehl vor der Erstellung von Verzeichnissen und Dateien aufzurufen. Die umask-Maske ist immer nur im aktuellen Skript aktiv, d.h. beim Beenden des Skriptes werden sofort wieder die Standardeinstellungen aktiv - also umask 022. Hinweis: Der bessere Weg die Dateiberechtigung zu kontrollieren, ist die Dateiberechtigungen mit chmod() zu ändern, nachdem die Datei erstellt wurde. Da die Nutzung von umask() mitunter zu unerwartetem Verhalten von gleichzeitig ausgeführten Skripten und des Webservers führen kann, weil die gleiche umask genutzt wird. Siehe auch: chmod() decoct() Beispiel <?php echo decoct(umask(0777)); echo "<br>"; echo decoct(umask()); ?> Ausgabe 22 777 oben  unlink(string $filename [, resource $context ]) Mit unlink() kann man eine Datei (filename) vom Server löschen. Sollte ein Fehler auftreten, so gibt diese Funktion false zurück. Sie können die interne Fehlermeldung von PHP unterdrücken, indem Sie der Funktion ein "@" voranstellen. Somit wird dann nur die eventuell von Ihnen erzeugte Fehlermeldung ausgegeben. Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben und ein E_WARNING-Fehler generiert. Hinweis: Bei Nutzung von PHP 7.3.0 und höher ist es jetzt unter Windows möglich, Dateien mit verwendeten Handles per unlink() zu löschen, während dies zuvor fehlschlug. Es ist allerdings noch immer nicht möglich, die gelöschte Datei neu zu erzeugen, bevor alle Handles geschlossen wurden. Siehe auch: chmod() file_exists() is_writeable() fopen() rmdir() touch() umask() Parameter-Liste filename ... Pfad zur Datei context ... context ist ein optionaler Parameter. PHP bietet eine Menge von Kontextoptionen und -parametern, die in Zusammenhang mit allen Dateisystem- und Streamwrappern genutzt werden können. Ein Kontext wird mit stream_context_create() erzeugt. Optionen werden mit stream_context_set_option() gesetzt und Parameter mit stream_context_set_params(). Beispiel <?php $datei = "./statistik_selfphp.txt"; if(file_exists($datei)) { @unlink($datei); if(!file_exists($datei)) { echo "Die Datei $datei wurde gelöscht!"; } else { echo "Konnte die Datei $datei nicht löschen!"; } } else { echo "Datei $datei existiert nicht!"; } ?> oben  unset(mixed $var_1 [, mixed $var_2, mixed $var_3, mixed $...]) Mit unset() können Sie eine Variable oder ein Array löschen und somit wieder vollständig freigeben. Das Verhalten von unset() innerhalb einer Funktion kann abhängig davon sein, was für einen Variablentyp Sie zu löschen versuchen. Wenn eine globalisierte Variable innerhalb einer Funktion mit unset() behandelt wird, wird nur die lokale Variable gelöscht. Die Variable innerhalb der aufrufenden Umgebung behält den selben Wert wie vor dem Aufruf von unset(). Hinweis: unset() ist keine Funktion, sondern ein Sprachkonstrukt, Beispiel 1 <?php function destroy_foo() { global $foo; unset($foo); } $foo = 'bar'; destroy_foo(); echo $foo; ?> Ausgabe 1 bar Beispiel 2 Um eine globale Variable innerhalb einer Funktion zu löschen, kann das $GLOBALS-Array verwendet werden. <?php function foo() { unset($GLOBALS['bar']); } $bar = "something"; foo(); echo $bar; ?> Ausgabe 2 Notice: Undefined variable: bar in /opt/lampp/htdocs/www/work-x/Laboretum/script1a.php on line 23 Beispiel 3 <?php $var = "Birnen"; echo $var . "<br>"; unset($var); if(!isset($var)) echo "Variable gelöscht"; ?> Ausgabe 3 Birnen Variable gelöscht Beispiel 4 Wenn eine Variable, die als Referenz übergeben wird, innerhalb einer Funktion gelöscht wird, so wird nur die lokale Variable gelöscht. Die ursprüngliche Variable enthält den selben Wert wie vor dem Aufruf von unset(). <?php function foo(&$bar) { unset($bar); $bar = "blah"; } $bar = 'something'; echo $bar . "<br>"; foo($bar); echo $bar . "<br>"; ?> Ausgabe 4 something something oben  usleep(int $micro_seconds) Verzögert die weitere Ausführung des Programms um die angegebene Anzahl von Mikrosekunden. Es wird kein Wert zurückgegeben. Siehe auch: sleep() Parameter-Liste micro_seconds ... Die Anhaltezeit in Mikrosekunden. Eine Mikrosekunde ist eine millionstel Sekunde. Hinweis: Unter Windows kann das System abhängig von der Hardware länger anhalten als die angegebene Anzahl von Mikrosekunden. Beispiel <?php // Aktuelle Zeit echo date('h:i:s') . "<br>\n"; // Warte 2 Sekunden usleep(2000000); // Zurück! echo date('h:i:s') . "\n"; ?> Ausgabe 09:42:26 09:42:28
Seitenanfang 

V

var_dump Vordefinierte_Variablen Verhindern das Dateien von entfernten Servern eigene Dateien aufrufen oben  var_dump(mixed $expression [, mixed $expression [, $...]]) Mit var_dump() können Sie sich Informationen einer Variablen expression ausgeben lassen. Die Funktion gibt strukturierte Informationen über einen oder mehrere Ausdrücke aus, darunter auch den entsprechenden Typ und Wert. Arrays und Objekte werden rekursiv durchlaufen und die jeweiligen Werte eingerückt dargestellt, um die Struktur zu verdeutlichen. Siehe auch: print_r() Beispiel <?php $var = array ( 'SELFPHP', 22, array ( 'PHP5', 'PHP4', 'PHP3' ) ); print "<pre>"; var_dump($var); print "</pre>"; ?> Ausgabe array(3) { [0]=> string(7) "SELFPHP" [1]=> int(22) [2]=> array(3) { [0]=> string(4) "PHP5" [1]=> string(4) "PHP4" [2]=> string(4) "PHP3" } } oben  Vordefinierte Variablen Sie haben mit den unten stehenden Servervariablen die Möglichkeit, viele Informationen über das Serversystem oder den Besucher ihrer Webseite zu bekommen. Die Variablen des Arrays $_SERVER[] sind automatisch global in jedem Geltungsbereich. Alle Variablen hier ausführlich zu erklären, würde den Rahmen des Buches sprengen. Sie haben aber die Möglichkeit, die einzelnen Variablen in ihren Skripts auszuprobieren. Siehe auch: Anhang: Apache-Variablen Anhang: PHP-Variablen Beispiel 1 <?php echo "<pre>"; print_r($_SERVER); echo "</pre>"; ?> Ausgabe 1 Array ( [UNIQUE_ID] => YFm0UhB-bNom-kKVVvQlswAAAAI [HTTP_HOST] => localhost [HTTP_USER_AGENT] => Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:85.0) Gecko/20100101 Firefox/85.0 [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 [HTTP_ACCEPT_LANGUAGE] => de,en-US;q=0.7,en;q=0.3 [HTTP_ACCEPT_ENCODING] => gzip, deflate [CONTENT_TYPE] => application/x-www-form-urlencoded [CONTENT_LENGTH] => 735 [HTTP_ORIGIN] => http://localhost [HTTP_DNT] => 1 [HTTP_CONNECTION] => keep-alive [HTTP_REFERER] => http://localhost/www/work-x/Laboretum/editor.php?script=1 [HTTP_UPGRADE_INSECURE_REQUESTS] => 1 [PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin [LD_LIBRARY_PATH] => /opt/lampp/lib:/opt/lampp/lib [SERVER_SIGNATURE] => [SERVER_SOFTWARE] => Apache/2.4.37 (Unix) OpenSSL/1.0.2q PHP/7.1.26 mod_perl/2.0.8-dev Perl/v5.16.3 [SERVER_NAME] => localhost [SERVER_ADDR] => 127.0.0.1 [SERVER_PORT] => 80 [REMOTE_ADDR] => 127.0.0.1 [DOCUMENT_ROOT] => /opt/lampp/htdocs [REQUEST_SCHEME] => http [CONTEXT_PREFIX] => [CONTEXT_DOCUMENT_ROOT] => /opt/lampp/htdocs [SERVER_ADMIN] => you@example.com [SCRIPT_FILENAME] => /opt/lampp/htdocs/www/work-x/Laboretum/editor.php [REMOTE_PORT] => 34784 [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => POST [QUERY_STRING] => [REQUEST_URI] => /www/work-x/Laboretum/editor.php [SCRIPT_NAME] => /www/work-x/Laboretum/editor.php [PHP_SELF] => /www/work-x/Laboretum/editor.php [REQUEST_TIME_FLOAT] => 1616491602.031 [REQUEST_TIME] => 1616491602 ) Beispiel 2 <?php echo "HTTP_USER_AGENT: " . $_SERVER['HTTP_USER_AGENT'] . "<br>"; echo "SERVER_PORT: " . $_SERVER['SERVER_PORT'] . "<br>"; echo "REMOTE_ADDR: " . $_SERVER['REMOTE_ADDR']. "<br>"; ?> Ausgabe 2 HTTP_USER_AGENT: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:85.0) Gecko/20100101 Firefox/85.0 SERVER_PORT: 80 REMOTE_ADDR: 127.0.0.1 oben  Verhindern das Dateien von entfernten Servern eigene Dateien aufrufen: .htaccess-Datei RewriteEngine On RewriteCond %{HTTP_REFERER} ^$ [OR] RewriteCond %{HTTP_REFERER} !^http://www.foo.bar/frame.php$ [NC] RewriteRule ^.*$ /error.php [R,L] Die erste Zeile schaltet die RewriteEngine ein. Die beiden folgenden Zeilen prüfen, ob der Referer leer oder NICHT der angegebene URL ist. Trifft der eine oder anderer Fall zu, so tritt die RewriteRule in Kraft und leitet die Anfrage auf die Datei error.php um. Die .htaccess-Datei und die Umleitung gehört in das Verzeichnis mit den zu schützenden Dateien. Sehr häufig wird dieses Verfahren auch eingesetzt, einzelne Dateien, beispielsweise Bilder davor zu schützen, das sie einfach von anderen Sites geladen und dort eingebunden werden. Die entsprechenden Zeilen sehen dann so aus: RewriteCond %{HTTP_REFERER} !^http://www.foo.bar/.*$ [NC] RewriteRule ^.*\.(jpg|gif|png)$ /error.php [R,L] Dies ist keine hundertprozentige sichere Lösung, denn man kann den Referer auch fälschen. Die Überprüfung des Referers kann auch über die Funktion preg_match("@http://www.foo.bar/frame.php@i", $HTTP_REFERER) erfolgen. Siehe auch: Anhang: Verzeichnisschutz mit .htaccess
Seitenanfang 

W

while wordwrap oben  while(expr) Mit while() wird ein Schleifendurchlauf abgearbeitet und so lange ausgeführt, bis das Schleifenende erreicht wurde. Dabei wird bei jeden Schleifendurchlauf die Bedingung (expr) auf true geprüft. Ist true erreicht, wird die while-Schleife beendet. Ist die Bedingung schon vor dem ersten Durchlauf false, wird die Schleife nicht einmal abgearbeitet. Siehe auch: break for() 1. Möglichkeit <?php $x = 0; while($x < 14){ echo $x++ . ". Durchlauf <br>"; } ?> Ausgabe 0. Durchlauf 1. Durchlauf 2. Durchlauf [...] 13. Durchlauf 2. Möglichkeit <?php $x=0; while($x < 14): $x++; echo $x . ". Durchlauf <br>"; endwhile; ?> Ausgabe 1. Durchlauf 2. Durchlauf [...] 14. Durchlauf oben  wordwrap(string $str [, int $width = 75 [, string $break = "\n" [, bool $cut = FALSE ]]]) Bricht einen String nach einer bestimmten Anzahl Zeichen mittels eines angegebenen Trennzeichens um. Gibt die übergebene Zeichenkette zurück, die an der angegebenen Trennstelle umgebrochen wurde. Siehe auch: nl2br() Parameter-Liste str ... Die Eingabezeichenkette. width ... Die Anzahl von Zeichen nach denen die Zeichenkette umgebrochen wird (Default = 75). break ... Der optionale Parameter break wird als Zeichen(kette) für den Zeilenumbruch verwendet. cut ... Wenn der Parameter cut auf TRUE gesetzt ist, wird die Zeichenkette spätestens nach der angegebenen width umgebrochen. Wenn sie also ein Wort haben, das länger als die angegebene Maximallänge ist, wird der Umbruch im Wort selbst durchgeführt. Bei FALSE trennt die Funktion das Wort nicht, selbst wenn der Parameter width kleiner ist als die Wortlänge. Beispiel 1 <?php $text = "Der schnelle braune Fuchs sprang über den faulen Hund."; $neuertext = wordwrap( $text, 20, "<br />\n" ); echo $neuertext; ?> Ausgabe 1 Der schnelle braune Fuchs sprang über den faulen Hund. Ausgabe 1 - Seitenquelltext Der schnelle braune<br /> Fuchs sprang über<br /> den faulen Hund. Beispiel 2 <?php $text = "Ein sehr langes Wooooooooooort."; $neuertext = wordwrap($text, 8, "\n", true); echo "$neuertext\n"; ?> Ausgabe 2 Ein sehr langes Wooooooo oooort. Ausgabe 2 - Seitenquelltext Ein sehr langes Wooooooo oooort. Beispiel 3 <?php $text = "Ein sehr langes Woooooooooooooooooort. Und noch mehr."; $newtext = wordwrap($text, 8, "\n", false); echo "$newtext\n"; ?> Ausgabe 3 Ein sehr langes Woooooooooooooooooort. Und noch mehr. Ausgabe 3 - Seitenquelltext Ein sehr langes Woooooooooooooooooort. Und noch mehr.
Seitenanfang 

Anhang

Apache-Variablen PHP-Variablen Dateiuploads mit POST PHP-Deklaration Kommentare Grundaufbau eines PHP-Skriptes Unterschied zwischen Variable, Sprachkonstrukte, Funktionen, Algorithmus, Array und Kontrollstrukturen Sprachkonstrukte und das Konzept der Variablenfunktionen Hinweise zu den Fehlermeldungen des PHP-Parsers Verzeichnisschutz mit .htaccess Binärdaten in einer MySQLi-Tabelle speichern Hinweis - Grundsätzlicher Aufbau einer Text- oder CSV-Datenbank Zeichen-»Salat« verhindern HTML-Injection Grundlegendes über Variablen Variablen: Hinweise zur Schreibweise Arithmetische Operatoren Zuweisungsoperatoren Vergleichs-Operatoren Logische Operatoren Inkrementierungs- bzw. Dekrementierungsoperatoren Operator-Rangfolge Zeichenketten-Operatoren Variable Variablen Umwandlung von Zeichenketten / Strings Typen von Integer-Zahlen Befehle, Funktionen die mit einem @-Zeichen versehen werden sollten Deprecated features in PHP Quellenverzeichnis oben  Apache-Variablen Diese Variablen werden durch den Apache-Web-Server erzeugt. Sollten sie einen anderen Web-Server nutzen, gibt es keine Garantie, dass dieser dieselben Variablen unterstützt. Es könnten einige sein; es könnten aber auch hier nicht aufgeführte Variablen sein. Viele dieser Variablen werden in den CGI 1.1 Spezifikationen aufgeführt. Beachten Sie, dass nur wenige, wenn überhaupt, dieser Variablen zur Verfügung stehen (oder tatsächlich eine beliebige Bedeutung haben), wenn Sie PHP per Kommandozeile aufrufen. $SERVER_NAME - Der Host-Name des Web-Servers, der das Skript ausführt. Das kann auch der Name eines virtuellen Servers sein. $DOCUMENT_ROOT - Das Verzeichnis des gerade ausgeführten Skripts aus Sicht des in der Konfigurations-Datei des Servers definierten Dokument- Wurzelverzeichnisses. Siehe auch: V - Vordefinierte Variablen oben  PHP-Variablen Diese Variablen (Superglobals) werden durch PHP selbst erzeugt und sind immer aktiviert, selbst wenn es nur leere Arrays sind. Dies sind die Arrays $_GET, $_POST, $_ENV, $_SERVER, $_COOKIE, $_REQUEST, $_FILES und $_SESSION und werden informell als Superglobals bezeichnet, weil sie immer zur Verfügung stehen, ohne Berücksichtigung des Geltungsbereichs. Die alten $HTTP_*_VARS Arrays gelten als veraltet und werden nicht mehr empfohlen. $PHP_SELF - Der Dateiname des gerade ausgeführten Skripts, relativ zum Wurzel-Verzeichnis des Dokuments. Bei Kommandozeilen-Aufrufen ist diese Variable nicht verfügbar. $_COOKIE - Ein assoziatives Array von Variablen, das dem aktuellen Skript über HTTP-Cookies übergeben wurde. Automatisch global in jedem Geltungsbereich. $_GET - Ein assoziatives Array von Variablen, das dem aktuellen Skript per HTTP-GET-Methode übergeben wurde. Automatisch global in jedem Geltungsbereich. $_POST - Ein assoziatives Array aus Variablen, welches dem aktuellen Skript per HTTP-POST-Methode übergeben wurde. Automatisch global in jedem Geltungsbereich. $_FILES - Ein assoziatives Array aus Variablen, das Informationen über per HTTP POST-Methode hochgeladene Dateien enthält. Automatisch global in jedem Geltungsbereich. $_SERVER - Ein assoziatives Array aus Variablen, die dem aktuellen Skript vom jeweiligen HTTP-Server übermittelt werden. Diese Variablen sind analog zu den oben beschriebenen Apache-Variablen. Automatisch global in jedem Geltungsbereich. $_SESSION - Ein assoziatives Array aus Session-Variablen, die dem aktuellen Skript übergeben wurden. Automatisch global in jedem Geltungsbereich. Werden dem Array $_SESSION neue Einträge hinzugefügt, werden diese automatisch als Session-Variablen registriert. $_REQUEST - Ein assoziatives Array zusammengesetzt aus den GET, POST und COOKIE-Variablen. Mit anderen Worten - alle Informationen die vom Nutzer kommen und denen aus Sichtweise der Sicherheit einige Aufmerksamkeit sicher sein sollte. Automatisch global in jedem Geltungsbereich. Siehe auch: V - Vordefinierte Variablen oben  Dateiuploads mit POST PHP kann Dateiuploads mit jedem RFC-1867 konformen Browser durchführen. Es können sowohl Text- als auch Binärdaten hochgeladen werden. Mit PHP Authentifizierungs- und Dateifunktionen besteht volle Kontrolle darüber, wer Dateien hochladen darf und was mit den Dateien geschehen soll, wenn der Upload beendet ist. Hinweis: Bei einem RFC (Request for Comments) handelt es sich um ein nummeriertes Dokument, in dem Protokolle, Konzepte, Methoden und Programme des Internets behandelt, beschrieben und definiert werden. Die Verwaltung der RFCs erfolgt durch die IETF (Internet Engineering Task Force). Beispiel - Formular für den Dateiupload Eine Maske für den Dateiupload kann erstellt werden, indem man ein Formular entwirft, das ungefähr so aussieht. <form enctype="multipart/form-data" action="_URL_" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="1000"> Send this file: <input name="userfile" type="file"> <input type="submit" value="Send File"> </form> Die _URL_ sollte auf eine PHP-Datei verweisen. Das versteckte Feld MAX_FILE_SIZE muss dem Dateieingabefeld vorangestellt werden und den Wert der maximal akzeptierten Dateigröße in Bytes enthalten. Hinweis: Die maximale Dateigröße MAX_FILE_SIZE ist für den Browser nur ein Hinweis und es ist leicht, diese Grenze zu umgehen. Also verlassen Sie sich nicht darauf, dass der Browser Ihrem Wunsch auch nachkommt! Wie auch immer, die PHP-Einstellungen für die maximale Dateigröße können nicht getäuscht werden. Die für hochgeladene Dateien definierten Variablen sind je nach PHP-Version und Konfiguration verschieden. Die folgenden Variablen werden nach einem erfolgreichen Upload innerhalb des empfangenden Skriptes definiert. Ist track_vars aktiviert, ist auch das $_FILES Array initialisiert. Wenn register_globals aktiviert ist, können die entsprechenden Variablen auch als globale Variablen initialisiert werden, auch wenn dies nicht mehr empfohlen wird. Die Konfigurationseinstellung track_vars ist seit PHP 4.0.3 immer aktiviert. Das Array $_FILES ist immer global (seit PHP 4.1.0), weshalb Sie die Einstellung global für $_FILES innerhalb von Funktionen vermeiden sollten. Das Array $_FILES beinhalten die Dateiinformationen des Uploads. Die alten $HTTP_*_VARS Arrays gelten als veraltet und werden daher nicht mehr empfohlen. Wenn register_globals in der php.ini aktiviert ist, stehen unter der Annahme, dass der Name des Dateiuploads wie in dem obigen Beispielskript 'userfile' ist, folgende Informationen zur Verfügung: $_FILES['userfile']['name'] ... Der ursprüngliche Dateiname auf dem System des Absenders. $_FILES['userfile']['type'] ... Der Mime-Type der Datei, falls der Browser diese Information zur Verfügung gestellt hat. Ein Beispiel wäre "image/gif". $_FILES['userfile']['size'] ... Die Größe der hochgeladenen Datei in Bytes. $_FILES['userfile']['tmp_name'] ... Der temporäre Dateiname, unter dem die hochgeladene Datei auf dem Server gespeichert wurde. Beachten Sie, dass der Namensbestandteil "$userfile" der obigen $_SERVER-Variablen den Namen des Dateifeldes <input name="userfile" type="file"> im Uploadformular trägt. Hinweis: register_globals = On wird aus Sicherheits- und Performancegründen nicht empfohlen. Standardmäßig werden Dateien in dem vorgegebenen temporären Verzeichnis des Servers gespeichert, außer es wurde mittels upload_tmp_dir in der php.ini ein anderer Ort konfiguriert. Das Standardverzeichnis des Servers kann durch das Setzen der Umgebungsvariablen TMPDIR, in der PHP ausgeführt wird, geändert werden. Das Setzen mittels der Funktion putenv() innerhalb eines Skriptes ist nicht möglich. Mittels dieser Umgebungsvariable kann auch sichergestellt werden, dass auch andere Operationen an hochgeladenen Dateien arbeiten können. Den Dateipfad der php.ini kann man der PHPINFO entnehmen. Beispiel - Dateiuploads prüfen <?php if(is_uploaded_file($_FILES['userfile']['tmp_name'])) { copy($_FILES['userfile']['tmp_name'], "/place/to/put/uploaded/file"); } else { echo "Possible file upload attack. Filename: " .$_FILES['userfile']['name']; } /* ...oder... */ move_uploaded_file($_FILES['userfile']['tmp_name'], "/place/to/put/uploaded/file"); ?> Das PHP-Skript kann die Algorithmen für die notwendigen Prüfung der hochgeladene Datei enthalten. Sie können zum Beispiel $_FILES['userfile']['size'] benutzen, um zu kleine (kleiner 10 Byte) bzw. zu große Dateien oder mittels $_FILES['userfile']['type'] Dateien eines unerwünschten Typs verwerfen. Egal welche Logik Sie verwenden, Sie sollten die Datei in dem temporären Verzeichnis entweder löschen oder an einen anderen Ort verschieben. Wurde die Datei in dem temporären Verzeichnis nicht verschoben oder umbenannt, wird sie am Ende des Requests (Abfrage) automatisch gelöscht. Siehe auch: is_uploaded_file() move_uploaded_file() phpinfo() oben  PHP-Deklaration Es gibt verschiedene Möglichkeiten, PHP in eine Seite einzubinden. Da aber PHP oftmals auf Unix- bzw. Linux-Systemen arbeitet ist es ratsam die XML-Syntax zu verwenden. Siehe auch: phpinfo() Beispiel SGML-Syntax <? // Hier den PHP-Code einfügen echo "TEST SGML-Syntax <br>"; ?> XML-Syntax <?php // Hier den PHP-Code einfügen echo "TEST XML-Syntax <br>"; ?> PHP-Kurzsyntax (Verwendung: innerhalb von HTML-Code) Das PHP-Tag <?=, in seiner Kurzform entspricht dem ausführlicheren Ausgabe-Tags <?php echo "String"; ?> . Hinweis: Der Tag <?= ist immer verfügbar, unabhängig von der short_open_tag-Einstellung in der php.ini. <?=$table_content?> Hinweis: Sie können ihren HTML- und PHP-Code untereinander vermischen. Um aber die Übersicht innerhalb ihres Programmcode nicht zu verlieren ist es ratsam, PHP- vom HTML-Code weitestgehend zu trennen. So könnte man Funktionen oder Berechnungen im Dateikopf abarbeiten und die benötigten Variablen an der Stelle platzieren wo sie gebraucht werden. Dies erleichtert später anderen Programmierern sich schnell in ihr Programm einzuarbeiten. Beispiel <?php function mache_etwas($wie_oft) { for($x=0 ; $x<$wie_oft ; $x++) { echo "Dies ist der " . $x . ". Durchlauf. <br>"; } } ?> <html> <head > <title> </title> </head> <body > Mein erstes Programm: <br> <?php mache_etwas(6); ?> </body> </html > Ausgabe Mein erstes Programm: Dies ist der 0. Durchlauf. Dies ist der 1. Durchlauf. Dies ist der 2. Durchlauf. Dies ist der 3. Durchlauf. Dies ist der 4. Durchlauf. Dies ist der 5. Durchlauf. oben  Kommentare 1. Möglichkeit (Einzeilige Kommentare) Die einzeiligen Kommentar-Arten (// ) kommentieren sämtlichen Text bis zum Zeilenende oder bis zum Ende des aktuellen PHP-Blocks aus, je nachdem, was zuerst eintritt. <?php $x = 1; // Startvariable für Programmschleife $y = 9; // Endvariable für Programmschleife ?> oder <?php // Startvariable für Programmschleife $x = 1; // Endvariable für Programmschleife $y = 9; ?> 2. Möglichkeit (Merzeiliger Kommentar) Mehrzeilige Kommentare enden am ersten Vorkommen von */. Achten Sie daher darauf, mehrzeilige Kommentare nicht zu verschachteln. Dieser Fehler entsteht leicht, wenn Sie längere Code-Blöcke auskommentieren. <?php /* echo 'Dies ist ein Test'; /* Dieser Kommentar wird ein Problem verursachen. */ */ ?> <?php /* $x ist die Startvariable für die Programmschleife $y ist die Endvariable für die Programmschleife */ $x = 2; $y = 6; // [...] ?> oben  Grundaufbau eines PHP-Skriptes Sie können ihren HTML- und PHP-Code untereinander vermischen. Um aber die Übersicht innerhalb ihres Programmcode nicht zu verlieren ist es ratsam, PHP- vom HTML-Code weitestgehend zu trennen. So könnte man Funktionen oder Berechnungen im Dateikopf abarbeiten und die benötigten Variablen an der Stelle platzieren wo sie gebraucht werden. Dies erleichtert später anderen Programmierern sich schnell in ihr Programm einzuarbeiten. <?php session_start(); setcookie(... hier stehen die variablen Cookie-Angaben); function Funktionsname() { // [...] } include("dateiname_1.php"); require("dateiname_2.php"); /* Hinweis: Die Funktionen session_start() und setcookie() müssen immer vor einer Ausgabe, wie z.B. print, echo oder ganz normale HTML-Tags stehen, da es sonst zu Fehlermeldungen kommen kann. Die Funktionen session_start(), setcookie() und HTML-Tags erzeugen jeweils HTTP-Header-Informationen die an den Internet-Browser geschickt werden, diese HTTP-Header-Informationen dürfen aber nicht mehrmals gesendet werden. Dies passiert aber, wenn session_start() und setcookie() innerhalb von normalen HTML-Tags eingebunden werden. Das Einbinden der anderen vorgenannten Funktionen am Anfang eines PHP-Skriptes, dient im wesentlichen mehr der Übersichtlichkeit der PHP-Skript-Struktur. Vor dem einleitenden <?php dürfen sich keine Leerzeilen und keine Leerzeichen - nicht einmal ein Leerzeichen - befinden, da sie ebenfalls HTTP-Header-Informationen erzeugen. Ob Fehlermeldungen erzeugt werden, hängt vom verwendeten Internet-Browser ab. */ ?> <?php // hier steht das eigentlich PHP-Programm, z.B. $tabelle = "<table border=\"1\">"; for($x=0; $x<5; $x++) { $zeilen_nr=$x+1; $tabelle .="<tr>"; $tabelle .="<td>Zeile: </td>"; $tabelle .="<td>" . $zeilen_nr . "</td>"; $tabelle .="</tr>"; } $tabelle .="</table>"; // bzw. $tabelle_b ="<table border=\"1\">\n"; for($x=0; $x<5; $x++) { $zeilen_nr=$x+1; $tabelle_b .="<tr>\n"; $tabelle_b .="<td>Zeile: </td>\n"; $tabelle_b .="<td>" . $zeilen_nr . "</td>\n"; $tabelle_b .="</tr>\n"; } $tabelle_b .="</table>\n"; /* Der Unterschied zwischen der Variablen $tabelle und $tabelle_b ist nur erkennbar, wenn man sich nach dem Aufruf des Skripts den Quellcode ansieht. */ ?> <!doctype html> <html> <head> <title>script.php</title> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <style type="text/css"> <!-- body { margin:10px 15px 15px 10px; } --> </style> </head> <body> Ergebnisse des PHP-Programmes einfügen über den Befehl echo <?php echo $tabelle; ?> <br> Ergebnisse des PHP-Programmes einfügen über den Befehl print <?php print $tabelle; ?> <br> Ergebnisse des PHP-Programmes einfügen über die PHP-Kurzsyntax (PHP-Deklaration) <?=$tabelle?> <br> \n fügt einen Zeilenumbruch ein, der aber nur im HTML-Quellcode sichtbar ist <?php echo $tabelle_b; ?> <br> </body> </html> Siehe auch: unset() oben  Unterschied zwischen Variable, Sprachkonstrukte, Funktionen, Algorithmus, Array und Kontrollstrukturen Variablen: In PHP erhalten alle Variablen ein vorangestelltes $-Zeichen. Das folgende Zeichen darf keine Zahl sein, sondern es muss entweder ein Buchstabe oder ein Unterstrich folgen. Für die restlichen Zeichen jedoch sind Zahlen erlaubt. Bei Variablen wird zwischen Groß- und Kleinschreibung unterschieden. <?php $meinText = "Hi, dies ist eine String-Variable"; echo $meinText; ?> Hier agiert das Gleichheitszeichen als ein Zuweisungsoperator. Der Zuweisungsoperator weist der Variable einen Wert zu. In diesem Skript wird so eine String-Variable definiert. Dies erkennt man, dass der Text in doppelten Anführungszeichen (") eingeschlossen ist. String-Variablen können zudem auch definiert werden, indem der Text in einfachen Anführungszeichen (') eingeschlossen ist. Es gibt weitere Variablentypen wie Integer oder Double für Zahlen oder Boolean für einen Wahrheitswert. In PHP muss nicht darauf geachtet werden, welchen Typ eine Variable besitzt. Dieser wird ihr automatisch bei ihrer ersten Verwendung zugeteilt. Dies erspart dem Programmierer die Typzuweisung einer Variablen, führt allerdings leider auch manchmal zu Verwirrungen. Sprachkonstrukte: Ein Sprachkonstrukt ist ein Satz von Strukturen, der Teil eines Programms ist, das zum Ausdruck einer Operation gebildet wird. Oder etwas einfacher ausgedrückt: Ein Sprachkonstrukt (engl.: Statement) ist eine PHP-Anweisung um ein bestimmtes Ziel zu erreichen. Sowohl echo als auch print sind Sprachkonstrukte, obwohl print sich wie eine Funktion verhält. Das Sprachkonstrukt print lässt sich auch mit Klammern aufrufen und hat immer einen Rückgabewert. Aber der Umstand, dass print auch ohne runde Klammern aufgerufen werden kann, stellt ein syntaktisches Ausschlusskriterium dar. Das Sprachkonstrukt echo erwirkt eine Ausgabe und ist ansonsten für die Programmierlogik quasi nicht existent. print versucht eine Ausgabe zu erwirken und gibt im Erfolgsfall den Integer-Wert 1 zurück. Für einfache Ausgaben ist echo vorzuziehen. Performance-Tests haben gezeigt, dass echo etwa um 10% schneller arbeitet als print. Grund dafür dürfte wohl der Rückgabewert sein, der im Wesentlichen den Unterschied ausmacht. Beispiele für einige Sprachkonstrukte: echo, print, empty, isset, list, unset, include, require, include_once, require_once Funktionen: Funktionen sind grundlegender Bestandteil der meisten Programmiersprachen. Funktionen sind vereinfacht ausgedrückt kleine Programme innerhalb eines Algorithmus, die beliebig oft aufgerufen werden können. Funktionen bedürfen für die Generierung von erwünschten Ausgabedaten, auch Eingabedaten, (mindesten einen Parameter, Argument), die sie entsprechend ihrer Aufgaben manipulieren, verändern können. Funktionen wie array_push(), array_merge(), array_splice(), sort(), array_diff() ermöglichen es Arrays zu modifizieren, zu sortieren und zu vergleichen. Neben den zur Verfügung gestellten Funktionen, gibt es noch die vom Benutzer generierten Funktionen. Funktionen sind ein Weg, wiederkehrende Aufgaben nur einmal zu schreiben. Algorithmus: Kurz gesagt: Algorithmen dienen dem Auffinden von Lösungen. Ein Algorithmus ist also eine Abfolge von Schritten, die der Lösung eines Problems dient. Dieser Vorgang ist insofern spezifisch, als dass er eine ganz bestimmte Lösung für die Aufgabenstellung liefert. Ein Algorithmus muss nicht unbedingt von mathematischer oder logischer Natur sein. Um als Algorithmus gelten zu können, muss ein Prozess folgende Eigenschaften haben: 1. Endlichkeit: Früher oder später muss der Algorithmus die Aufgabe lösen. 2. Wohldefiniertheit: Die Abfolge der Schritte muss präzise und leicht verständlich sein. In der Implementierung von Algorithmen kommen Computer zum Einsatz. Um einen brauchbaren Algorithmus zu erzeugen, müssen Computer also alle erforderlichen Schritte nachvollziehen können. 3. Effektivität: Ein Algorithmus muss für jeden Fall, den die Aufgabenstellung vorsieht, Ergebnisse berechnen können. Er sollte stets die Aufgabe lösen, für die er entwickelt wurde. Obwohl dabei Fehler auftreten können, sind diese eher eine Seltenheit und tauchen nur in Situationen auf, die im Rahmen des beabsichtigten Einsatzes akzeptabel sind. Arrays: Arrays sind Listen von Variablen. Sie sind überall dort nützlich, wo eine Anzahl ähnlicher Daten gespeichert werden muss, zum Beispiel eine Adressliste, eine Liste an Besuchern oder auch nur die ersten 100 Primzahlen. Die Array-Liste verfügt über einen Index, über den die jeweilige Variable abgerufen werden kann. Es gibt eindimensionale und mehrdimensionale Arrays. Mehrdimensionalen Arrays enthalten, statt einer einfachen Liste von Werten wiederum ein oder mehrere Arrays. Kontrollstrukturen: Neben den Variablen eines Programmes, gibt es innerhalb des Programmes Anweisungen, die den Programmablauf aufgrund von Variableninhalten beeinflussen. Es handelt sich um sogenannte Kontrollstrukturen. Mit Hilfe von Kontrollstrukturen können Bedingungen festgelegt werden, ob ein bestimmter Programmteil durchlaufen werden soll oder nicht. Man kann auch festlegen wie häufig ein bestimmter Codeabschnitt durchlaufen wird und welche Abbruchbedingung gilt. Beispiele für einige Kontrollstrukturen: if/elseif/else, switch, for, while oben  Sprachkonstrukte und das Konzept der Variablenfunktionen PHP unterstützt das Konzept der Variablenfunktionen. Wenn Sie an das Ende einer Variablen Klammern hängen, versucht PHP eine Funktion aufzurufen, deren Name der aktuelle Wert der Variablen ist. Sprachkonstrukte wie echo, print, exit, return, array(), die(), unset(), list(), isset(), empty() oder include() usw. sind keine Funktionen und können deshalb nicht mit Variablenfunktionen verwendet werden. Um die Gefahr der Verwechslung mit Funktionen zu verringern, sollte man die zulässigen Klammern bei den Sprachkonstrukten echo, print, return und exit weglassen. Beispiel 1 - aktuelles Arbeitsverzeichnis <?php $work_directory='getcwd'; echo $work_directory(); ?> Ausgabe 1 /opt/lampp/htdocs/www/work-x/Laboretum Beispiel 2 - ohne die Nutzung des Konzeptes der Variablenfunktionen <?php echo getcwd(); ?> Ausgabe 2 /opt/lampp/htdocs/www/work-x/Laboretum oben  Hinweise zu den Fehlermeldungen des PHP-Parsers Verschiedene Teile der Sprache PHP werden intern durch Typen repräsentiert. PHP gibt Bezeichner in Parserfehlermeldungen wie "Parse error: unexpected T_SR, expecting ',' or ';' in script.php on line 10." aus. In dieser eher kryptisch erscheinenden Parsermeldung sind erfahrungsgemäß nur der Dateiname und die Zeilennummer mit dem vermuteten Fehler von Bedeutung (siehe auch: www.php.net -> Liste der Parsertoken). Fehlermeldung für Zeile 0 ... der PHP-Parser hat die Datei nicht gefunden, d.h. es sollte der Dateiname der include- oder require-Dateien überprüft werden. Fehlermeldung für die letzte Zeile des PHP-Skripts ... mit einiger Sicherheit wurde eine Schleife (if ... else, for, while etc.) nicht geschlossen, d.h. es sollten alle Schleifen überprüft werden. Fehlermeldung z.B. für die Zeile 120 ... in diesem Fall sollte sich der Fehler in der Zeile 120 oder eine Zeile davor (Zeile 119) finden lassen. Dies ist für die Fehlermeldungen des PHP-Parsers der Regelfall. Fehlermeldung z.B. für die Zeile 160 ... es lässt sich in der Zeile 160 und in Zeile 159 auch nach hartnäckigen Suchen kein Fehler finden. In diesem Fall sollte man sich erfahrungsgemäß etwa die 30 Zeilen davor ansehen, also für das Beispiel die Zeilen 130 bis 160. In der Regel arbeitet der PHP-Parser aber sehr zuverlässig. Hinweis: Häufige Fehler sind z.B. vergessene Semikolons (;) am Zeilenende, vergessene einfache oder doppelte Hochkommas (', "), Tippfehler bei den Variablennamen, Syntaxfehler bei den verwendeten Funktionen, vergessene Klammern z.B. wenn innerhalb von if-Abfragen weitere Funktionen verwendet werden (z.B. if(empty($variable)) $variable="Irgendetwas";), vergessener Backslash - falls das Dollarzeichen, der Backslash oder die doppelten Hochkommas als normale Zeichen verwendet werden und nicht als Befehlszeichen (\$, \\, \"). Für die Anzeige der Fehlermeldungen durch den PHP-Server, muss möglicherweise in der Datei php.ini ([...]/etc/php.ini) der Eintrag display_errors=Off auf display_errors=On umgestellt werden. Damit der PHP-Server die Änderungen einlesen kann, muss bei einem bereits gestarteten Server, der PHP-Server neu gestartet werden. Unter XAMPP geschieht dies durch folgenden Terminal-Befehl: sudo /opt/lampp/lampp stop und sudo /opt/lampp/lampp start oben  Verzeichnisschutz mit .htaccess .htaccess-Dateien sind Konfigurationsdateien für Verzeichnisse, die zum Angebot der Webhoster gehören. So ist die .htaccess-Technik der übliche Weg, um nur bestimmten Benutzern den Zugriff auf bestimmte Daten zu erlauben. Beispiel: Verzeichnisschutz Es müssen zwei Dateien angelegt werden, .htaccess und .htpasswd (Hinweis: den Punkt vor den Namen nicht vergessen) Datei: .htaccess # .htaccess-Datei für ein Web-Verzeichnis AuthUserFile /data/members/htdocs/www/romulus/.htpasswd AuthName "Service-Techniker" AuthType Basic require user aristoteles Janine Anke Datei: .htpasswd aristoteles:16s0Yq0oYZSB2 Janine:INw2mPEH.owe2 Anke:INh6DHvyejvf2 Diese beiden Dateien sind in dem zu schützenden Verzeichnis abzulegen. Alle Besucher des Web-Projekts, die nun versuchen, auf das Verzeichnis mit der .htaccess-Datei zuzugreifen, bekommen von ihrem Browser einen Dialog angeboten, in dem sie Benutzernamen und Passwort eingeben müssen. Nur Besucher, die sich mit einer gültigen Kombination aus Benutzernamen und Passwort anmelden, haben Zugriff auf das Verzeichnis. Erläuterung: .htaccess Die erste Zeile in der Datei .htaccess ist lediglich ein Kommentar. Solche Kommentarzeilen müssen mit dem Gatterzeichen (#) eingeleitet werden. Alle anderen Zeilen haben einen einheitlichen Aufbau: sie beginnen mit Schlüsselwörtern und dahinter folgen, durch ein oder mehrere Leerzeichen getrennt, Angaben dazu. Leerzeilen sind erlaubt. Zeilen mit Angaben, die der Web-Server nicht interpretieren kann, führen jedoch möglicherweise zu einem »Internal Server Error«. Bei AuthName kann ein frei wählbarer Name angegeben werden, der in der Dialogbox des Browsers erscheint. Bei AuthUserFile wird die Datei angegeben, in der die autorisierten Benutzer und ihre Passwörter stehen. Es muss der vollständige absolute Pfadname angegeben werden (siehe auch: getcwd()). Also nicht der Pfad ab dem Wurzelverzeichnis Ihres Web-Projekts, sondern ab dem Wurzelverzeichnis des Server-Rechners. Mit AuthType wird die Art der Authentifizierung bezeichnet. Die meist gebrauchte Angabe ist Basic für die sogenannte HTTP-Basic-Authentication (einfache Authentifizierung über HTTP). Dabei stehen die Benutzernamen und die zugehörigen Passwörter in einer noch anzugebenden Datei (siehe: AuthUserFile). Diese Methode verlangt aber, dass das Passwort unverschlüsselt vom Browser an den Webserver übermittelt wird. Sie ist daher nicht wirklich sicher. Die Alternative für den Authentifizierungstyp ist Digest. Dabei werden Passwörter bereits in verschlüsselter Form angefordert, allerdings beherrschen dies nicht alle Internet-Browser. Sie müssen daher entscheiden, was für Sie Vorrang hat: höhere Sicherheit oder die Berücksichtigung von möglichst vielen Internet-Browsern und Clients, die nur die einfache Authentifizierung unterstützen. Bei require user geben Sie einzelnen Benutzer an - mehrere Benutzer sind durch ein Leerzeichen zu trennen (z.B. require user aristoteles sabine ronald). Erläuterung: .htpasswd Auch in dieser Datei sind Kommentarzeilen erlaubt, eingeleitet durch #. Ansonsten enthält jede Zeile dieser Datei einen Benutzernamen und gleich dahinter, durch einen Doppelpunkt getrennt, das Passwort. Bei Unix-Systemen sind das aber nicht die Passwörter selbst, sondern die verschlüsselten Passwörter. Dazu müssen die Passwörter mit Hilfe eines Verschlüsselungsalgorithmus verschlüsselt werden (siehe auch: password_hash() und Beispiel - htaccess-Dateien anlegen - weiter unten). Datei: .htaccess #Verzeichnisschutz für Dateien mit ausführbaren Programmcode ErrorDocument 500 "Für dieses Verzeichnis besitzt Du keine Zugriffsrechte!" ErrorDocument 403 "Für dieses Verzeichnis besitzt Du keine Zugriffsrechte!" <FILES *.p*> Order allow,deny deny from all </FILES> <FILES *.a*> Order allow,deny deny from all </FILES> <FILES *.s*> Order allow,deny deny from all </FILES> <FILES *.js*> Order allow,deny deny from all </FILES> Datei: .htaccess #Verzeichnisschutz: verhindert das Anzeigen von Dateien im Browser Options -Indexes None Datei: .htaccess #Verzeichnisschutz: verhindert das Anzeigen von bestimmten Datei-Typen im Browser IndexIgnore .htaccess *.csv *.jpg Datei: .htaccess # das Ausführen von CGI-Programmen aktivieren Options +ExeCGI <FILES *.cgi> SetHandler cgi-script </FILES> Datei: .htaccess #Verzeichnisschutz: verhindert das Anzeigen von Dateien im Browser und # verhindert auch das direkte Aufrufen einer Datei im Browser, dessen Namen bekannt ist. <FilesMatch ".*"> Order deny,allow Deny from all </FilesMatch> Options -Indexes None Datei: .htaccess #Verzeichnisschutz: verhindert das Anzeigen von Dateien im Browser und # verhindert das direkte Aufrufen von CSV-Dateien im Browser, dessen Namen bekannt ist. <FilesMatch "\.csv$"> Order deny,allow Deny from all </FilesMatch> Options -Indexes None bzw. # Verhindert das direkte Aufrufen mehrerer Datei-Typen <FilesMatch "\.(csv|php|htm|html|pl)$"> Order deny,allow Deny from all </FilesMatch> Options -Indexes None bzw. # Verhindert das direkte Aufrufen mehrerer Datei-Typen, auch der .htaccess-Datei <FilesMatch "(^\.|\.csv$|\.php$|\.htm$|\.html$|\.pl$)"> Order deny,allow Deny from all </FilesMatch> Options -Indexes None Bestimmte Dateien sperren Verhindert das alle Dateien die mit einem Punkt beginnen, z.B. die .htaccess- oder die .htpasswd-Datei, vom Server nicht ausgeliefert werden: <FilesMatch "^\." > deny from all </FilesMatch> Bestimmte Dateitypen zum Download freigeben Für Downloads ist es vielleicht sinnvoll bestimmte Dateien direkt zum downloaden anzugeben: <FilesMatch "\.(gz|pdf|zip|exe)$"> ForceType application/octet-stream </FilesMatch> Hinweis: Der Verzeichnisschutz gilt für das aktuelle Verzeichnis und einschließlich seiner Unterverzeichnisse. Ob der Verzeichnisschutz mit der htaccess-Datei funktioniert, hängt von den Einstellungen des Web-Hosters ab. Mitunter ist die Verwendung von htaccess auf einige wenige Befehle beschränkt (Lösung: Handbuch des Webhosters lesen oder ausprobieren). Beispiel - htaccess-Dateien anlegen (Dateiname: obelix.php) <?php // HTACCESS $obelix_file_array=array("./.htaccess", "./.htpasswd", "./obelix.php"); $messages=""; if(!empty($_POST["kw"]) && strlen($_POST["kw"]) >= 5 && strlen($_POST["kw"]) <= 128 && !empty($_POST["pw"]) && strlen($_POST["pw"]) >= 5 && strlen($_POST["pw"]) <= 128) { if(!file_exists($obelix_file_array[0]) && !file_exists($obelix_file_array[1])) { $htaccess_password_hash=password_hash($_POST["pw"],PASSWORD_DEFAULT); $content_htaccess = "AuthUserFile " . getcwd() . "/" . basename($obelix_file_array[1]) . "\n"; $content_htaccess .="AuthName \"Schutzraum:\"\n"; $content_htaccess .="AuthType Basic\n"; $content_htaccess .="\n"; $content_htaccess .="require user " . $_POST["kw"] ."\n"; $content_htpasswd=$_POST["kw"] . ":" . $htaccess_password_hash . "\n"; if($datei_w = @fopen($obelix_file_array[0],'w')) { @flock($datei_w,2); @fwrite($datei_w,$content_htaccess); @flock($datei_w,3); @fclose($datei_w); $messages .="Die Datei " . $obelix_file_array[0] . " wurde angelegt!!<br><br>"; } else { $messages .="ACHTUNG: Die HTACCESS-Datei " . $obelix_file_array[0] . " konnte nicht angelegt werden!!<br> <b>Grund: </b>M&ouml;glicherweise besitzen Sie unzureichende Zugriffsrechte.<br><br>"; } if($datei_w = @fopen($obelix_file_array[1],'w')) { @flock($datei_w,2); @fwrite($datei_w,$content_htpasswd); @flock($datei_w,3); @fclose($datei_w); $messages .="Die Datei " . $obelix_file_array[1] . " wurde angelegt!!<br><br>"; } else { $messages .="ACHTUNG: Die HTACCESS-Datei " . $obelix_file_array[1] . " konnte nicht angelegt werden!!<br> <b>Grund: </b>M&ouml;glicherweise besitzen Sie unzureichende Zugriffsrechte.<br><br>"; } } else { $messages="ACHTUNG: Es existieren schon HTACCESS-Dateien, d.h. es k&ouml;nnen keine weiteren HTACCESS-Dateien angelegt werden!!<br><br>"; } } else { if(!empty($_POST["kw"]) || !empty($_POST["pw"])) { $messages="ACHTUNG: Es m&uuml;ssen beide Felder ausgef&uuml;llt werden und die Zeichenl&auml;nge sollte jeweils mindestens 5 Zeichen betragen!!<br><br>"; } } $content_body ="<form name=\"form5\" action=\"" . $obelix_file_array[2] . "\" method=\"post\">\n"; $content_body .=" <tr>\n"; $content_body .=" <td colspan=\"3\" style=\"text-align:center;\"><h3>HTACCESS-DATEIEN ANLEGEN</h3></td>\n"; $content_body .=" </tr>\n"; $content_body .=" <tr>\n"; $content_body .=" <td colspan=\"3\" style=\"text-align:center;\">HTACCESS-Dateien k&ouml;nnen nur bei ausreichenden Zugriffsrechten angelegt werden!<br> Landestypische Umlauten sollten vermieden werden.</td>\n"; $content_body .=" </tr>\n"; $content_body .=" <tr>\n"; $content_body .=" <td colspan=\"3\">&nbsp;</td>\n"; $content_body .=" </tr>\n"; $content_body .=" <tr>\n"; $content_body .=" <td style=\"text-align:right;\">LOGIN-NAME: </td>\n"; $content_body .=" <td><input type=\"text\" name=\"kw\" value=\"\" size=\"30\" maxlength=\"128\"></td>\n"; $content_body .=" <td>&nbsp;</td>\n"; $content_body .=" </tr>\n"; $content_body .=" <tr>\n"; $content_body .=" <td style=\"text-align:right;\">PASSWORT: </td>\n"; $content_body .=" <td><input type=\"password\" name=\"pw\" value=\"\" size=\"30\" maxlength=\"128\"></td>\n"; $content_body .=" <td>&nbsp;</td>\n"; $content_body .=" </tr>\n"; $content_body .=" <tr>\n"; $content_body .=" <td colspan=\"3\">&nbsp;</td>\n"; $content_body .=" </tr>\n"; $content_body .=" <tr>\n"; $content_body .=" <td colspan=\"2\" style=\"text-align:center;\"><input type=\"submit\" name=\"button\" value=\"HTACCESS-DATEIEN ANLEGEN\"></td>\n"; $content_body .=" <td>&nbsp;</td>\n"; $content_body .=" </tr>\n"; $content_body .=" <tr>\n"; $content_body .=" <td colspan=\"3\">&nbsp;</td>\n"; $content_body .=" </tr>\n"; $content_body .=" <tr>\n"; $content_body .=" <td colspan=\"3\" style=\"text-align:center; color:#FF0000;\">" . $messages . "</td>\n"; $content_body .=" </tr>\n"; $content_body .="</form>\n"; ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>HTACCESS</title> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <style type="text/css"> <!-- body { margin:10px 15px 15px 10px; font-family:"Nimbus Roman No9 L","Times New Roman"; background-color:#FFFFFF; color:#000000; } --> </style> </head> <body> <table height="100%" border="0" align="center"> <?php echo $content_body; ?> </table> </body> </html> oben  Binärdaten in einer MySQLi-Tabelle speichern 1. MySQLi-Tabelle erstellen Die MySQLi-Tabelle für Binärdaten sollte möglichst nur für Binärdaten genutzt werden, da bei Tabellen mit vielen unterschiedlichen Feldtypen die Performance einbrechen kann. Die Tabelle enthält neben dem Feld für die Binärdatei(en) (audio_data MEDIUMBLOB) nur noch die Felder mit dem Primärschlüssel (id SMALLINT(6)), das Feld mit dem Titel der Audiodatei (audio_file_titel VARCHAR(255)), das Feld mit der Größe der Binärdatei (audio_data_size INT(10)) und das Feld mit dem Status des Datensatzes (status TINYINT(3)). Folgende Feldtypen stehen für Binärdaten zur Verfügung: TINYBLOB (255 Byte), BLOB (65 kByte), MEDIUMBLOB (knapp 16 MByte) und LONGBLOB (knapp 4,1 GByte). Datei: create_table_audio_data.php <?php $host_name='host.domain.de'; $db_name='DB12345'; $db_user_name='U12345'; $db_password='secret123'; $table_audio_data = "CREATE TABLE `audio_data` ( `id` SMALLINT(6) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `audio_file_titel` VARCHAR(255), `audio_data` MEDIUMBLOB, `audio_data_size` INT(10), `status` TINYINT(3) UNSIGNED NOT NULL ) COMMENT = 'Speicherung von Audio-Daten'"; if(extension_loaded('mysqli') && (!empty(@ini_get('mysqli.allow_local_infile')) || !empty(@ini_get('mysqli.allow_persistent')))) { if($db_connect = @mysqli_connect($host_name, $db_user_name, $db_password, $db_name)) { if(@mysqli_query($db_connect, $table_audio_data)) { print "Hinweis: Die neue MySQLi-Tabelle steht jetzt zur Verfügung!!"; } else { print "Hinweis: Die MySQLi-Tabelle konnte nicht erstellt werden!!"; } @mysqli_close($db_connect) or die("Das Schließen der Verbindung zur SQL-Datenbank - " . $db_name . " - ist fehlgeschlagen!!"); } else { print "Hinweis: Die Verbindung zur Datenbank - " . $db_name . " - konnte nicht hergestellt werden!!"; } } else { print "Hinweis: Die MySQLi-Bibliothek (MySQLi-Extension) ist nicht verfügbar oder der Zugriff auf die MySQLi-Datenbank wurde deaktiviert!!"; } ?> 2. Upload Die Dateien werden z.B. mit einem HTML-Formular ( <form method="POST" action="./upload_audio_data.php" enctype="multipart/form-data"> [...] </form> ) über das http-Protokoll zum Server hochgeladen und mittels eines INSERT-Kommandos in die MySQLi-Tabelle eingefügt. Nach einer MySQL-Standardinstallation können keine Daten größer als 1 Megabyte in die Datenbank-Tabelle (MySQL-Parameter: max_allowed_packet) eingefügt werden. Sollen Daten größer als 1 MByte gespeichert werden, so muss der MySQL-Parameter max_allowed_packet in der MySQL-Konfigurationsdatei entsprechend geändert werden. Für die Änderung sind ausreichende Rechte an der MySQL-Datenbank erforderlich (siehe weiter unten: Punkt 6. Einschränkungen). Einige MIME-Typen: mp3 (audio/mpeg oder audio/x-mpeg), zip (application/zip), wav (audio/x-wav), gif (image/gif), jpg (image/jpeg), png (image/png), mp4 (video/mp4), avi (video/x-msvideo). MIME steht für Internet Media Type. Ursprünglich stand die Abkürzung für Multipurpose Internet Mail Extension und wurde für Dateianhänge von E-Mails verwendet. Hinweis: Binärdaten können auch reservierte Sonderzeichen enthalten. Diese reservierten Sonderzeichen müssen mit einem Backslash entschärft werden (z.B. addslashes() bzw. mysqli_real_escape_string()). Beim Aufruf und Anzeige dieser SQL-Daten aus der Datenbank-Tabelle, können die bei der Speicherung hinzugefügten Backslashs unbeachtet bleiben. Datei: upload_audio_data.php <?php $upload_file_status=1; // 0 .. deaktiviert, zur Loeschung vorgesehen, 1 .. aktiv, 2 .. Sonderstatus, Anzeige der Datei nur an besonderen Tagen $upload_file_max_size = 15 * 1024 * 1024; // maximal 15 MByte $host_name='host.domain.de'; $db_name='DB12345'; $db_user_name='U12345'; $db_password='secret123'; $db_audio_table = "audio_data"; $upload_message=''; if(!empty($_POST['upload_audio_data'])) { if(!empty($_POST['upload_audio_titel']) && // nur englisches Alphabet, Zahlen, Unterstrich und Leerzeichen fuer den Audiodatei-Titel zulaessig preg_match("@^([a-zA-Z0-9_ ]{1,128})$@", $_POST['upload_audio_titel']) && !empty($_FILES['audio_file']['name']) && !empty($_FILES['audio_file']['size']) && !empty($_FILES['audio_file']['tmp_name']) && $_FILES['audio_file']['error'] == 0 && // nur MP3-Audiodateien zulaessig preg_match("#(audio/mpeg|audio/x-mpeg)#i", $_FILES['audio_file']['type'])) { if($_FILES['audio_file']['size'] > 10 && $_FILES['audio_file']['size'] <= $upload_file_max_size) { if($file_open = fopen($_FILES['audio_file']['tmp_name'],"r")) { $audio_file_size = filesize($_FILES['audio_file']['tmp_name']); $audio_file_data = fread($file_open, $audio_file_size); // Datei wird eingelesen fclose($file_open); if(extension_loaded('mysqli') && (!empty(@ini_get('mysqli.allow_local_infile')) || !empty(@ini_get('mysqli.allow_persistent')))) { if($db_connect = @mysqli_connect($host_name, $db_user_name, $db_password, $db_name)) { // $audio_file_data = mysqli_real_escape_string($db_connect, $audio_file_data); // reservierte Sonderzeichen werden mit einem Backslash geschuetzt $audio_file_data = addslashes($audio_file_data); // reservierte Sonderzeichen werden mit einem Backslash geschuetzt $insert_audio_data = "INSERT INTO " . $db_audio_table . " (audio_file_titel, audio_data, audio_data_size, status) VALUES ('" . $_POST['upload_audio_titel'] . "', '" . $audio_file_data . "', " . $audio_file_size . ", " . $upload_file_status . ")"; if(@mysqli_query($db_connect, $insert_audio_data)) { $upload_message = "Hinweis: Die Upload-Datei wurde in der SQL-Datenbank aufgenommen!!"; } else { $upload_message = "Hinweis: Die Aufnahme der Upload-Datei in die SQL-Datenbank ist fehlgeschlagen!!"; } @mysqli_close($db_connect) or die("Das Schließen der Verbindung zur SQL-Datenbank - " . $db_name . " - ist fehlgeschlagen!!"); } else { $upload_message = "Hinweis: Die Verbindung zur Datenbank - " . $db_name . " - konnte nicht hergestellt werden!!"; } } else { $upload_message = "Hinweis: Die MySQLi-Bibliothek (MySQLi-Extension) ist nicht verfügbar oder der Zugriff auf die MySQLi-Datenbank wurde deaktiviert!!"; } } else { $upload_message = "Der Upload der Datei " . $_FILES['file']['name'] . " konnte nicht durchgeführt werden!!"; } } else { $upload_message = "Hinweis: Unzulässige Dateigröße!!"; } } else { $upload_message = "Hinweis: Es sind alle Felder korrekt auszufüllen bzw. die maximale Dateigröße wurde überschritten!!"; } } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Upload einer Audiodatei</title> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <style type="text/css"> <!-- body { margin:10px 15px 15px 10px; font-family:"Nimbus Roman No9 L","Times New Roman"; background-color:#FFFFFF; color:#000000; } --> </style> </head> <body> <form name="form1" enctype="multipart/form-data" method="post" action="./upload_audio_data.php"> <table height="60%" border="0" align="center"> <tr> <td colspan="2"><h2 style="text-align:center;">UPLOAD EINER AUDIO-DATEI</h2></td> </tr> <tr> <td colspan="2"><?php echo $upload_message; ?></td> </tr> <tr> <td style="text-align:right;">Titel der Audiodatei:</td> <td><input type="text" name="upload_audio_titel" value="" size="50" maxlength="128"></td> </tr> <tr> <td colspan="2"><input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $upload_file_max_size; ?>"></td> </tr> <tr> <td style="text-align:right;">Audiodatei auswählen:</td> <td><input type="file" name="audio_file"></td> </tr> <tr> <td colspan="2"> Hinweis: Für den Titel der Audiodatei sind nur das englisches Alphabet, Zahlen, Unterstrich, Minus- und das Leerzeichen erlaubt. Die Datenbank nimmt nur MP3-Audiodateien (Type: audio/mpeg bzw. audio/x-mpeg) auf. </td> </tr> <tr> <td colspan="2">&nbsp;</td> </tr> <tr> <td colspan="2" style="text-align:center;"><input type="submit" name="upload_audio_data" value="Upload der Audio-Datei starten"></td> </tr> </table> </form> </body> </html> 3. Anzeige der gespeicherten Audiodateien Im Beispiel werden die Audio-Dateien mit dem Status 1 immer zum Download zur Verfügung gestellt, die Audio-Dateien mit dem Status 2 nur an Sonntagen und die Audio-Dateien mit dem Status 0 sind zur Löschung freigegeben (Datei: audio_data_administration.php). Die PHP-Funktion date() bietet noch eine Reihe von weiteren Möglichkeiten für die Bereitstellung von Audio-Dateien mit dem Sonderstatus 2 zu bestimmten Terminen. Datei: audio_files_view.php <?php $host_name='host.domain.de'; $db_name='DB12345'; $db_user_name='U12345'; $db_password='secret123'; $db_audio_table = "audio_data"; $download_filename_path = "./audio_data_download.php"; $audio_file_type="mp3"; $current_weekday = date("w"); $audio_data_campaign=0; // 0 .. Sonntag, 1 .. Montag, ..., 6 .. Sonnabend $audio_title_style=''; $view_message=''; $audio_data_html=''; if(file_exists($download_filename_path)) { if(extension_loaded('mysqli') && (!empty(@ini_get('mysqli.allow_local_infile')) || !empty(@ini_get('mysqli.allow_persistent')))) { if($db_connect = @mysqli_connect($host_name, $db_user_name, $db_password, $db_name)) { // Datensaetze mit dem Status 0 (0 .. deaktiviert, zum loeschen vorgesehen) werden nicht angezeigt $sql_command = "SELECT id, audio_file_titel, audio_data_size, status FROM " . $db_audio_table . " WHERE status > 0 ORDER BY ID"; $sql_result_array=array(); if($audio_data_result = @mysqli_query($db_connect, $sql_command)) { $current_result_field_count = @mysqli_num_fields($audio_data_result); while($data_record_row = @mysqli_fetch_row($audio_data_result)) { $sql_result_row_array=array(); for($k=0;$k<$current_result_field_count;$k++){ array_push($sql_result_row_array, $data_record_row[$k]); } if(!empty($sql_result_row_array[3]) && $sql_result_row_array[3] == 1) { // Status .. 1, aktive Datensaetze array_push($sql_result_array, $sql_result_row_array); } elseif(!empty($sql_result_row_array[3]) && $sql_result_row_array[3] == 2 && $current_weekday == $audio_data_campaign) { // Sonderstatus .. 2, Anzeige der Datei nur an besonderen Tagen array_push($sql_result_array, $sql_result_row_array); } unset($sql_result_row_array); } @mysqli_free_result($audio_data_result); $sql_result_array_count = count($sql_result_array); for($i=0;$i<$sql_result_array_count;$i++){ $audio_title_style=''; if(!empty($sql_result_array[$i][3]) && $sql_result_array[$i][3] == 2) $audio_title_style = ' class="red"'; if(!empty($audio_file_type) && !empty($sql_result_array[$i][1])) { $audio_filename = str_replace(" ","_", $sql_result_array[$i][1] . "." . $audio_file_type); } else { $audio_filename = "no_name.mp3"; } $audio_data_html .= " <tr>\n"; $audio_data_html .= " <td" . $audio_title_style . ">" . $sql_result_array[$i][1] . "</td>\n"; $audio_data_html .= " <td><a href=\"" . $download_filename_path . "?ID=" . $sql_result_array[$i][0] . "&AUDIO_FILENAME=" . $audio_filename . "&AUDIO_FILESIZE=" . $sql_result_array[$i][2] . "\">Download</a></td>\n"; $audio_data_html .= " </tr>\n"; } if(empty($sql_result_array_count)) $view_message = "Hinweis: Die Datenbank enthält aktuell keine Audiodaten!!"; } else { $view_message = "Hinweis: Die SQL-Anfrage - " . $sql_command . " - konnte nicht ausgeführt werden!!"; } @mysqli_close($db_connect) or die("Das Schließen der Verbindung zur SQL-Datenbank - " . $db_name . " - ist fehlgeschlagen!"); } else { $view_message = "Hinweis: Die Verbindung zur Datenbank - " . $db_name . " - konnte nicht hergestellt werden!!"; } } else { $view_message = "Hinweis: Die MySQLi-Bibliothek (MySQLi-Extension) ist nicht verfügbar oder der Zugriff auf die MySQLi-Datenbank wurde deaktiviert!!"; } } else { $view_message = "Hinweis: Der Download von Dateien ist zur Zeit nicht möglich!!"; } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Anzeige der gespeicherten Audiodateien</title> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <style type="text/css"> <!-- body { margin:10px 15px 15px 10px; font-family:"Nimbus Roman No9 L","Times New Roman"; background-color:#FFFFFF; color:#000000; } .red { color:#FF0000; } --> </style> </head> <body> <table height="60%" border="0" align="center"> <tr> <td colspan="2"><h2 style="text-align:center;">ANZEIGE DER AUDIO-DATEIEN</h2></td> </tr> <tr> <td colspan="2"><?php echo $view_message; ?></td> </tr> <?php echo $audio_data_html; ?> </table> </body> </html> 4. Download Durch die Auswahl einer Audiodatei im PHP-Skript audio_files_view.php wird das Skript audio_data_download.php aufgerufen. Die Datei audio_files_view.php übergibt an die Downloaddatei die Get-Variablen ID, AUDIO_FILENAME und AUDIO_FILESIZE. Durch die Zeile header("Content-Type:audio/mpeg"); wird der Standardtyp text/html auf audio/mpeg umgestellt. Im Browser erscheint jetzt die Meldung, was jetzt mit der Datei geschehen soll: Abspielen mit dem Standardprogramm oder Speichern auf der Festplatte. Datei: audio_data_download.php <?php $host_name='host.domain.de'; $db_name='DB12345'; $db_user_name='U12345'; $db_password='secret123'; $db_audio_table = "audio_data"; $db_audio_field = "audio_data"; if(!empty($_GET['ID']) && !empty($_GET['AUDIO_FILENAME']) && !empty($_GET['AUDIO_FILESIZE'])) { if(extension_loaded('mysqli') && (!empty(@ini_get('mysqli.allow_local_infile')) || !empty(@ini_get('mysqli.allow_persistent')))) { if($db_connect = @mysqli_connect($host_name, $db_user_name, $db_password, $db_name)) { $sql_command = "SELECT " . $db_audio_field . " FROM " . $db_audio_table . " WHERE id=" . $_GET['ID'] . ""; if($audio_data_result = @mysqli_query($db_connect, $sql_command)) { $data_record_row = @mysqli_fetch_row($audio_data_result); @mysqli_free_result($audio_data_result); // Standardtyp von text/html auf audio/mpeg (MP3) umstellen header("Content-Type:audio/mpeg"); // Dateiname festlegen header("Content-Disposition: attachment; filename=" . $_GET['AUDIO_FILENAME'] . ""); // Zwischenspeichern auf Proxies verhindern header("Cache-Control: post-check=0, pre-check=0"); // Dateigroesze fuer die Downloadzeit-Berechnung header("Content-Length: " . $_GET['AUDIO_FILESIZE'] . ""); // print stripslashes($data_record_row[0]); print $data_record_row[0]; } else { print "Hinweis: Die SQL-Anfrage - " . $sql_command . " - konnte nicht ausgeführt werden!!"; } @mysqli_close($db_connect) or die("Das Schließen der Verbindung zur SQL-Datenbank - " . $db_name . " - ist fehlgeschlagen!"); } else { print "Hinweis: Die Verbindung zur Datenbank - " . $db_name . " - konnte nicht hergestellt werden!!"; } } else { print "Hinweis: Die MySQLi-Bibliothek (MySQLi-Extension) ist nicht verfügbar oder der Zugriff auf die MySQLi-Datenbank wurde deaktiviert!!"; } } ?> 5. Verwaltung der Audio-Daten Durch die Datei audio_data_administration.php kann der Status der Binärdateien geändert werden. Binärdateien mit dem Status 0 können hier an dieser Stelle gelöscht werden oder für die Anzeige durch die Datei audio_files_view.php ausgeschlossen werden. Status 0 ... deaktiviert, zur Löschung vorgesehen (Titel der Audiodatei: blau), Status 1 ... aktiv, Status 2 ... Sonderstatus, Anzeige der Datei nur an besonderen Tagen (Titel der Audiodatei: rot) Datei: audio_data_administration.php <?php $host_name='host.domain.de'; $db_name='DB12345'; $db_user_name='U12345'; $db_password='secret123'; $db_audio_table = "audio_data"; $kilo_byte=1024; $mega_byte= 1024 * 1024; $audio_title_style=''; $audio_data_html=''; $administration_message=''; if(extension_loaded('mysqli') && (!empty(@ini_get('mysqli.allow_local_infile')) || !empty(@ini_get('mysqli.allow_persistent')))) { if($db_connect = mysqli_connect($host_name, $db_user_name, $db_password, $db_name)) { if(!empty($_POST['administration_audio_data']) && !empty($_POST['audio_data_id']) && is_array($_POST['audio_data_id']) && !empty($_POST['audio_data_status']) && is_array($_POST['audio_data_status'])) { // Bereich: Update des Tabelleninhaltes $audio_data_id_array_count = count($_POST['audio_data_id']); for($k=0;$k<$audio_data_id_array_count;$k++){ $current_id = trim($_POST['audio_data_id'][$k]); $current_status = trim($_POST['audio_data_status'][$k]); if(preg_match('/^[0-9]{1,6}$/', $current_id) && preg_match('/^[0-2]{1}$/', $current_status)) { $sql_command_update = "UPDATE " . $db_audio_table . " SET status=" . $current_status . " WHERE id=" . $current_id; if(!mysqli_query($db_connect, $sql_command_update)) { $sql_return_code=1; break; } } else { $sql_return_code=1; break; } } if(empty($sql_return_code)) { $administration_message = 'Hinweis: Die SQL-Anfrage wurde ausgeführt!!'; } else { $administration_message = 'Hinweis: Die SQL-Anfrage - ' . $sql_command_update . ' - konnte nicht ausgeführt werden!!'; } // Bereich: Loeschung von Datensaetze if(empty($sql_return_code)) { if(!empty($_POST['delete_audio_data']) && $_POST['delete_audio_data'] == 1) { $sql_command_delete = "DELETE FROM " . $db_audio_table . " WHERE status=0"; if(!mysqli_query($db_connect, $sql_command_delete)) { $administration_message = 'Hinweis: Die SQL-Anfrage - ' . $sql_command_delete . ' - konnte nicht ausgeführt werden!!'; } } } } // Bereich: Anzeige des Tabelleninhaltes $sql_command_select = "SELECT id, audio_file_titel, audio_data_size, status FROM " . $db_audio_table . " ORDER BY id"; $sql_result_array=array(); if($audio_data_result = mysqli_query($db_connect, $sql_command_select)) { $current_result_field_count = mysqli_num_fields($audio_data_result); while($data_record_row = mysqli_fetch_row($audio_data_result)) { $sql_result_row_array=array(); for($k=0;$k<$current_result_field_count;$k++){ array_push($sql_result_row_array, $data_record_row[$k]); } array_push($sql_result_array, $sql_result_row_array); unset($sql_result_row_array); } mysqli_free_result($audio_data_result); $sql_result_array_count = count($sql_result_array); for($i=0;$i<$sql_result_array_count;$i++){ $audio_title_style=''; if(isset($sql_result_array[$i][3]) && $sql_result_array[$i][3] == 0) $audio_title_style = ' class="blue"'; if(!empty($sql_result_array[$i][3]) && $sql_result_array[$i][3] == 2) $audio_title_style = ' class="red"'; if(!empty($sql_result_array[$i][2]) && preg_match('/^[0-9]{1,8}$/', $sql_result_array[$i][2])) { if($sql_result_array[$i][2] >= $mega_byte) { $filesize_round = round($sql_result_array[$i][2] / $mega_byte, 1); $audio_data_filesize = $filesize_round . " MByte"; } elseif($sql_result_array[$i][2] < $mega_byte && $sql_result_array[$i][2] >= $kilo_byte) { $filesize_round = round($sql_result_array[$i][2] / $kilo_byte, 1); $audio_data_filesize = $filesize_round . " kByte"; } else { $audio_data_filesize = $sql_result_array[$i][2] . " Byte"; } } else { $audio_data_filesize = "no value"; } $audio_data_html .= " <tr>\n"; $audio_data_html .= " <td><input type=\"text\" name=\"audio_data_id[]\" value=\"" . $sql_result_array[$i][0] . "\" size=\"2\" maxlength=\"6\" readonly></td>\n"; $audio_data_html .= " <td" . $audio_title_style . ">" . $sql_result_array[$i][1] . "</td>\n"; $audio_data_html .= " <td>" . $audio_data_filesize . "</td>\n"; $audio_data_html .= " <td>\n"; $audio_data_html .= " <select name=\"audio_data_status[]\">\n"; if(isset($sql_result_array[$i][3]) && $sql_result_array[$i][3] == 0) { $audio_data_html .= " <option value=\"0\" selected>Status 0</option>\n"; $audio_data_html .= " <option value=\"1\">Status 1</option>\n"; $audio_data_html .= " <option value=\"2\">Status 2</option>\n"; } elseif(!empty($sql_result_array[$i][3]) && $sql_result_array[$i][3] == 1) { $audio_data_html .= " <option value=\"0\">Status 0</option>\n"; $audio_data_html .= " <option value=\"1\" selected>Status 1</option>\n"; $audio_data_html .= " <option value=\"2\">Status 2</option>\n"; } elseif(!empty($sql_result_array[$i][3]) && $sql_result_array[$i][3] == 2) { $audio_data_html .= " <option value=\"0\">Status 0</option>\n"; $audio_data_html .= " <option value=\"1\">Status 1</option>\n"; $audio_data_html .= " <option value=\"2\" selected>Status 2</option>\n"; } else { $audio_data_html .= " <option value=\"0\" selected>Status 0</option>\n"; $audio_data_html .= " <option value=\"1\">Status 1</option>\n"; $audio_data_html .= " <option value=\"2\">Status 2</option>\n"; } $audio_data_html .= " </select>\n"; $audio_data_html .= " </td>\n"; $audio_data_html .= " </tr>\n"; } } else { $administration_message = "Hinweis: Die SQL-Anfrage - " . $sql_command_select . " - konnte nicht ausgeführt werden!!"; } mysqli_close($db_connect) or die("Das Schließen der Verbindung zur SQL-Datenbank - " . $db_name . " - ist fehlgeschlagen!"); } else { $administration_message = "Hinweis: Die Verbindung zur Datenbank - " . $db_name . " - konnte nicht hergestellt werden!!"; } } else { $administration_message = "Hinweis: Die MySQLi-Bibliothek (MySQLi-Extension) ist nicht verfügbar oder der Zugriff auf die MySQLi-Datenbank wurde deaktiviert!!"; } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Verwaltung der gespeicherten Audiodateien</title> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <style type="text/css"> <!-- body { margin:10px 15px 15px 10px; font-family:"Nimbus Roman No9 L","Times New Roman"; background-color:#FFFFFF; color:#000000; } .right { text-align:right; } .blue { color:#0000FF; } .red { color:#FF0000; } --> </style> </head> <body> <form name="form2" method="post" action="./audio_data_administration.php"> <table height="60%" border="0" align="center"> <tr> <td colspan="4"><h2 style="text-align:center;">VERWALTUNG DER AUDIO-DATEIEN</h2></td> </tr> <tr> <td colspan="4"><?php echo $administration_message; ?></td> </tr> <tr> <td colspan="4">&nbsp;</td> </tr> <tr> <th>ID</th> <th>TITEL</th> <th>FILESIZE</th> <th>STATUS</th> </tr> <?php echo $audio_data_html; ?> <tr> <td colspan="4">&nbsp;</td> </tr> <tr> <td> </td> <td colspan="2" class="right">Audio-Daten mit dem Status 0 löschen</td> <td><input type="checkbox" name="delete_audio_data" value="1"></td> </tr> <tr> <td colspan="4">&nbsp;</td> </tr> <tr> <td colspan="4" style="text-align:center;"><input type="submit" name="administration_audio_data" value="Änderungen an die Datenbank übergeben"></td> </tr> </table> </form> </body> </html> 6. Einschränkungen - Da eine hochgeladene, temporäre Datei über fread() komplett in den Speicher gelesen wird, sollten der Parameter memory_limit in der Konfigurationsdatei php.ini (siehe auch: phpinfo();) überprüft werden. Der Parameter sollte größer sein als die größte Binärdatei. - Steht in der PHPINFO-Ausgabe (phpinfo();) bei memory_limit ein 16M, so kann für das entsprechende Feld der Feldtyp MEDIUMBLOB eingetragen werden (siehe auch: 1. MySQLi-Tabelle erstellen). - Steht in der PHPINFO-Ausgabe (phpinfo();) post_max_size ein 16M, so können über die Methode POST nur Dateien bis zu einer Größe von 16 MByte übertragen werden. - Nach einer MySQL-Standardinstallation können keine Daten größer als 1 Megabyte in die Datenbank-Tabelle eingefügt werden. Sollen Daten größer als 1 MByte gespeichert werden, so muss der MySQL-Parameter max_allowed_packet in der MySQL-Konfigurationsdatei entsprechend geändert werden. Unter dem Betriebssystem Linux und bei Verwendung des Entwicklungsserver XAMPP befindet sich die MySQL-Konfigurationsdatei im Verzeichnis /opt/lampp/etc/my.cnf. Der betreffende MySQL-Parameter max_allowed_packet (max_allowed_packet = 1M) befindet sich im Abschnitt [mysqld]. Änderung über das PHP-Programm phpMyAdmin: Tab -> Variablen -> Filter: max_allowed [...] Nach jeder Änderung der MySQL-Konfigurationsdatei muss ein Restart des MySQL-Servers vorgenommen werden. Eine andere Möglichkeit ist die Änderung des MySQL-Parameter max_allowed_packet während der Laufzeit des MySQL-Servers über die Eingabe eines MySQL-Befehles im MySQL-Terminal (16M entspricht 16777216 Byte, --user=root muss möglicherweise angepasst werden): SHOW VARIABLES LIKE 'max_allowed_packet'; mysql_safe -set-variable=max_allowed_packet=16M --user=root & SHOW VARIABLES LIKE 'max_allowed_packet'; bzw. SHOW VARIABLES LIKE 'max_allowed_packet'; safe_mysql -set-variable=max_allowed_packet=16M --user=root & SHOW VARIABLES LIKE 'max_allowed_packet'; Welcher von den beiden Befehlen (mysql_safe oder safe_mysql) verwendet werden kann, hängt von der benutzten MySQL-Version ab. - Änderungen an der Konfiguration des PHP- oder des MySQL-Servers können nur durchführt werden, wenn man die entsprechenden Rechte besitzt. HINWEIS: UNTER DEM ENTWICKLUNGSSERVER XAMPP 7.1.xx IST DIE ÜBERTRAGUNG VON BINÄRDATEIEN ÜBER 1 MEGABYTE NICHT GELUNGEN. oben  Hinweis - Grundsätzlicher Aufbau einer Text- oder CSV-Datenbank Datei: content_1.dat id|db_nr|status|create_time|change_time|data_1|data_2|data_3|data_4|data_5|data_6|data_7|data_8|data_9|data_10|data_11|data_12| | | | | | | | | | | | |data_25 4|2|1|10|10|128|128|128|255|128|2000|2000|65000|2000|3000|3000|255| | | | | | | | | | | | | 1|1|1|1363864682|1377513045|Content xyz|Content xyz|Content xyz| | | | | | | | | | | | | | | | | | | | | | 2|1|1|1363864685|1377513048|Content xyz|Content xyz|Content xyz| | | | | | | | | | | | | | | | | | | | | | 3|1|1|1363864688|1377513049|Content xyz|Content xyz|Content xyz| | | | | | | | | | | | | | | | | | | | | | [...] 1. Zeile: enthält die internen System- und Daten-Feldnamen: nur englisches Alphabet, Zahlen und den Unterstrich (_); Kleinschreibweise ist zu bevorzugen; die Feldnamen bezieht die Seite aus einer speziellen Datei 2. Zeile enthält die maximale Zeichenlänge für das entsprechende Feld; die ersten 5 Felder sind interne Felder für das System; die maximale Zeichenlänge bezieht die Seite aus einer speziellen Datei 3. Zeile und die weiteren Zeilen: 1|2|1|1363774430|1363775430| | | | | | | | | | | | | | | | | | | | | | | | | 1. id 2. Datendatei-Nr. oder Datenbank-Nr., jede Text-Datenbank erhält eine eigene Nr. siehe: Dateiname - content_1.dat, content_2.dat, ... 3. Status: 1 ... aktiv, 0 ... gelöscht Status 0: die Daten dieses Datensatzes werden erst überschrieben, wenn ein neuer Datensatz gespeichert werden soll; bis zu diesen Zeitpunkt können die als gelöscht gekennzeichneten Daten wiederhergestellt werden (Status -> 1) 4. Create Time: Unix-Zeitstempel 5. Change Time: Unix-Zeitstempel 6. Felder 6 bis 30 sind die nutzbaren Feldinhalte eines Datensatzes - 25 Felder; diese Felder enthalten die sichtbaren Inhalte für die Webseiten-Inhalte Hinweis: die 25 Daten-Felder können beliebige Zeichen enthalten; der gerade Strich (|) ist durch den entsprechenden HTML-Code (&#124;) zu ersetzen; die Zeichenlänge kann 0 bis 65000 Zeichen betragen Überprüfung der zu speichernden Daten vor der Übergabe an die Text- oder CSV-Datei Um unbeabsichtigte Effekte zu vermeiden sind einige Sonderzeichen durch den entsprechenden HTML-Code zu ersetzen (z.B. <> -> &lt;&gt;). Für einige Sonderzeichen erledigt dies eine PHP-Funktion (htmlspecialchars()). Der Internet-Browser interpretiert einige Zeichenkombinationen als Formatierungs-Befehl (HTML-Tag) oder sogar als Javaskript-Programmcode. // Funktion: Pruefung und Aufbereitung der Formular-Daten fuer die Aufnahme in die CSV-Datenbank function check_form_data($form_data='') { if(isset($form_data)) { $form_data = htmlspecialchars($form_data, ENT_QUOTES); // Zeilenumbruch (Windows: \r\n, MAC: \r, Unix/linux: \n) in den HTML-Code umsetzen $form_data = preg_replace('/\r\n|\r|\n/', ''<br />', $form_data); // gerader Strich (|) ist reserveiert als Feldtrenner $form_data = preg_replace('/\|/', '&#124;', $form_data); return $form_data; } else { return FALSE; } } Hinweis: Wird an die Funktion function check_form_data() ein Array übergeben (z.B. $form_data_array), so ist in der Funktion noch eine for-Schleife einzufügen. Nach der Prüfung und Aufbereitung der Formular-Daten können die Daten an eine weitere Funktion (z.B. function write_data()) übergeben werden. Diese Funktion kann die Daten, nach einer Prüfung für die maximal zulässige Zeichenlänge pro Datenbank-Feld, nun endgültig in die Text- oder CSV-Datenbank schreiben. Hinweis: Durch die Zeichenersetzung wird die Text- oder Stringlänge ein wenig erweitert. Dies sollte bei der Zuweisung der maximalen Zeichenlänge für die Datenbank-Felder berücksichtigt werden. oben  Zeichen-»Salat« verhindern Falls Sie sich schon einmal Webseiten angesehen haben, die ein Zeichensatz verwenden den Ihr Rechner nicht kennt, wird Ihnen ein mehr oder weniger großer Zeichensalat entgegenspringen. Die nachfolgende Methode versucht dies zu reduzieren. Beispiel: Gästebuch - Benutzereingaben speichern (Hinweis: Textkodierung ist UTF-8) Der Benutzer trägt seine Eingaben in ein Formular ein und anschließend werden sie über die Methode POST an dieses Skript übergeben. Alle hier im Array $CharArray aufgelisteten Zeichen, werden durch den jeweiligen HTML-Code ersetzt (Array: $CharReplacementArray). Hinweis: Die Arrays können beliebig erweitert bzw. gekürzt werden. Die Zeichen die dem ASCII-Code 32 bis 126 (englisches Alphabet a-z, A-Z, Zahlen 0-9 und einige Sonderzeichen) entsprechen brauchen nicht durch den HTML-Code ersetzt werden, da sie von jedem Rechner - selbst von japanischen oder chinesischen Rechnern - richtig interpretiert werden. <?php // [...] // Zeichenersetzung: Deutschland - laenderspezifische Zeichen und einige Zeichen die in Personennamen vorkommen function standard_char_substitution($TextareaContentArray='') { $CharArray = array("ä", "ö", "ü", "Ä", "Ö", "Ü", "ß", "ç", "ñ", "æ", "á", "à", "é", "è", "í", "ì", "ó", "ò", "ú", "ù", "ë", "ï", "ê", "«", "»", "€"); $CharReplacementArray = array("&auml;", "&ouml;", "&uuml;","&Auml;", "&Ouml;", "&Uuml;", "&szlig;", "&ccedil;", "&ntilde;", "&aelig;", "&aacute;", "&agrave;", "&eacute;", "&egrave;", "&iacute;", "&igrave;", "&oacute;", "&ograve;", "&uacute;", "&ugrave;", "&euml;", "&iuml;", "&ecirc;", "&laquo;", "&raquo;", "&euro;"); $CharReplacementArrayCount = count($CharReplacementArray); $TextareaContentArrayCount = count($TextareaContentArray); for($x=0; $x<$TextareaContentArrayCount; $x++) { for($y=0; $y<$CharReplacementArrayCount; $y++) { $TextareaContentArray[$x] = str_replace($CharArray[$y], $CharReplacementArray[$y], $TextareaContentArray[$x]); } } return $TextareaContentArray; } // Zeichenersetzung: Polen - laenderspezifische Zeichen function polish_char_substitution($TextareaContentArray='') { $CharPolishArray = array("Ą", "ą", "Ć", "ć", "Ę", "ę", "Ł", "ł", "Ń", "ń", "Ó", "ó", "Ś", "ś", "Ź", "ź", "Ż", "ż"); $CharPolishReplacementArray = array("&#260;", "&#261;", "&#262;", "&#263;", "&#280;", "&#281;", "&#321;", "&#322;", "&#323;", "&#324;", "&#211;", "&#243;", "&#346;", "&#347;", "&#377;", "&#378;", "&#379;", "&#380;"); $CharPolishReplacementArrayCount = count($CharPolishReplacementArray); $TextareaContentArrayCount = count($TextareaContentArray); for($x=0; $x<$TextareaContentArrayCount; $x++) { for($y=0; $y<$CharPolishReplacementArrayCount; $y++) { $TextareaContentArray[$x] = str_replace($CharPolishArray[$y], $CharPolishReplacementArray[$y], $TextareaContentArray[$x]); } } return $TextareaContentArray; } // Zeichenersetzung: Russland - laenderspezifische Zeichen function russian_char_substitution($TextareaContentArray='') { $CharRussianArray = array("А", "а", "Б", "б", "В", "в", "Г", "г", "Д", "д", "Е", "е", "Ж", "ж", "З", "з", "И", "и", "Й", "й", "К", "к", "Л", "л", "М", "м", "Н", "н", "О", "о", "П", "п", "Р", "р", "С", "с", "Т", "т", "У", "у", "Ф", "ф", "Х", "х", "Ц", "ц", "Ч", "ч", "Ш", "ш", "Щ", "щ", "Ъ", "ъ", "Ы", "ы", "Ь", "ь", "Э", "э", "Ю", "ю", "Я", "я"); $CharRussianReplacementArray = array("&#1040;", "&#1072;", "&#1041;", "&#1073;", "&#1042;", "&#1074;", "&#1043;", "&#1075;", "&#1044;", "&#1076;", "&#1045;", "&#1077;", "&#1046;", "&#1078;", "&#1047;", "&#1079;", "&#1048;", "&#1080;", "&#1049;", "&#1081;", "&#1050;", "&#1082;", "&#1051;", "&#1083;", "&#1052;", "&#1084;", "&#1053;", "&#1085;", "&#1054;", "&#1086;", "&#1055;", "&#1087;", "&#1056;", "&#1088;", "&#1057;", "&#1089;", "&#1058;", "&#1090;", "&#1059;", "&#1091;", "&#1060;", "&#1092;", "&#1061;", "&#1093;", "&#1062;", "&#1094;", "&#1063;", "&#1095;", "&#1064;", "&#1096;", "&#1065;", "&#1097;", "&#1066;", "&#1098;", "&#1067;", "&#1099;", "&#1068;", "&#1100;", "&#1069;", "&#1101;", "&#1070;", "&#1102;", "&#1071;", "&#1103;"); $CharRussianReplacementArrayCount = count($CharRussianReplacementArray); $TextareaContentArrayCount = count($TextareaContentArray); for($x=0; $x<$TextareaContentArrayCount; $x++) { for($y=0; $y<$CharRussianReplacementArrayCount; $y++) { $TextareaContentArray[$x] = str_replace($CharRussianArray[$y], $CharRussianReplacementArray[$y], $TextareaContentArray[$x]); } } return $TextareaContentArray; } // Zeichenersetzung: Tschechien - laenderspezifische Zeichen function czech_char_substitution($TextareaContentArray='') { $CharCzechArray = array("Á", "á", "É", "é", "Í", "í", "Ó", "ó", "Ú", "ú", "Š", "š", "Ť", "ť", "Ž", "ž", "Ě", "ě", "Ď", "ď", "Ň", "ň", "Ř", "ř", "Ů", "ů", "Č", "č"); $CharCzechReplacementArray = array("&#193;", "&#225;", "&#201;", "&#233;", "&#205;", "&#237;", "&#211;", "&#243;", "&#218;", "&#250;", "&#352;", "&#353;", "&#356;", "&#357;", "&#381;", "&#382;", "&#282;", "&#283;", "&#270;", "&#271;", "&#327;", "&#328;", "&#344;", "&#345;", "&#366;", "&#367;", "&#268;", "&#269;"); $CharCzechReplacementArrayCount = count($CharCzechReplacementArray); $TextareaContentArrayCount = count($TextareaContentArray); for($x=0; $x<$TextareaContentArrayCount; $x++) { for($y=0; $y<$CharCzechReplacementArrayCount; $y++) { $TextareaContentArray[$x] = str_replace($CharCzechArray[$y], $CharCzechReplacementArray[$y], $TextareaContentArray[$x]); } } return $TextareaContentArray; } // Zeichenersetzung: Frankreich - laenderspezifische Zeichen function french_char_substitution($TextareaContentArray='') { $CharFrenchArray = array("À", "à", "Â", "â", "Æ", "æ", "Ç", "ç", "È", "è", "É", "é", "Ê", "ê", "Ë", "ë", "Î", "î", "Ï", "ï", "Ô", "ô", "Œ", "œ", "Ù", "ù", "Û", "û"); $CharFrenchReplacementArray = array("&#192;", "&#224;", "&#194;", "&#226;", "&#198;", "&#230;", "&#199;", "&#231;", "&#200;", "&#232;", "&#201;", "&#233;", "&#202;", "&#234;", "&#203;", "&#235;", "&#206;", "&#238;", "&#207;", "&#239;", "&#212;", "&#244;", "&#140;", "&#156;", "&#217;", "&#249;", "&#219;", "&#251;"); $CharFrenchReplacementArrayCount = count($CharFrenchReplacementArray); $TextareaContentArrayCount = count($TextareaContentArray); for($x=0; $x<$TextareaContentArrayCount; $x++) { for($y=0; $y<$CharFrenchReplacementArrayCount; $y++) { $TextareaContentArray[$x] = str_replace($CharFrenchArray[$y], $CharFrenchReplacementArray[$y], $TextareaContentArray[$x]); } } return $TextareaContentArray; } // [...] // ueber POST wird ein Text an dieses Skript uebergeben $text = $_POST['text']; if(@ini_get('magic_quotes_gpc') == 1) { $text_strip_slashes = stripslashes($text); array_push($textarea_content_array, $text_strip_slashes); } else { array_push($textarea_content_array, $text); } if(!empty($textarea_content_array) && is_array($textarea_content_array)) { // Aufruf der Funktionen $textarea_content_array = standard_char_substitution($textarea_content_array); $textarea_content_array = polish_char_substitution($textarea_content_array); $textarea_content_array = russian_char_substitution($textarea_content_array); $textarea_content_array = czech_char_substitution($textarea_content_array); $textarea_content_array = french_char_substitution($textarea_content_array); } // [...] // Der korrigierten Text befindet sich jetzt im Array $textarea_content_array. ?> Nach der Zeichenersetzung und Überprüfung der Benutzereingaben auf ihre Gültigkeit, werden die Texte in einer Datenbank oder Textdatei gespeichert. Zum Einbau der Texte in einer HTML-Seite brauchen sie nur ausgelesen und in die HTML-Seite eingebaut werden. Die Texte sollten dann auch auf einen griechischen oder russischen Rechner lesbar sein - ohne den sonst üblichen Zeichensalat. oben  HTML-Injection Tabelle: Darstellung der ASCII-Zeichen in Hexadezimalschreibweise Sehen wir uns diese zwei Links an: http://127.0.0.1/inject/html_ex.php?music=<script>alert('hakin9')</script> http://127.0.0.1/inject/html_ex.php?music=%3Cscript%3Ealert%28%27hakin9%27%29%3C%2Fscript%3E Es ist gut zu wissen, das sie auf dieselbe Webseite verweisen. Es ist einfach - das ASCII-Zeichen < trägt die (hexadezimale) Codierung 3C, statt <script> können wir also %3Cscript%3E schreiben. Wozu? Manchmal wollen wir keine untypischen Zeichen in der URL platzieren - einige Webanwendungen oder Clients versuchen sie möglicherweise zu entfernen. Einige ausgewählte Zeichen und ihre Hexadezimalcodes finden Sie in der Tabelle.
Zeichen Hexadezimalcode
! %21
" %22
# %23
$ %24
% %25
& %26
' %27
( %28
) %29
* %2A
+ %2B
, %2C
- %2D
. %2E
/ %2F
: %3A
; %3B
< %3C
= %3D
> %3E
? %3F
@ %40
[ %5B
\ %5C
] %5D
^ %5E
_ %5F
~ %7E

Hinweis: Die hexadezimale Schreibweise muss immer in der Adresszeile eines Browsers eingegeben werden, in den Texteingabefeldern von Formularen hat diese
Schreibweise nicht die gewünschte Wirkung. Werden die Webseiten mit einem PHP-Interpreter dynamsich erzeugt und ist in der Konfigurationsdatei von PHP - der
php.ini - die Option magic_quotes_gpc eingeschaltet (magic_quotes_gpc = on), so werden einfache und doppelte Hochkommas mit einem Backshlash versehen (\',
\"). Mit dieser Option schützen sich die Webmaster vor einigen HTML-Injection-Angriffe - dies gilt auch für die entsprechende hexadezimale Kodierung. Das heißt,
es können dann nur Skripte die ohne einfache oder doppelte Hochkommas auskommen, ihre Wirkung entfalten.
Siehe auch:
Anhang: Deprecated features

Beispiel: HTML-Injection
Die nachfolgende Skripte können bei interaktiven Webseiten (z.B. Gästebücher, Foren) die unzureichend geschützt sind, einige mehr oder weniger
lästige Ereignisse hervorrufen.

<script>var a=test(); function test() {window.location.href="_URL_";}</script>

<script>var a=test(); function test() {window.location.reload(true); setTimeout(test(),1000);}</script>

<script>var a=test(); function test() {windows.histoy.go(-3);}</script>

<script>var a=test(); function test() {windows.location.back();}</script>

<script>var a=test(); function test() {alert(window.history.length);}</script>

Manchmal ist es notwendig, den Tag <script language=" zu verwenden. Der Code <script language=" am Ende würde den Rest der Seite als ein
unvollendetes JavaSkript-Programm erscheinen lassen (Beispiel: <script>var a=test(); function test() {windows.location.back();}</script><script language=").

Hinweis: Dieser Programmcode kann nicht über Cut & Paste in ein Formularfeld eingefügt werden, er muss in der Regel immer über die Tastatur einzeln
eingegeben werden, wenn er die gewünschte Wirkung haben soll. Dies funktioniert nach ein- oder mehrmaligen Versuchen, auch wenn in der php.ini die Option
magic_quotes_gpc = on eingeschaltet ist. Die Skripte die ohne einfache oder doppelte Hochkommas auskommen, können auch über die Adresszeile des
Browsers übergeben werden (siehe weiter oben).

Schutz vor HTML-Injection-Angriffe
Werden die Webseiten mit einem PHP-Interpreter dynamisch erzeugt, so sollten Sie sich mit folgenden PHP-Funktionen näher beschäftigen.

strip_tags(STRING);
Entfernt HTML- und PHP-Tags im übergebenen STRING.

htmlentities(STRING, ENT_QUOTES);
Mit dieser Funktion, werden alle Sonderzeichen und HTML-Tags durch den dafür vorgesehenen HTML-Code ersetzt.

str_replace(SUCHSTRING, ERSATZSTRING, STRING);
Mit dieser Funktion können einzelne Zeichen z.B. durch den entsprechenden HTML-Code ersetzt werden, z.B. < durch &lt; oder > durch &gt;.

preg_replace(/SUCHSTRING/i, ERSATZSTRING, STRING);
Mit dieser Funktion können einzelne Zeichen z.B. durch den entsprechenden HTML-Code ersetzt werden, z.B. < durch &lt; oder > durch &gt;.
Sinnvoll ist diese Funktion aber nur, wenn mit REGULÄREN AUDRÜCKEN nach entsprechenden »gefährlichen« Zeichen gesucht wird.

Hinweis: Die vorgenannten JavaSkripte funktionieren nur auf schlecht oder nachlässig programmierten Webseiten.

oben 
Grundlegendes über Variablen
Variablen werden in PHP dargestellt durch ein Dollar-Zeichen ($) gefolgt vom Namen der Variablen. Bei Variablen-Namen wird zwischen Groß- und
Kleinschreibung unterschieden (case-sensitive). Variablen-Namen werden in PHP nach den gleichen Regeln wie andere Bezeichner erstellt. Ein gültiger
Variablen-Name beginnt mit einem Buchstaben oder einem Unterstrich ("_"), gefolgt von einer beliebigen Anzahl von Buchstaben, Zahlen oder
Unterstrichen. Hinweis: Für die Variablennamen sollte ausschließlich (ASCII-Zeichen: 32 bis 126) das englische Alphabet (a-z, A-Z), die Zahlen (0-9)
und der Unterstrich (_) genutzt werden und am Anfang eines Variablennamens dürfen keine Zahlen vorkommen ($sql_1 … gültig, $1_sql … ungültig).

$var = "Du";
$vaR = "und";
$Var = "ich";
$vAr = "wir lernen PHP"
echo "$var $vaR $Var, $vAr"; // gibt "Du und ich, wir lernen PHP" aus
$4site  = 'nicht jetzt'; // ungültig, Zahl am Anfang
$_4site = 'nicht jetzt'; // gültig, Unterstrich am Anfang
$täbyte = 'irgendwas'; // gültig, da 'ä' dem ASCII-Wert 228 entspricht

Hinweis: Die ASCII-Zeichen von 127 bis 255 sind zwar für Variablen erlaubt, aber um Schwierigkeiten bei Änderung der Textkodierung aus dem Wege zu gehen,
sollte auf die Verwendung dieser erlaubten Zeichen verzichtet werden.

oben 
Variablen: Hinweise zur Schreibweise
Bei der Benennung und Schreibweise der Variablennamen, sollte immer auf eine verständliche Struktur und Lesbarkeit geachtet werden.

Regel: Die eigenen und etwas längeren PHP-Skripte sollten nach einigen Wochen und Monaten innerhalb von 20 bis 30 Minuten wieder lesbar und
verständlich sein.

1. Manche Befehle und Kontrollstrukturen neigen dazu sehr lang zu werden. Aus Gründen der Übersichtlichkeit und der besseren Lesbarkeit sollten die
Zeilen in PHP-Skripten nicht länger als 75 bis 85 Zeichen sein.

2. Für die Variablennamen sollte ausschließlich das englische Alphabet (a-z, A-Z), die Zahlen (0-9), und der Unterstrich (_) genutzt werden.
Hinweis: Am Anfang eines Variablennamens dürfen keine Zahlen vorkommen ($sql_1 … gültig, $1_sql … ungültig).

3. Für die Variablennamen außerhalb von Funktionen, sollte nur die Kleinschreibweise (a-z) und der Unterstrich (_) genutzt werden. Die Variablennamen
sollten - ohne Kommentare - Auskunft über ihre Bedeutung und Verwendung geben.

Beispiele:
$counter_leading_zeros=1; // aktuellen Counterstand mit Nullen aufuellen; 0 .. keine fuehrenden Nullen, 1 .. auffuellen mit Nullen (default))
$counter_numbers_directory = "./numbers"; // Name des Verzeichnisses fuer die Zahlenbilder, Grafikcounter u.a.
$counter_text_directory = $counter_numbers_directory . "/txt"; // Name des Verzeichnisses fuer die Textdateien u.a.
$counter_data_filename = "counter.txt"; // Name der Datei mit dem aktuellen Counterstand
$counter_data_file_path = $counter_text_directory ."/" . $counter_data_filename;

4. Für die Variablennamen innerhalb von Funktionen, sollte nur die Groß- und Kleinschreibweise (A-Z, a-z) genutzt werden, aber auf die Verwendung des
Unterstrichs sollte innerhalb von Funktionen verzichtet werden. Man nennt diese Schreibweise auch Camel-Cabs, dabei werden nur die jeweiligen Anfangsbuchstaben
eines Wortes groß geschrieben. Die Variablennamen sollten - ohne Kommentare - Auskunft über ihre Bedeutung und Verwendung geben.

Beispiele
$DataTransferCreateArray = array();
$NumbersImageArray = array();
$CounterOldImagesArray = array();
$NumbersImageCount = count($NumbersImageArray);
$CounterValueLength = strlen($DataTransferCreateArray[3]);

5. Für SQL-Befehle und Session-Variable innerhalb von PHP-Befehlen und Kontrollstrukturen, sollte die Großschreibweise bevorzugt werden.

Beispiele:
$sql_1="DELETE FROM counter WHERE timestamp<$counter_time AND id>1";
$sql_2="SELECT numerator FROM counter WHERE id=1";
$sql_3="INSERT INTO counter (sessionnr, timestamp, numerator) VALUES ('$SESSION_NR', $counter_destroy, 1)";

oben 
Arithmetische Operatoren
Erinnern Sie sich noch an die Grundrechenarten aus der Schule? Die arithmetischen Operatoren funktionieren genauso:
Tabelle - Arithmetic Operators
Beispiel Name Ergebnis
$a + $b Addition Summe von $a und $b.
$a - $b Subtraktion Differenz von $a und $b.
$a * $b Multiplikation Produkt von $a und $b.
$a / $b Division Quotient von $a und $b.
$a % $b Modulus Rest von - $a geteilt durch $b.

Der Divisionsoperator ("/") gibt einen Fließkommawert zurück, es sei denn beide Operanden sind Ganzzahlen (oder Zeichenketten, die in Ganzzahlen
umgewandelt werden), und die Zahlen können glatt geteilt werden; in diesem Fall wird eine Ganzzahl zurückgegeben.

Operanden des Modulusoperators werden vor der Verarbeitung in Ganzzahlen umgewandelt (indem die Nachkommastellen entfernt werden). Das Ergebnis
des Modulusoperators % hat dasselbe Vorzeichen wie der Dividend, d.h. das Ergebnis von $a % $b hat dasselbe Vorzeichen wie $a.

oben 
Zuweisungsoperatoren
Der einfachste Zuweisungsoperator ist "=". Wahrscheinlich kommt man als erstes auf die Idee, ihn mit "ist gleich" zu bezeichnen. Das ist falsch. In Wirklichkeit
bedeutet er, dass dem linken Operanden der Wert des rechten Operanden zugewiesen wird (man müsste ihn also mit "wird gesetzt auf den Wert von" übersetzen).
Der Wert eines Zuweisungs-Ausdruckes ist der zugewiesene Wert. Das heißt der Wert des Ausdruckes "$a = 3" ist 3.

$a = ($b = 4) + 5 // $a ist nun gleich 9 und $b wurde auf den Wert 4 gesetzt. Zusätzlich zu dem oben vorgestellten Zuweisungsoperator "=" gibt es "kombinierte
Operatoren" für alle binären, arithmetischen und String-Operatoren, die es erlauben, den Wert einer Variablen in einem Ausdruck zu benutzen und diesen
anschließend das Ergebnis des Ausdrucks als neuen Wert zuzuweisen.

Arithmetische Zuweisungsoperatoren
$a = 3;
$a += 5; // Addition; setzt $a auf den Wert 8; entspricht: $a = $a + 5;
$a -=$b; // Subtraktion; linke Variable wird um den Wert der rechten Seite dekrementiert; entspricht: $a = $a - $b
$a *=$b; // Multiplikation; linke Variable wird mit dem rechten Wert multipliziert; entspricht: $a = $a * $b
$a /=$b; // Division; linke Variable wird durch den Wert der rechten Seite dividiert; entspricht: $a = $a / $b
$a %=$b; // Modulus; mit linker Variable wird eine Moduldivision durch den rechten Wert durchgeführt; entspricht: $a = $a % $b

Bit-Zuweisungspperatoren
$a &=$b; // Bit-Und; bitweises UND der linken Variablen mit dem rechten Wert; entspricht: $a = $a & $b
$a |=$b; // Bit-Oder; bitweises ODER der linken Variablen mit dem rechten Wert; entspricht: $a = $a | $b
$a ^=$b; // Bit-Xor; bitweises Exklusiv-ODER der linken Variablen mit dem rechten Wert; entspricht: $a = $a ^ $b
$a <<= $b // Linksverschiebung; Verschiebung der Bits von $a um $b Stellen nach links (jede Stelle entspricht einer Mulitplikation mit zwei); entspricht: $a = $a << $b
$a >>= $b // Rechtsverschiebung; Verschiebung der Bits von $a um $b Stellen nach rechts (jede Stelle entspricht einer Division durch zwei) ; entspricht: $a = $a >> $b

Bit-Verschiebungen in PHP sind arithmetisch. Bits, die an einem der Enden herausgeschoben werden, werden verworfen. Bei Links-Verschiebungen werden von
rechts Nullen hereingeschoben, während das Vorzeichenbit links herausgeschoben wird, was bedeutet, dass das Vorzeichen des Operanden nicht erhalten bleibt.
Bei Rechts-Verschiebungen werden Kopien des Vorzeichenbits von links hereingeschoben, so dass das Vorzeichen des Operand erhalten bleibt.

Bitweise Operatoren
Innerhalb eines Computers sind alle Variablen als eine Kette von Bits hinterlegt. Ein Bit ist ein Schaltzustand, der entweder ein oder aus sein kann. Dieses wird mit
einer 1 oder einer 0 symbolisiert. Nun ist es möglich, Zahlen in diese Binärsystem umzurechnen. Beispielsweise würde eine dezimale 7 binär als 111 dargestellt
werden. Eine dezimale 10 als 1010.

Die bitweisen Operatoren, die auf diesen Zahlen arbeiten, sind die folgenden:
  Und (&): 1010&111 ergibt 10.
  Oder (|): 1010|111 ergibt 1111.
  Entweder-Oder (XOR) (^): 1010 ^ 111 ergibt 1101.
  Negierung (~): ~1010 ergibt theoretisch 101. Da jedoch PHP keine dreibittigen Zahlen verwaltet, ist die Zahl in einer 32-bittigen Darstellung gespeichert und es
  wird 11111111111111111111111111110101 ausgegeben. Die zuviel ausgegeben Stellen werden jedoch in vielen Anwendungen automatisch ignoriert.
  Shift nach links und nach rechts (<< und >>): Vor dem doppelten Kleiner-Größer-Zeichen steht die zu schiftende Zahl. Nach dem Zeichen steht, um wie viele Stellen
  diese verschoben werden soll. Somit ergibt 111<<2 dann 11100 und 1010>>1 ergibt 101.

Im Beispiel oben sind die Zahlen immer binär angegeben. Zu beachten ist, dass diese in PHP in Dezimalschreibweise übergeben werden. Dies ist für den
Programmierer verwirrend, da er zwischen den beiden Zahlensystemen umrechnen muss. Bitweise Operatoren werden deshalb heutzutage nur noch selten verwendet.

Beispiel - Bitweise UND, ODER und XODER Operationen mit Ganzzahlen
<?php
/*
Der erste Abschnitt kann ignoriert werden;
er dient nur zu Formatierungszwecken, um die Ausgabe deutlicher zu machen.
*/
print "<pre>";

$format = '(%1$2d = %1$04b) = (%2$2d = %2$04b)' . ' %3$s (%4$2d = %4$04b)' . "\n";
echo <<<EOH
 ---------     ---------  -- ---------
 Ergebnis      Wert 1     Op Wert 2
 ---------     ---------  -- ---------
EOH;

// Hier kommen die Beispiele.
$values = array(0, 1, 2, 4, 8);
$test = 1 + 4;
echo "\n Bitweises UND \n";
foreach($values as $value) {
   $result = $value & $test;
   printf($format, $result, $value, '&', $test);
}

echo "\n Bitweises einschließendes ODER \n";
foreach($values as $value) {
   $result = $value | $test;
   printf($format, $result, $value, '|', $test);
}

echo "\n Bitweises ausschließendes ODER (XODER) \n";
foreach($values as $value) {
   $result = $value ^ $test;
   printf($format, $result, $value, '^', $test);
}

print "</pre>";
?>

Ausgabe
 ---------     ---------  -- ---------
 Ergebnis      Wert 1     Op Wert 2
 ---------     ---------  -- ---------
 Bitweises UND 
( 0 = 0000) = ( 0 = 0000) & ( 5 = 0101)
( 1 = 0001) = ( 1 = 0001) & ( 5 = 0101)
( 0 = 0000) = ( 2 = 0010) & ( 5 = 0101)
( 4 = 0100) = ( 4 = 0100) & ( 5 = 0101)
( 0 = 0000) = ( 8 = 1000) & ( 5 = 0101)

 Bitweises einschließendes ODER 
( 5 = 0101) = ( 0 = 0000) | ( 5 = 0101)
( 5 = 0101) = ( 1 = 0001) | ( 5 = 0101)
( 7 = 0111) = ( 2 = 0010) | ( 5 = 0101)
( 5 = 0101) = ( 4 = 0100) | ( 5 = 0101)
(13 = 1101) = ( 8 = 1000) | ( 5 = 0101)

 Bitweises ausschließendes ODER (XODER) 
( 5 = 0101) = ( 0 = 0000) ^ ( 5 = 0101)
( 4 = 0100) = ( 1 = 0001) ^ ( 5 = 0101)
( 7 = 0111) = ( 2 = 0010) ^ ( 5 = 0101)
( 1 = 0001) = ( 4 = 0100) ^ ( 5 = 0101)
(13 = 1101) = ( 8 = 1000) ^ ( 5 = 0101)

Andere Zuweisungspperatoren
$b = "Hallo "; // Stringverknüpfung
$b .= "Du!"; // Stringverknüpfung; setzt $b auf den Wert "Hallo Du!", äquivalent zu $b = $b . "Du!";
$a ??= $b // Null-Zusammenführungsoperator; entspricht: $a = $a ?? $b

Referenzzuweisung
Eine Ausnahme vom üblichen Wertzuweisungsverhalten in PHP stellen Objekte (object) dar, die per Referenz zugewiesen werden. Objekte können mit dem clone
Schlüsselwort explizit kopiert werden.

Man beachte, dass die Zuweisung nur den Wert der Ursprungsvariable der neuen Variable zuweist (assignment by value), weshalb sich Änderungen an der einen
Variablen nicht auf die andere auswirken werden. Das kann wichtig sein, wenn man ein großs Array o.ä. in einer Schleife kopieren muss. 'Assignement by
reference' bedeutet, dass beide Variablen nach der Zuweisung dieselben Daten repräsentieren. Nach der Zuweisung verändert eine Änderung der Variable $var
auch den Inhalt der Variable &$othervar;, nichts wird kopiert, stattdessen wird ein "Verweis" auf die erste Variable angelegt.

Beispiel
<?php
$a = 3;
$b = &$a; // $b ist eine Referenz auf $a
print "$a\n"; // gibt 3 aus
print "$b\n"; // gibt 3 aus
$a = 4; // ändere $a
print "$a\n"; // gibt 4 aus
print "$b\n"; // gibt ebenfalls 4 aus, da $b eine Referenz auf $a ist, das geändert wurde
?>

oben 
Vergleichs-Operatoren
Vergleichs-Operatoren erlauben es - wie der Name schon sagt - zwei Werte zu vergleichen.
Tabelle - Vergleichsoperatoren
Beispiel Name Ergebnis
$a == $b gleich Gibt TRUE zurück, wenn $a gleich $b ist.
$a === $b identisch Gibt TRUE zurück wenn $a gleich $b ist und beide vom gleichen Typ sind.
$a != $b ungleich Gibt TRUE zurück, wenn $a nicht gleich $b ist.
$a !== $b nicht identisch Gibt TRUE zurück, wenn $a nicht gleich $b ist oder beide Typen ungleich sind.
$a < $b kleiner als Gibt TRUE zurück, wenn $a kleiner als $b ist.
$a > $b größer als Gibt TRUE zurück, wenn $a größer als $b ist.
$a <= $b kleiner gleich Gibt TRUE zurück, wenn $a kleiner oder gleich $b ist.
$a >= $b größer gleich Gibt TRUE zurück, wenn $a größer oder gleich $b ist.
$a <=> $b Raumschiff Eine Ganzzahl (integer) kleiner als, gleich oder größer als 0, wenn $a kleiner als, gleich bzw. größer als $b ist. Verfügbar von PHP 7 an.

Hinweis: Wenn eine Zahl mit einer Zeichenkette verglichen wird, oder der Vergleich numerische Zeichenketten einschließt, dann wird jede Zeichenkette in eine
Zahl umgewandelt, und der Vergleich wird numerisch durchgeführt. Diese Regeln gelten ebenfalls für die switch Anweisung. Die Typumwandlung wird nicht
durchgeführt, wenn der Vergleichsoperator === oder !== ist, da diese den Typ als auch den Wert vergleichen. Aufgrund der Art wie Fließkommazahlen (float)
intern dargestellt werden, sollten zwei Fließkommazahlen nicht auf Gleichheit getestet werden.
Siehe auch:
strcasecmp()
strcmp()

Ein weiterer Vergleichs-Operator ist der "?:"- oder Trinitäts-Operator. Er arbeitet genauso wie in C und vielen anderen Programmier-Sprachen.

(ausdr1) ? (ausdr2) : (ausdr3);

Dieser Ausdruck gibt ausdr2 zurück, wenn ausdr1 TRUE zurück gibt, und ausdr3, wenn ausdr1 FALSE zurück gibt.

oben 
Logische Operatoren
Tabelle - Logische Operatoren
Beispiel Name Ergebnis
$a and $b Und TRUE wenn sowohl $a als auch $b TRUE ist.
$a or $b Oder TRUE wenn $a oder $b TRUE ist.
$a xor $b Exklusiv Oder TRUE wenn beide Werte unterschiedlich sind
$a ^ $b Exklusiv Oder TRUE wenn beide Werte unterschiedlich sind
! $a Nicht TRUE wenn $a nicht TRUE ist.
$a && $b Und TRUE wenn sowohl $a als auch $b TRUE ist.
$a || $b Oder TRUE wenn $a oder $b TRUE ist.

Der Grund dafür, dass es je zwei unterschiedliche Operatoren für die "Und"- und die "Oder"-Verknüpfung gibt ist, dass die beiden Operatoren
jeweils unterschiedliche Plätze in der Operator-Rangfolge haben.
Siehe auch:
Anhang: Operator-Rangfolge

oben 
Inkrementierungs- bzw. Dekrementierungsoperatoren
PHP unterstützt Prä- und Post-Inkrementierungs- und Dekrementierungsoperatoren im Stil der Programmiersprache C. Hinweis: Die
Inkrement-/Dekrement-Operatoren wirken nur auf Zahlen und Zeichenketten. Bei Arrays, Objekten, Booleans und Ressourcen wirken
sie nicht. Das Dekrementieren von NULL Werten hat ebenfalls keine Wirkung, aber sie zu Inkrementieren ergibt 1. 
Tabelle - Inkrement- und Dekrementoperatoren
Beispiel Name Auswirkung
++$a Prä-Inkrement Erhöht den Wert von $a um eins (inkrementiert $a), und gibt anschließend den neuen Wert von $a zurück.
$a++ Post-Inkrement Gibt zuerst den aktuellen Wert von $a zurück und erhöht dann den Wert von $a um eins.
--$a Prä-Dekrement Vermindert den Wert von $a um eins (dekrementiert $a), und gibt anschließend den neuen Wert von $a zurück.
$a-- Post-Dekrement Gibt zuerst den aktuellen Wert von $a zurück und erniedrigt dann den Wert von $a um eins.
Beispiel
<?php
echo "<h3>Post-Inkrement</h3>";
$a = 5;
echo "Sollte 5 sein: " . $a++ . "<br>\n";
echo "Sollte 6 sein: " . $a . "<br>\n";

echo "<h3>Prae-Inkrement</h3>";
$a = 5;
echo "Sollte 6 sein: " . ++$a . "<br>\n";
echo "Sollte 6 sein: " . $a . "<br>\n";

echo "<h3>Post-Dekrement</h3>";
$a = 5;
echo "Sollte 5 sein: " . $a-- . "<br>\n";
echo "Sollte 4 sein: " . $a . "<br>\n";

echo "<h3>Praedekrement</h3>";
$a = 5;
echo "Sollte 4 sein: " . --$a . "<br>\n";
echo "Sollte 4 sein: " . $a . "<br>\n";
?>

oben 
Operator-Rangfolge
Die Operator-Rangfolge legt fest, wie "eng" ein Operator zwei Ausdrücke miteinander verbindet. Das Ergebnis des Ausdruckes 1 + 5 * 3 ist 16 und
nicht 18, da der Mulitiplikations-Operator (*) in der Rangfolge höher steht als der Additions-Operator (+). Wenn nötig, können Sie Klammern setzen,
um die Rangfolge der Operatoren zu beeinflussen. Das Ergebnis des Ausdruckes (1 + 5) * 3 ist jetzt 18.

Haben Operatoren die gleiche Rangfolge, dann entscheidet ihre Assoziativität (Vereinigung, Verknüpfung) wie die Operatoren gruppiert werden.
Zum Beispiel ist "-" links-assoziativ, so dass 1 - 2 - 3 als (1 - 2) - 3 gruppiert und zu -4 ausgewertet wird. Andererseits ist "=" rechts-assoziativ, so
dass $a = $b = $c als $a = ($b = $c) gruppiert wird.

Operatoren gleicher Rangfolge, die nicht-assoziativ sind, können nicht nebeneinander verwendet werden; beispielsweise ist 1 < 2 > 1 in PHP nicht
erlaubt. Der Ausdruck 1 <= 1 == 1 ist allerdings erlaubt, weil der == Operator eine kleinere Rangfolge als der < Operator hat.

Die Verwendung von Klammern, auch wenn sie nicht unbedingt erforderlich sind, kann oft die Lesbarkeit des Codes verbessern, indem explizit
gruppiert wird, statt sich auf die implizite Operator-Rangfolge und Operator-Assoziativität zu verlassen. 

Die folgende Tabelle zeigt die Rangfolge der Operatoren, oben steht der Operator mit dem höchsten Rang. Operatoren in derselben Zeile
haben die gleiche Rangfolge, so dass ihre Assoziativität die Gruppierung entscheidet.
Tabelle - Operator-Rangfolge
Assoziativität Operator zusätzliche Information
keine Richtung clone new clone und new
Rechts ** Arithmetik
keine Richtung ++ -- ~ (int) (float) (string) (array) (object) (bool) @ Typen und Inkrement/Dekrement
links instanceof Typen
keine Richtung ! Logik
links * / % Arithmetik
links + - . Arithmetik und Zeichenketten
links << >> Bitoperatoren
nicht-assoziativ < <= > >= Vergleiche
nicht-assoziativ == != === !== <> <=> Vergleiche
links & Bitoperatoren und Referenzen
links ^ Bitoperatoren
links | Bitoperatoren
links && Logik
links || Logik
Rechts ?? NULL-Zusammenfügungsoperator
Links ? : ternärer(dreifach, aus drei Einheiten bestehender) Operator
Rechts = += -= *= **= /= .= %= &= |= ^= <<= >>= ??= Zuweisung
keine Richtung yield from yield from
keine Richtung yield yield
keine Richtung print print
Links and Logik
Links xor Logik
Links or Logik
Hinweis: Obwohl = einen niedrigeren Rang als die meisten anderen Operatoren hat, erlaubt PHP dennoch Ausdrücke wie den folgenden: if(!$a = foo());
in diesem Fall wird der Rückgabewert der Funktion foo() der Variablen $a zugewiesen.

oben 
Zeichenketten-Operatoren
Es gibt in PHP zwei Operatoren für Zeichenketten. Der erste ist der Vereinigungs-Operator (.), dessen Rückgabewert eine Zeichenkette, zusammengesetzt
aus dem rechten und dem linken Argument, ist. Der zweite ist der Vereinigungs-Zuweisungsoperator (.=), der das Argument auf der rechten Seite an das
Argument der linken Seite anhängt.
Siehe auch:
Anhang: Zuweisungs-Operatoren

$a = "Hallo ";
$b = $a . "Welt!"; // $b enthaelt jetzt den Text "Hallo Welt!"

$a = "Hallo ";
$a .= "Welt!"; // $a enthält jetzt den Text "Hallo Welt!"

$content_csv_datei ="GUTEN";
$content_csv_datei .=" ";
$content_csv_datei .="TAG"; // $content_csv_datei enthält jetzt den Text "GUTEN TAG"

bzw.

$content_csv_datei="";
$content_csv_datei .="GUTEN";
$content_csv_datei .=" ";
$content_csv_datei .="TAG"; // $content_csv_datei enthält jetzt den Text "GUTEN TAG"

oben 
Variable Variablen
Manchmal ist es komfortabel, variable Variablen-Bezeichner zu benutzen. Das bedeutet, einen Variablen-Namen zu setzen und dynamisch zu gebrauchen. Eine normale
Variable wird wie folgt gebildet:
$a = "Hallo";

Eine variable Variable nimmt den Wert einer Variablen und behandelt ihn als Bezeichner der Variablen. Im obigen Beispiel kann Hallo als Variablen-Name gebraucht
werden, indem man zwei $-Zeichen benutzt, also schreibt:
$$a = "Welt";

Nun existieren in der PHP-Symbol-Struktur zwei definierte und gespeicherte Variablen: $a mit dem Inhalt "Hallo" und $Hallo mit dem Inhalt "Welt". Deshalb wird
die Anweisung
echo "$a ${$a}";

zur einer genau gleichen Ausgabe führen wie:
echo "$a $Hallo";
also zu: Hallo Welt.

Wenn sie variable Variablen mit Arrays verwenden, müssen Sie eine Doppeldeutigkeit beachten. Wenn sie nämlich $$a[1] schreiben, dann muss der Parser
wissen, ob Sie $a[1] als Variable oder $$a als Variable und dann [1] als Index dieser Variablen verwenden wollen bzw. gemeint haben. Die Syntax zur Lösung
dieser Doppeldeutigkeit: Verwenden Sie im ersten Fall ${$a[1]} und im zweiten Fall ${$a}[1].

Beispiel
$arraymail=array("nom","gruss","betreff","kommentar","ciao");
for($x=0; $x<5; $x++){
   $a=$arraymail[$x];
   ${$a}=stripslashes(${$a});
}

Die Variable Variable ${$a} entspricht im ersten Durchlauf der for-Schleife der Variablen $nom, im 2. Durchlauf $gruss, dann $betreff, $kommentar und im
5. Duchlauf $ciao. Durch die Variablen Variablen erspart man sich viel Schreibarbeit beim Programmieren.

Hinweis: Bitte beachten Sie, dass variable Variablen nicht mit Superglobalen Arrays in Funktionen oder Klassenmethoden verwendet werden können. Die
Variable $this ist ebenfalls eine spezielle Variable, die nicht dynamisch referenziert werden kann. Benutzen Sie diese Möglichkeit der variable Variablen
von PHP eher sparsam, bis gar nicht.

oben 
Umwandlung von Zeichenketten / Strings
Der Typ einer Variablen wird normalerweise nicht vom Programmierer bestimmt. Zur Laufzeit von PHP wird entschieden, welchen Typs eine Variable ist. Dies
ist abhängig vom Zusammenhang, in dem die Variable benutzt wird.

Sobald ein String als numerischer Wert ausgewertet wird, wird der resultierende Wert und Typ wie folgt festgelegt. Der String wird als float ausgewertet, wenn
er eines der Zeichen '.', 'e' oder 'E' enthält. Ansonsten wird er als Integer-Wert interpretiert. Der Wert wird durch den Anfangsteil des Strings bestimmt. Sofern
der String mit gültigen numerischen Daten beginnt, werden diese als Wert benutzt. Andernfalls wird der Wert 0 (Null) sein. Gültige numerische Daten sind
ein optionales Vorzeichen, gefolgt von einer oder mehreren Zahlen (optional mit einem Dezimalpunkt). Wahlweise kann auch ein Exponent angegeben werden.
Der Exponent besteht aus einem 'e' oder 'E', gefolgt von einer oder mehreren Zahlen. Sobald der erste Ausdruck ein String ist, hängt der Typ der Variablen vom
zweiten Ausdruck ab.
$foo = 1 + "10.5";   // $foo ist float (11.5)
$foo = 1 + "-1.3e3";   // $foo ist float (-1299)
$foo = 1 + "bob-1.3e3";   // $foo ist integer (1)
$foo = 1 + "bob3";   // $foo ist integer (1)
$foo = 1 + "10 Kleine Schweine";   // $foo ist integer (11)
$foo = 1 + "10 Ferkel";   // $foo ist integer (11)
$foo = "10 Schweine " + 1;   // $foo ist integer (11)
$foo = "10.0 Schweine " + 1;   // $foo ist float (11)
$foo = "10 Schweine " + 1.0;   // $foo ist float (11)
$foo = "Schweine";
if($foo == 0) $foo = "Ferkel";
 
// $foo ist gleich Ferkel, da Schweine als 0 interpretiert wird
Hinweis: Um den Typ und den Wert eines bestimmten Ausdrucks (Expression) zu überprüfen, können Sie var_dump() benutzen.

oben 
Typen von Integer-Zahlen
Als Integer werden ganzzahlige positive und negative Zahlen (..., -2, -1, 0, 1, 2, ...) bezeichnet. Bei den Integer-Zahlen kann man zwischen dezimalen
(Basis: 10), hexadezimalen (Basis: 16), oktalen (Basis: 8) und binären Zahlensysteme (Basis: 2) unterscheiden. Oktale Zahlen beginnen mit einer Null (0),
hexdezimale Zahlen mit Null x (0x) und binäre Zahlen mit Null b (0b).

Formale Strukturen von Integer-Zahlen (ab Version 7.4.0):
Integer-Zahlen können dezimale, hexadezimale, oktale oder binäre Zahlen sein.

decimal: [1-9][0-9]*(_[0-9]+)* oder 0
hexadecimal: 0[xX][0-9a-fA-F]+(_[0-9a-fA-F]+)*
octal: 0[0-7]+(_[0-7]+)*
binary: 0[bB][01]+(_[01]+)*

Beispiel 1
<?php
$a1 = 1234; // dezimale Zahl
$a2 = 0123; // oktale Zahl (entspricht der dezimalen 83)
$a3 = 0x1A; // hexadezimal Zahl (entspricht der dezimalen 26)
$a4 = 0b11111111; // binäre Zahl (entspricht der dezimalen 255)
$a5 = 1_234_567; // dezimale Zahl (Achtung: ab Version PHP 7.4.0)
?>

Beispiel 2: Integer overflow auf ein 32-bit System
<?php
$large_number_1 = 2147483647;
var_dump($large_number_1); // int(2147483647)

$large_number_2 = 2147483648;
var_dump($large_number_2); // float(2147483648)

$million = 1000000;
$large_number_3 =  50000 * $million;
var_dump($large_number_3); // float(50000000000)
?>

Beispiel 3: Integer overflow auf ein 64-bit System
<?php
$large_number_1 = 9223372036854775807;
var_dump($large_number_1); // int(9223372036854775807)

$large_number_2 = 9223372036854775808;
var_dump($large_number_2); // float(9.2233720368548E+18)

$million = 1000000;
$large_number_3 =  50000000000000 * $million;
var_dump($large_number_3); // float(5.0E+19)
?>

oben 
Befehle, Funktionen die mit einem @-Zeichen versehen werden sollten
Das @-Zeichen sorgt für eine Unterdrückung von Fehlermeldungen des PHP-Parsers. Mit der Funktion die() können eigene Fehlermeldungen generiert
werden, mit den der normale Webseiten-Besucher mehr anfangen kann, als mit den Standard-Fehlermeldungen des PHP-Parsers.

Datei-Funktionen
@fopen();
@flock();
@fwrite();
@fputs();
@fgets();
@fclose();
@chmod();
@touch();
@unlink();
@copy();
@rename();
@move_uploaded_file();
@opendir();
@readdir();
@mkdir();
@rmdir();
@file();

MySQLi-Funktionen
@mysqli_connect();
@mysqli_close();
@mysqli_query();
@mysqli_num_rows();
@mysqli_field_seek();
@mysqli_fetch_field();
@mysqli_fetch_row();
@mysqli_num_fields();
@mysqli_fetch_all();
@mysqli_connect_errno();
@mysqli_connect_error();
@mysqli_free_result();
@mysqli_select_db();
@mysqli_real_escape_string();

Sonstige Funktionen
@strip_tags();

Beispiel
if(@fopen('./txt/db_gbook.csv','w')) or die('Hier steht eine lesbare Fehlermeldung');

oder

if(@fopen('./txt/db_gbook.csv','w') === FALSE) print 'Hier steht eine lesbare Fehlermeldung'';

=== identisch; beide Seiten müssen gleich sein und vom gleichen Typ sein

Hinweis: Während der Entwicklung von PHP-Programmen ist das @-Zeichen nicht sehr hilfreich, da es ja Fehlermeldungen unterdrückt.

oben 
Deprecated features in PHP 5.3.x und höher
PHP 5.3.0 introduces two new error levels: E_DEPRECATED and E_USER_DEPRECATED. The E_DEPRECATED error level is used to indicate that a function or feature has
been deprecated. The E_USER_DEPRECATED level is intended for indicating deprecated features in user code, similarly to the E_USER_ERROR and E_USER_WARNING levels.
The following is a list of deprecated INI directives. Use of any of these INI directives will cause an E_DEPRECATED error to be thrown at startup.
 
define_syslog_variables
register_globals
register_long_arrays
safe_mode
magic_quotes_gpc
magic_quotes_runtime
magic_quotes_sybase
Comments starting with '#' are now deprecated in .INI files.

Deprecated functions:
call_user_method() (use call_user_func() instead)
call_user_method_array() (use call_user_func_array() instead)
define_syslog_variables()
dl()
ereg() (use preg_match() instead)
ereg_replace() (use preg_replace() instead)
eregi() (use preg_match() with the 'i' modifier instead)
eregi_replace() (use preg_replace() with the 'i' modifier instead)
set_magic_quotes_runtime() and its alias, magic_quotes_runtime()
session_register() (use the $_SESSION superglobal instead)
session_unregister() (use the $_SESSION superglobal instead)
session_is_registered() (use the $_SESSION superglobal instead)
set_socket_blocking() (use stream_set_blocking() instead)
split() (use preg_split() instead)
spliti() (use preg_split() with the 'i' modifier instead)
sql_regcase()
mysql_db_query() (use mysql_select_db() and mysql_query() instead)
mysql_escape_string() (use mysql_real_escape_string() instead)

preg_replace() - Ab PHP 5.5.0 wird bei Übergabe des Modifikators "\e" ein Fehler der Stufe E_DEPRECATED ausgegeben.

Passing locale category names as strings is now deprecated. Use the LC_* family of constants,instead. The is_dst parameter to mktime(). Use the new timezone
handling functions instead.

Deprecated features:
Assigning the return value of new by reference is now deprecated. Call-time pass-by-reference is now deprecated. The use of {} to access string offsets is
deprecated. Use [] instead.

Deprecated features in PHP 7.0 und höher
Die MySQL-Erweiterung ist seit PHP 5.5.0 als veraltet markiert und wird seit PHP 7.2.16 nicht mehr unterstützt. Damit wurden auch alle MySQL-Funktionen entfernt.
Stattdessen ist die Erweiterung MySQLi (MySQL improved, improved ... verbessert, aufgebessert) zu nutzen.

preg_replace() - Ab PHP 5.5.0 wird bei Übergabe des Modifikators "\e" ein Fehler der Stufe E_DEPRECATED ausgegeben. Ab PHP 7.0.0 ist die Verwendung des
"\e" Modifikators ein Fehler; ein E_WARNING wird in diesem Fall ausgegeben. Die Unterstützung für den /e Modifikator wurde entfernt.

mktime() - Der Parameter isDst (Sommer- oder Winterzeit) wurde entfernt.

Die alten $HTTP_*_VARS Arrays gelten als veraltet und werden nicht mehr empfohlen.
$HTTP_COOKIE_VARS
$HTTP_GET_VARS
HTTP_POST_VARS
$HTTP_POST_FILES
$HTTP_SESSION_VARS

Die ASP-Tags <%, %>, <%=, und der Script-Tag <script language="php"> wurden von PHP entfernt.

Deprecated features in PHP 7.1 und höher
crypt() - ersetzt durch password_hash()

Deprecated features in PHP 7.2 und höher
create_function()
each()

Deprecated features in PHP 7.3 und höher
strrchr() - Die Übergabe eines integer als needle wurde missbilligt.
strpos() - Die Übergabe eines integer als needle wurde missbilligt.
stristr() - Die Übergabe eines integer als needle wurde missbilligt.
strstr() - Die Übergabe eines integer als needle wurde missbilligt.

oben 
Quellenverzeichnis
 PHP-Manual; http://www.php.net -> Documentation
 SelfPHP;  http://www.selfphp.de
 SelfHTML; http://de.selfhtml.org; http://aktuell.de.selfhtml.org/extras/download.shtml
 FIT4PHP.net; http://www.fit4php.net
 Zeitschrift: PHP-Solutions; einige Ausgaben des Jahres 2006
 Zeitschrift: PHP-Professionell; einige Ausgaben des Jahres 2006
 Zeitschrift: Internet-Professionell; einige Ausgaben der Jahre 2003 - 2005; www.internet-pro.de
 Zeitschrift: hakin9; einige Ausgaben der Jahre 2004 - 2005; https://hakin9.org/
 Buch: PHP-Workshop von Michael Seeboerger-Weichselbaum; Verlag: Rowohlt Taschenbuch Verlag
 Buch: workshop PHP von Christian Wenz, Andreas Kordwig, Tobias Hauser; Verlag: Addison-Wesley


Seitenanfang