Quelle: Ian Baker
<?php
$link = 'http://www.cinestar.de/de/kino/berlin-cinestar-original-im-sony-center/veranstaltungen/original-sneak-mysterie-movie-ov/';
$html = file_get_contents($link);
if (strpos($html, 'time_table_container') == false) die;
$to = 'beierm@htw-berlin.de';
$subject = 'Tickets können jetzt reserviert werden.';
$message = "Go go go: $link";
$headers = 'From: "Sneak-Scanner" <beierm@htw-berlin.de>';
mail($to, $subject, $message, $headers);
?>
Keine Sprache, sondern eine willkürliche Sammlung an Funktionalität.
⋯ und die sind auch noch inkonsistent benannt.
PHP-Code wird unausweichlich chaotischer, unwartbarer Mist.
PHP ist das Nickelback der Programmiersprachen.
Aber Facebook, Wikipedia und WordPress nutzen PHP!
php -a
oder PsySHphp.ini
phpinfo
(zeigt Systeminformationen an)<?php phpinfo(); ?>
abstract
, and
, array()
, as
, break
, case
, catch
, class
, clone
, const
, continue
, declare
, default
, do
, else
, elseif
, enddeclare
, endfor
, endforeach
, endif
, endswitch
, endwhile
, extends
, final
, for
, foreach
, function
, global
, goto
, if
, implements
, interface
, instanceof
, namespace
, new
, or
, private
, protected
, public
, static
, switch
, throw
, try
, use
, var
, while
, xor
TRUE
, FALSE
, NULL
, NAN
PHP_VERSION
PHP_EOL
(OS-kompatibel, sonst nicht nötig)E_ALL
, E_ERROR
, E_WARNING
, E_PARSE
, E_NOTICE
<?php define('NULLPUNKT', -273.15); ?>
<?php
Class Temperature {
const NULLPUNKT = -273.15;
}
?>
A.k.a. Magische Konstanten
__CLASS__ |
Name einer Klasse |
__DIR__ |
Verzeichnisname der Datei |
__FILE__ |
Vollständiger Pfad- und Dateiname |
__LINE__ |
Aktuelle Zeilennummer einer Datei |
__FUNCTION__ |
Name der Funktion |
__METHOD__ |
Name einer Klassenmethode |
__NAMESPACE__ |
Name des aktuellen Namespaces |
die() |
Entspricht exit() |
echo |
Gibt einen oder mehrere Strings aus |
empty() |
Prüft, ob eine Variable einen Wert enthält |
exit() |
Gibt eine Meldung aus und beendet aktuelles Skript |
eval() |
Wertet eine Zeichenkette als PHP-Code aus |
include |
Bindet eine angegebene Datei ein und führt sie aus |
include_once |
include , aber pro Datei nur einmal ausgeführt |
isset() |
Prüft, ob Variable existiert und nicht NULL ist |
list() |
Weist Variablen zu, als wären sie ein Array |
require |
Wie include , aber stirbt, wenn Datei fehlt |
require_once |
require , aber pro Datei nur einmal ausgeführt |
return |
Beendet Funktion oder Programm |
print |
Ausgabe eines Strings |
unset() |
Löschen einer angegebenen Variablen |
__halt_compiler() |
Beendet die Kompilerausführung |
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>Entscheidungshilfe</title>
</head>
<body>
<h1>Soll ich es tun?</h1>
<p><?php echo rand(0,1) ? "Ja" : "Nein"; ?>!</p>
</body>
</html>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>Entscheidungshilfe</title>
</head>
<body>
<h1>Soll ich es tun?</h1>
<p>Ja!</p>
</body>
</html>
Zeit: <?php echo date('H:i:s'); ?>
Zeit: <?= date('H:i:s') ?>
<?php
// Kommentar
# Kommentar
/* Kommen-
tar */
echo 'Ohne schließendes Tag Interpretation bis zum Ende';
Quelle: Michael Koziarski
$
<?php $name = 'Waldo'; ?>
<strong>Hallo <?= $name ?>!</strong>
boolean
, integer
, float
, string
, array
, object
, resource
, callable
, null
E_NOTICE
, darum empty()
oder isset()
benutzen<?php
if (isset($var) && $var == 5) { echo 'Fünf'; }
?>
==
vergleicht Wert (wenn nötig mit Typumwandlung)===
vergleicht Wert und Typ (ebenso !==
)<?php
$var *= ($var = 5); // 25
$var = '5zig';
echo (bool) $var; // 1 (auch: !!$var)
settype($var, 'integer');
echo $var; // 5
$var == '5' // true
$var === '5' // false
?>
+
für Addition.
für String Concatenation (auch .=
statt +=
)@
zur Fehlerunterdrückung++
für Inkrement--
für Dekrement<?php
echo '1' + 2 + '3'; // 6
echo '1' . 2 . '3'; // 123
echo 'Hallo ' . @$jibbet_nich; // Hallo
$var = 'y';
$var++; // z
++ $var; // aa
?>
<?php
$name = 'Waldo';
echo "Hallo \t $name"; // Hallo Waldo
echo 'Hallo \t $name'; // Hallo \t $name
echo 'Alles Gute ' . $name;
echo "Heute ist {$name}s Geburtstag";
echo "Auch: ${name}, {$person->name} und {$person['name']}.";
echo "Gib mir ein $name[0]! Gib mir ein $name[1]! … Und was macht das? $name!";
?>
<?php
$name = 'Waldo';
$content = <<<EOF
Werter Herr $name,\n
Ihre Nachricht mit dem Inhalt "'; DROP DATABASE --" wird
alsbald bearbeitet.
EOF;
echo 'Hier liegen ' . trim(`ls *.php | wc -l`) . ' PHP-Dateien';
?>
<?php if (true): ?>
<strong>Wahr.</strong>
<?php else: ?>
<strong>Falsch.</strong>
<?php endif; ?>
<?php
if ($name == 'A') echo 'Hallo A';
elseif ($name == 'B')
echo 'Hallo B';
else {
echo 'Hallo';
}
?>
<?php
$a && $b // Und
$a and $b // TRUE wenn sowohl $a als auch $b TRUE ist.
$a || $b // Oder
$a or $b // TRUE wenn $a oder $b TRUE ist.
$a xor $b // Exklusives Oder
// TRUE wenn entweder $a oder $b TRUE ist, aber nicht beide.
! $a // Nicht – TRUE wenn $a nicht TRUE ist.
?>
Geben immer boolschen Wert zurück (nicht Wert der Variablen).
<?php
$var = 0 || 'foo';
echo "Var: $var"; // Var: 1
var_dump($var); // bool(true)
// Setting defaults
$name = $name || 'anonymous'; // NEIN
$name = $name ? $name : 'anonymous'; // JA
$name = $name ?? 'anonymous'; // ab PHP7
?>
<?php $neffen = array('Tick', 'Trick', 'Track');
$zahlen = [1,2,3]; // Syntax seit PHP 5.4
$tmnt = array(
'Leonardo' => 'two swords',
'Michelangelo' => 'pair of nunchucks',
'Raphael' => 'pair of sai',
'Donatello' => 'bō staff',
);
$neffen[0] = 'Tock'; // ändern
$neffen[] = 4; // anhängen, Typ egal
unset($neffen[2]); // entfernen
?>
<?php $neffen = array('Tick', 'Trick', 'Track');
$tmnt = array('Leonardo' => 'two swords'); // etc
foreach ($neffen as $val) { echo $val; }
foreach ($tmnt as $turtle => $weapon) {
echo "Name: $turtle\tWeapon: $weapon\n";
}
while ($neffen) { echo array_shift($neffen); }
sizeof($neffen); // 0
?>
<?php $tmnt = [
['Leonardo', 'blue', 'two swords'],
['Michelangelo', 'orange', 'a pair of nunchucks'],
['Raphael', 'red', 'a pair of sai'],
['Donatello', 'purple', 'a bō staff']
];
foreach ($tmnt as list($turtle, $color, $weapon)) {
echo "$turtle waers a ${color} bandana and $weapon.\n";
}
?>
<?php function multiply($num1, $num2) {
return $num1 * $num2;
}
// Default Parameter
function greet($name = 'Unbekannter') {
echo "Hallo $name.";
}
greet('Donald'); // Hallo Donald.
greet(); // Hallo Unbekannter.
?>
<?php function nimmersatt($a, $b) {
$params = implode(', ', func_get_args());
echo "Parameter: $params.\n";
}
// Variadische Funktionen
function nimmersatt2($a, $b, ...$params) {
echo 'Anzahl weiterer Parameter: ' . count($params);
}
$neffen = array('Tick', 'Trick', 'Track');
nimmersatt2('foo', ...$neffen); // 2 // Argument Unpacking
?>
<?php // Type Hinting
function size(Array $array) {
return sizeof($array);
}
echo size(array(1,2,3)); // 3
echo size('nooooooooo'); // PHP Catchable fatal error …
// Return Type Declarations
function foo() : array {
return [];
}
?>
<?php
function factorial($number) {
if (!$number) return 1; // 0 == false
return $number * factorial($number - 1);
}
echo factorial(6); // 720
?>
<?php $val = 5;
function square1($number) { return $number * $number; }
echo square1($val); // 25
// Objekt-Referenzen durch &-Operator
function square2(&$number) { $number = $number * $number; }
square2($val);
echo $val; // 25
square2(11); // PHP Fatal error:
// Only variables can be passed by reference
?>
<?php $zahl = 5;
$name = 'zahl';
$$name = 3;
echo $zahl; // 3
$woot = 'name';
$$$woot = 7;
echo $zahl; // 7
${'za' . 'hl'} = 11; // $zahl = 11;
?>
<?php
function yell() { echo 'Yeah!'; }
function waitand($callback) {
sleep(2);
// $callback(); // tollkühner, geht aber auch
is_callable($callback) && call_user_func($callback);
}
waitand('yell'); // nach 2 Sekunden: "Yeah!"
?>
<?php
function length($a, $b) {
return strlen($a) - strlen($b);
}
$tiere = array('Hund', 'Katze', 'Wal', 'Stirnlappenbasilisk');
uasort($tiere, 'length'); // Wal, Hund, Katze, Stirnlappenbasilisk
?>
A.k.a. Closures, Funktions-Literale, Lambda-Funktionen.
<?php
uasort($tiere, function ($a,$b) {
return strlen($a) - strlen($b);
});
$greet = function($name) { echo "Hallo $name\n"; };
$greet('World');
$greet('PHP');
?>
require
und include
(*_once
)zahlen.php
<?php
$zahlen = array(1,2,3);
?>
index.php
<?php
require_once 'zahlen.php';
echo array_sum($zahlen); // 6
?>
<html>
<head>
<title>Home</title>
</head>
<body>
<?php include header.php ?>
… Content …
</body>
</html>
echo
, print
, print_r
var_dump
, var_export
$GLOBALS |
Alle Variablen im globalen Gültigkeitsbereich |
$_GET |
GET-Variablen |
$_POST |
POST-Variablen |
$_COOKIE |
Cookies |
$_REQUEST |
Zusammenfassung aus $_GET , $_POST und $_COOKIE |
$_FILES |
Dateiupload-Variablen (hochgeladene Dateien) |
$_SERVER |
Informationen über Server |
$_SESSION |
Session-Variablen |
$_ENV |
Umgebungsvariablen |
Superglobale Variable, die alle Informationen über den Webserver enthält.
REQUEST_METHOD |
HTTP-Requestmethode |
DOCUMENT_ROOT |
Document Root-Verzeichnis |
SCRIPT_FILENAME |
Pfad des aktuell ausgeführten Skripts |
HTTP_USER_AGENT |
Formulardaten |
HTTP_REFERER |
Angebliche Web-Herkunft des Besuchers |
REMOTE_ADDR |
IP des Besuchers |
<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE ||
strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== FALSE) {
echo "Sie benutzen Microsofts Internet Explorer.<br />";
}
?>
All input is evil until proven otherwise.
filter_var
htmlspecialchars
<?php $url = filter_var($_POST['url'], FILTER_SANITIZE_URL);
$safe_html = htmlentities($input, ENT_QUOTES, 'UTF-8'); ?>
header() |
Sendet einen HTTP-Header in Rohform |
headers_list() |
Liste der gesendeten / zu sendenden Header |
headers_sent() |
Prüft, ob oder wo die Header bereits gesendet wurden |
setcookie() |
Sendet ein Cookie |
setrawcookie() |
Sendet ein Cookie, ohne seinen Wert zu URL-kodieren |
<?php
// Wir werden eine PDF Datei ausgeben
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="downloaded.pdf"');
readfile('original.pdf');
// Neuer Benutzer wurde erfolgreich angelegt
header('Location: http://www.example.com/user/3', 201);
?>
<?php
$value = 'irgendetwas von irgendwo';
setcookie('TestCookie', $value);
setcookie('TestCookie', $value, time() + 3600); /* verfällt in 1 Stunde */
setcookie('TestCookie', $value, time() + 3600, '/~rasmus/', '.example.com', 1);
?>
<?php echo $_COOKIE['TestCookie']; ?>
Möglichkeit, mit Client assoziierte Daten serverseitig zu speichern.
<?php session_start();
$_SESSION['guthaben'] = 1000000;
?> … nächste Anfrage …
<?php session_start();
echo $_SESSION['guthaben'];
session_destroy();
?>