Berechnung der Sonnenschein-Dauer mit PHP


Das Beispiel demonstriert eine typische dynamische Anwendung, deren Daten sich (langsam aber) laufend ändern.

Prinzipiell wäre die Programmierung mit jeder gängigen Programmiersprache möglich: Hier wird PHP verwendet, weil das PHP-Modul date einige für diese Anwendung besonders praktische Funktionen bietet.

Das ähnliche Beispiel → Sonnen-Bahn wird mit Javascript berechnet.


Der 'wahre' Mittag (Höchststand der Sonne im Süden) wird durch die strichlierte Linie bezeichnet, die aktuelle Zeit mit der  roten Linie.
Bei Normalzeit schneidet die Mittags-Linie die Scheibe nahe am höchsten Punkt. Bei Sommerzeit sind alle Sektoren um 1 Stunde nach rechts verdreht: Man 'verliert' dann am Morgen genauso viel Zeit, wie man am Abend 'gewinnt'...

HTML-Einbettung

Diese Technik ist für wiederverwendbaren Elemente sinnvoll. Man kann sie auch in statischen Webseiten anwenden und damit z.B. dynamische Elemente (*.php) in einfache Webseiten (*.html) einbetten.


So ist die Mini-Webseite hier eingebettet:
<iframe src="php_sunshine$.php" style="height:200px; width.100%;">
</iframe>

▶ Mit Klick auf diesen Link wird ein roter Rand um die oben eingebettete Mini-Webseite angezeigt bzw. wieder entfernt.


So ist die Grafik in die Tabelle eingebettet (alle anderen Elemente der Tabelle sind zur Vereinfachung weggelassen):
<table>
<tr>
<td>
<iframe src="sunshine.php"></iframe>
</td>
</tr>
</table>



• Die PHP-Programme (für ↓ Mini-Webseite, ↓ Objekt-Grafik) brauchen zur Ausführung ein PHP-Interpreter-Programm und ein Webserver-Programm.
Beide gibt es kostenfrei, sie sind jedoch auf üblichen Arbeits-PC nicht installiert. Daher kann man die PHP-Programme am eigenen Arbeits-PC normalerweise nicht verwenden.
Umgekehrt sind diese Programme an jedem Standard Server-PC installiert und konfiguriert. Sie laufen problemlos an jedem Standard Webserver und liefern dann die oben gezeigte Mini-Webseite + Grafik mit stets aktuellen Daten.

Wenn man an Stelle von PHP die Programmiersprache Javascript verwendet, dann sind die Programme an jedem PC mit jedem Browser ausführbar: Das Beispiel → Sonnenbahn demonstriert diese Möglichkeit.

HTML-Quelltext der Mini-Webseite

◀   Diesen Text hat ihr Browser-Programm vom Webserver erhalten, daraus eine Mini-Webseite mit den aktuellen Daten hergestellt und oben in diese Seite eingebettet. Sie besteht fast ausschließlich aus einer HTML-Tabelle <table> mit 7 Spalten.
Sie wurde von einem ↓ PHP-Programm Live hergestellt.
Die Mini-Webseite verwendet mit Ausnahme der Grafik keinerlei externe Resourcen (z.B. CSS- oder Javascript-Dateien).

• Im <head> befindet sich ein <style>-Element mit relativ umfangreichen → CSS-Regeln zur Formatierung.

• Das <body>-Element enthält die Tabelle mit den vom ↓ PHP-Programm berechneten Daten.

• In die letzte Spalte der Tabelle ist die ↓ Objekt-Grafik eingebettet. Dieses <td>-Element (table data) erstreckt sich mit dem Attribut rowspan über 6 Zeilen.

PHP-Quelltext (Programm) der Mini-Webseite

◀   Links wird der Inhalt der Text-Datei php_sunshine$.php angezeigt.
Damit wird am Server-PC der ↑ HTML-Quelltext der Mini-Webseite bei jeder einzelnen Anforderung Live erzeugt.

• Am Anfang des HTML <body>-Elements ist ein <?php...?> Programm-Block mit der gesamten Berechnung eingefügt. Dieses PHP-Programm erzeugt keine Ausgabe, man könnte es daher an beliebiger Stelle einsetzen. Innerhalb des <body>-Elements lässt es sich jedoch viel einfacher debuggen.
Der Standort (Wien) ist zur Vereinfachung fix vorgegeben, man kann jedoch mit etwas mehr Aufwand beliebige geografische Koordinaten Live an das Programm übergeben.

• Da sich die Bewegungen astronomischer Körper nicht an politisch verordnete Regeln halten, muss man viel Aufwand treiben, um die 'Sommerzeit' (Daylight Savings) zu korrigieren.

• Die HTML-Tabelle ist vorwiegend als statischer Quelltext enthalten, die darin enthaltenen Daten werden jeweils mit PHP print-Anweisungen eingetragen.

• Hinweise zu den verwendeten Funktionen des PHP-Moduls date finden sie im Original PHP-Manual

SVG-Quelltext der Objekt-Grafik

◀   Links wird jener Text angezeigt, welchen ihr Browser soeben bei Anforderung der Datei sunshine.php erhalten hat. Jeder moderne Browser beherrscht → SVG und erzeugt daraus die rechts angezeigte Objekt-Grafik.

• Man könnte eine ähnliche Grafik alternativ als → Pixel-Grafik herstellen. Das erfordert mehr Resourcen des Servers, weil dieser auch die Umsetzung in Bildpunkte (Rendern) durchführen muss. Diese Arbeit lässt man besser von den Browser-Programmen der Clients ausführen: Damit verbessert sich die Leistung des Gesamtsystems (Server + alle Clients).

• Diese Grafik ist ideal als Objektgrafik geeignet: Der Text zeigt, dass sie nur 5 SVG-Elemente enthält, die zu einem <g>-Element (Gruppe) kombiniert sind.
Die Grafik-Objekte werden von hinten nach vorne angeordnet: Das zuerst programmierte <circle>-Element erzeugt daher einen gelb gefüllten Kreis, der von den 4 weiteren Elementen überlagert wird.

• Man kann den Quelltext der Objekt-Grafik als Datei *.svg herunterladen und am eigenen PC verwenden, sie bleibt dann jedoch statisch unverändert.

PHP-Quelltext (Programm) der Objekt-Grafik

◀   Links wird der Inhalt der Text-Datei sunshine.php angezeigt. Damit wird am Server-PC der ↑ SVG-Quelltext der (oben eingebetteten) dynamischen Objekt-Grafik erzeugt.

• Das Programm ist ohne Einschränkung portabel. Es verwendet keine externen Resourcen und ist ebenso wie eine statische Grafik-Datei zur Einbettung in Webseiten vorgesehen.

• Mit Funktion header() wird der MIME-Typ der Daten in den → HTTP-Response-Header eingetragen. Damit wird dem HTTP-Client (Browser) der Typ der nachfolgenden Daten angekündigt.

• Die Formatierung erfolgt durch → CSS-Regeln in einem <style>-Element.

• Das weitere Programm ist ähnlich wie jenes der ↑ Mini-Webseite. Es erzeugt jedoch nicht HTML-Quelltext sondern SVG-Quelltext.

Man könnte Tabelle und Grafik besonders effizient in einer einzigen Datei (XHTML + Inline-SVG) kombinieren. Davon wird hier abgesehen, weil veraltete Versionen des MSIE-Browsers dann gar keine Webseite zeigen.