PHP-Course/tasks/functions/funktionen.php
2024-05-31 12:49:47 +02:00

128 lines
4.0 KiB
PHP

<!DOCTYPE html>
<html lang="en">
<head>
<?php include_once "../../base/meta.php" ?>
<title>Counter</title>
</head>
<body>
<?php
include_once "../../base/settings.php";
include_once "../../base/headers.php";
Headers::html();
/* Aufgabe 1 (A)
Programmieren Sie eine Funktion buildlink,
die aus einem Text und einer Url einen
HTML-Hyperlink zusammensetzt und diesen zurückgibt.*/
//Hier Funktion 1 implementieren
function buildlink($name, $url)
{
return "<a href=\"$url\">$name</a>";
}
/*So könnten die Funktionsaufrufe für die Funktion buildlink aussehen.
Beim zweiten Aufruf wird die Rückgabe der Funktion ohne Zwischenvariable direkt mit echo ausgegeben. Die Beispielaufrufe können zum Testen der Funktion verwendet werden.*/
$ergebnis = buildlink("Google", "https://www.google.de");
echo "$ergebnis<br>";
echo buildlink("PHP-Doku", "https://www.php.net");
/* Aufgabe 2 (A)
Programmiere Sie eine Funktion isHexColor, die überprüft, ob ein Wert eine hexadezimale Farbe ist. Die Funktion erhält den Wert als Zeichenkette. Sie soll true zurückgeben, wenn die Zeichenkette eine hexadezimale Farbe ist und sie soll false zurückgeben, wenn die Zeichenkette keine hexadezimale Zahl ist.*/
//Hier Funktion 2 implementieren
function isHexColor($colour)
{
return preg_match("/^#([0-9A-Fa-f]{3,4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/", $colour);
}
//So könnten die Funktionsaufrufe für die Funktion isHexColor aussehen.
//Ändern Sie den Wert #GG000, um die Funktion auch mit anderen Eingaben zu testen.
$wert = "#GG000"; //#330055
$ergebnis = isHexColor($wert);
if ($ergebnis == true)
echo "<p>$wert ist eine hexadezimale Farbe</p>";
else
echo "<p>$wert ist keine hexadezimale Farbe</p>";
/* 3 (M)
Programmieren Sie eine Funktion wortzaehler,
die eine Zeichenkette mit einem Satz erhält und die die Anzahl der Wörter im Satz zurückgibt.*/
//Hier Funktion 3 implementieren
function wortzaehler($sentence)
{
return count(explode(" ", $sentence));
}
/*So könnten ein Funktionsaufruf für die Funktion wortzaehler aussehen. Die Rückgabe der Funktion wird in der Variablen $ergebnis gespeichert und anschließend mit einem echo ausgegeben.
Der Beispielaufruf kann zum Testen der Funktion verwendet werden.*/
$satz = "Das ist das Haus vom Nikolaus";
$ergebnis = wortzaehler($satz);
echo "<p>Der Satz <b>$satz</b> hat $ergebnis Wörter</p>"; //6 Wörter
/*Aufgabe 4 (F)
Implementieren Sie mithilfe von zwei Funktionen: addHit und getHits einen einfachen Zugriffszähler.
Die Funktion addHit soll eine Zahl in einer Datei um eine Ganzzahl hochzählen.
Die Funktion getHits soll eine Zahl aus einer Datei auslesen und ausgeben.
Details siehe Aufgabenstellung in Blackboard. */
//Hier Funktion 4 implementieren
function addHit($file)
{
if (!file_exists("./data/$file")) {
file_put_contents("./data/$file", "1");
setcookie("counter-visit", "true", ["expires" => time() + 60 * 60 * 24, "samesite" => "strict", "secure" => true, "httponly" => true]);
return;
}
$f = fopen("./data/$file", "r+");
if (flock($f, LOCK_EX)) {
$cnt = intval(fgets($f)) ?? 0;
if (!isset($_COOKIE["counter-visit"])) {
rewind($f);
$cnt += 1;
fputs($f, strval($cnt));
setcookie("counter-visit", "true", ["expires" => time() + 60 * 60 * 24, "samesite" => "strict", "secure" => true, "httponly" => true]);
}
}
flock($f, LOCK_UN);
fclose($f);
}
function getHits($file)
{
if (!file_exists("./data/$file"))
return "<p>Die Seite wurde noch nicht besucht</p>";
$f = fopen("./data/$file", "r");
if (flock($f, LOCK_EX)) {
$cnt = intval(fgets($f)) + 1;
return "<p>Sie sind der $cnt Besucher</p>";
}
flock($f, LOCK_UN);
fclose($f);
}
echo getHits("counter.txt");
addHit("counter.txt");
?>
</body>
</html>