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('/\|/', '|', $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("&", "\", """, "'", "$", "ä", "ö", "ü","Ä", "Ö", "Ü", "ß", "ç", "ñ",
"æ", "á", "à", "é", "è", "í", "ì", "ó", "ò", "ú", "ù", "ë", "ï", "ê", "«", "»",
"%", "|", "<", ">", "€");
$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(' ', ' ', $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 & bzw. das #-Zeichen
und sein HTML-Code # sollten am Anfang stehen, da sonst das &-Zeichen bzw. #-Zeichen im HTML-Code (z.B. ') 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("&", "\", """, "'", "$", "%", "|", "<", ">");
$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"><?php phpinfo</span><span style="color: #007700">(); </span><span style="color: #0000BB">?></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 ' (für ENT_HTML401) oder ' (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 " falls ENT_NOQUOTES nicht gesetzt ist
Kaufmännisches Und (&) - aus dem kaufmännischen UND wird ein &
Kleiner als (<) - aus dem kleiner als wird ein <
Größer als (>) - aus dem größer als wird ein >
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
' " & < >
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 ' (für ENT_HTML401) oder ' (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 " falls ENT_NOQUOTES nicht gesetzt ist
Kaufmännisches Und (&) - aus dem kaufmännischen UND wird ein &
Kleiner als (<) - aus dem kleiner als wird ein <
Größer als (>) - aus dem größer als wird ein >
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
<b>PHP 3/4</b> Die Befehlsreferenz
Beispiel 2
<?php
$str = "Ein 'Anführungszeichen' ist <b>fett</b>";
// Gibt aus: Ein 'Anführungszeichen' ist <b>fett</b>
echo htmlentities($str) . "<br>\n";
// Gibt aus: Ein 'Anführungszeichen' ist <b>fett</b>
echo htmlentities($str, ENT_QUOTES);
?>
Ausgabe 2 - Seitenquelltext
Ein 'Anführungszeichen' ist <b>fett</b><br>
Ein 'Anführungszeichen' ist <b>fett</b>
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ä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ß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ü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ü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 = "äöüßÄÖÜ";
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('/\\\'/', "'", $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('/\|/', '|', $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:http://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:http:(\/\/.*)@(.*)@@/', '<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ü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ö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öglicherweise besitzen Sie unzureichende Zugriffsrechte.<br><br>";
}
}
else
{
$messages="ACHTUNG: Es existieren schon HTACCESS-Dateien, d.h. es können keine weiteren HTACCESS-Dateien angelegt werden!!<br><br>";
}
}
else
{
if(!empty($_POST["kw"]) || !empty($_POST["pw"])) {
$messages="ACHTUNG: Es müssen beide Felder ausgefüllt werden und die Zeichenlä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ö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\"> </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> </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> </td>\n";
$content_body .=" </tr>\n";
$content_body .=" <tr>\n";
$content_body .=" <td colspan=\"3\"> </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> </td>\n";
$content_body .=" </tr>\n";
$content_body .=" <tr>\n";
$content_body .=" <td colspan=\"3\"> </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"> </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"> </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"> </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"> </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 (|) 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. <> -> <>). 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('/\|/', '|', $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("ä", "ö", "ü","Ä", "Ö", "Ü", "ß", "ç", "ñ", "æ", "á", "à", "é",
"è", "í", "ì", "ó", "ò", "ú", "ù", "ë", "ï", "ê", "«", "»", "€");
$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("Ą", "ą", "Ć", "ć", "Ę", "ę", "Ł", "ł", "Ń", "ń", "Ó", "ó", "Ś",
"ś", "Ź", "ź", "Ż", "ż");
$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("А", "а", "Б", "б", "В", "в", "Г", "г", "Д", "д", "Е",
"е", "Ж", "ж", "З", "з", "И", "и", "Й", "й", "К", "к", "Л", "л", "М", "м",
"Н", "н", "О", "о", "П", "п", "Р", "р", "С", "с", "Т", "т", "У", "у", "Ф",
"ф", "Х", "х", "Ц", "ц", "Ч", "ч", "Ш", "ш", "Щ", "щ", "Ъ", "ъ", "Ы", "ы",
"Ь", "ь", "Э", "э", "Ю", "ю", "Я", "я");
$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("Á", "á", "É", "é", "Í", "í", "Ó", "ó", "Ú", "ú", "Š", "š", "Ť",
"ť", "Ž", "ž", "Ě", "ě", "Ď", "ď", "Ň", "ň", "Ř", "ř", "Ů", "ů", "Č", "č");
$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("À", "à", "Â", "â", "Æ", "æ", "Ç", "ç", "È", "è", "É", "é", "Ê",
"ê", "Ë", "ë", "Î", "î", "Ï", "ï", "Ô", "ô", "Œ", "œ", "Ù", "ù", "Û", "û");
$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 < oder > durch >.
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 < oder > durch >.
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