Zur Startseite Neulich erreichte mich folgende Frage:
Ich möchte ein PHP-Skript haben, dass ich in meine Internetseite einfügen kann. Beim Aufruf der Seite soll dann ein zufällig ausgewählter Text als "Tagestipp" erscheinen
Hier eine mögliche Lösung:
Die Tagestipps schreiben Sie in eine Textdatei und nennen diese "tagestipps.txt"
Morgens und Abends zähneputzen nicht vergessen Vor dem Abbiegen Blinker setzen Gekochte Eier immer kurz kalt abschrecken Nach dem Stuhlgang, vor dem Essen, Händewaschen nicht vergessen
Nun erstellen Sie ein PHP-Skript mit dem Namen "tipp.php"
<?php
// zufälligen Tagestipp anzeigen
// Die Tagestipps befinden sich in der
// Datei 'tagestipps.txt' und zwar
// jeweils eine Zeile pro Tipp.
define(DATEI, 'tagestipps.txt');
function zeige_tagestipp()
{
// Zeilen zählen:
$fp = fopen(DATEI, 'r');
if (!$fp) die ('kann Datei ' . DATEI . ' nicht öffnen');
$count = 0;
while (!feof($fp))
{
$zeile = fgets($fp); // eine Zeile lesen
// mögliche leere Zeilen übergehen
if (trim($zeile) > '')
{
$count++; // Zähler + 1
}
}
echo "count: $count<br>";
// Zufallsgenerator initialisieren
// kann ab PHP Version 4.2 entfallen
mt_srand ((double) microtime() * 1000000);
// Zufallszahl erzeugen
$num = mt_rand(1, $count);
echo 'Tipp Nummer ' . $num . ': ';
// Datei zurückspulen
rewind($fp);
while ( ($num > 0) and (!feof($fp)) )
{
$zeile = fgets($fp);
if (trim($zeile) > '')
{
$num--;
}
}
echo $zeile;
fclose($fp);
}
Wie funktioniert das Ganze?
Zunächst wird der Dateiname als Konstante DATEI definiert, damit sie später im Skript bequem verwendet werden kann. Falls der Dateiname einmal geändert werden soll, so braucht später nur diese Zeile mit der Funktion define() geändert zu werden
Advertisement/WerbungEs wird eine eigene Funktion zeige_tagestipp() definiert, die dann später auf der eigentlichen Seite so aufgerufen werden kann. Die Funktion öffnet die Datei mit den Tipps. Kann die Datei nicht geöffnet werden, wird das Skript mit der Funktion die() beendet.
Nun werden erst einmal alle Zeilen der Datei eingelesen. Dabei soll nur die Anzahl der Zeilen ermittelt werden. Vom Inhalt der Zeile wird lediglich geprüft, ob die Zeile aus einer Leerzeile besteht. Diese sollen nämlich nicht mitgezählt werden. Die Funktion trim() löscht dabei alle möglicherweise in der Zeile vorhanden Leerzeichen und Zeilenschaltungen, so dass bei einer leeren Zeile nichts übrigbleiben würde.
Hinweis: Wenn die Datei sehr viele Zeilen enthält, ist diese Methode nicht besonders effektiv, weil die Datei im Skript mindestens einmal eingelesen werden muss. Besser wäre es dann, die Anzahl der Zeilen (sofern diese bekannt ist) an einer anderen Stelle (in einer Konstanten oder in einer zweiten Datei) abzulegen.
Noch ein Hinweis: Natürlich würde man in der Praxis für eine solche Tagestipp-Funktion lieber eine Datenbank-Tabelle benutzen. In diesem speziellen Fall sollte aber gezeigt werden, wie so etwas auch ohne eine Datenbank realisierbar ist.
Nach dem Zählen der Zeilen wird die Textdatei mit rewind() "zurückgespult" so dass die Zeilen mit fgets() noch einmal gelesen werden können.
Die Funktion mt_rand() ermittelt dann eine zufällige Zahl zwischen 1 und der Anzahl der Textzeilen. In der nun folgenden While-Schleife werden nun genau so viele Zeilen eingelesen, wie in dieser Zufallszahl vorgegeben.
Zur Erzeugung von Zufallszahlen mit PHP können Sie übrigens hier ein weiteres Tutorial nachlesen: http://www.heddesheimer.de/coaching/password.html
Dieses Skript können Sie nun so in eine beliebige Internetseite einfügen:
<?php include 'tipp.php'; ?> <html> <head><title>Meine Homepage</title></head> <body> <?php zeige_tagestipp() ?> </body> </html>
Der Aufruf des "Tagestipps" erfolgt also an einer beliebigen Stelle auf der Seite über den Aufruf der PHP-Funktion zeige_tagestipp()
Hinweis: Diesen Text und die enthaltenen Beispielprogramme und Skripte dürfen Sie zum Erlernen der einzelnen Techniken und auch als Grundlage für Ihre eigenen Projekte auf eigene Gefahr kostenlos nutzen.
Bitte denken Sie daran, dass alle Texte und Quellcodes trotzdem urheberrechtlich geschützt sind. Eine direkte Weitergabe ist nur nach ausdrücklicher schriftlicher Genehmigung gestattet.
Bisher keine Kommentare/Pingbacks für diesen Eintrag...
