PHP-Script Übernahme des Datums vom Server
    
 HomeAdventskalender • Serverdatum 

 Übernahme des Datums vom Server  (mit PHP-Anweisungen)

Sie möchten verhindern das Besucher, durch Verstellen des Datums auf dem lokalen Rechner, Fensterchen zu früh öffnen? Dann lassen sie das Datum nicht von JavaScript am lokalen Rechner auslesen sondern übernehmen das Datum vom Server.

PHP-Script Datum vom Server holen  (von dort, wo ihr Kalender hochgeladen wurde)

PHP erlaubt? Demo Modifikation Counter trotzdem


HTML-Beginner und Neulinge auf dem Gebiet JavaScript werden mit der Anpassung des Adventskalenders zur Übernahme des Datums vom Server Probleme haben. (nur als Bemerkung, bevor sie graue Haare bekommen ...)
  • Sie sollten wissen was eine PHP-Datei ist
  • Ihr Provider sollte ihnen erlauben PHP-Scripte auf dem Server auszuführen
  • Sie müssen sich im Quellcode von JavaScript zurechtfinden

... und der Aufwand lohnt ohne weitere Modifizierungen nicht! Warum lesen sie hier


   zur Erinnerung

Alle Funktionen des Adventskalenders (24 Fensterchen öffnen) lassen sich nicht einfach so testen. Schließlich wird durch eine Datumsprüfung verhindert, das man die Fensterchen zu früh öffnet. Zum Testen müssten sie das Systemdatum ihres Rechners vordatieren.

Info Systemdatum ver- / einstellen



   Mogeln ist auch für Besucher möglich!

Was sie zu Testzwecken können, kann auch ihr Seitenbesucher auch. Wenn sie also aus reiner Vorsicht nicht täglich und kurzfristig die entsprechende Tagesdatei hoch laden möchten, muss man das Datum woanders her holen: Vom Server.

Die im Adventskalender-Script verwendete Datumsinformation ist immer das Datum, das am lokalen Rechner eingestellt ist. Bei einem korrekt eingestellten Datum am Computer des Seitenbesuchers (Uhrzeitanzeige in der Startzeile rechts unten) wird auch das richtige Datum verwendet.

Aber ja, sie haben Recht wenn sie behaupten, das man durch Verstellen des Systemdatums (z.B. auf den 24. Dezember) in der Lage ist alle Fenster zu öffnen.


   Abhilfe mit PHP

Wenn sie versierter Webmaster sind und sich mit PHP auskennen schafft ein kleiner Trick Abhilfe: Sie nutzen das Datum des Servers (das stimmt ja immer) und übergeben das Serverdatum an das Adventskalenderscript. Dann ist Mogeln nicht mehr möglich.

Dazu darf die Adventskalenderdatei nicht als HTML-Datei, sondern als PHP-Datei gespeichert werden. Voraussetzung für diese Option ist natürlich, dass ihr Provider ihnen erlaubt PHP-Scripte auf dem Server auszuführen.

 

   Funktioniert PHP bei ihrem Provider?

Finden sie doch zunächst einmal heraus, ob ihr Provider die Verarbeitung von PHP erlaubt. Das kann abhängig vom Vertrag für günstige Angebote nicht, für teurere aber vorgesehen sein. Dann sehen wir weiter.

Speichern sie die hier angebotene PHP-Datei auf ihre Festplatte. Die Dateiendung dieser Datei ist nicht 'htm' sondern 'php'. Rechtsklicken, Datei speichern unter ...

Danach laden sie die Datei hoch. Wenn sie die PHP-Datei dann online abrufen mit

www.IhreDomain.de/php-test-02.php


und es werden ihnen von PHP verarbeitete Informationen über Zeit und IP-Adresse und nicht nur die Überschrift "PHP-Test" angezeigt, dann funktioniert die Verarbeitung von PHP-Anweisungen auch bei ihrem Provider. So ähnlich sollte es aussehen:



Das geht übrigens nur online und nicht lokal auf ihrem Rechner. Die Module zur Interpretation von PHP-Anweisungen stehen auf ihrem Rechner üblicherweise nicht zur Verfügung, es sei denn, sie haben einen eigenen Server zu Hause oder einen Pseudo-Server installiert.

 

   Dann kann's ja weiter gehen ...

Hier habe ich einmal eine Demo hoch geladen die ihnen aufzeigt, das das PHP-Script
  • das Serverdatum zunächst einmal ausliest
  • das Serverdatum in eine PHP-Variable schreibt
  • den Wert dieser Variablen an JavaScript übergibt
  • der Wert so angepasst wird, das es einem JavaScript-Datumswert entspricht
Dazu lasse ich durch JavaScript den von PHP übergebenen und danach angepassten Datumswert anzeigen. Zum Vergleich wird auch der vom lokalen Rechner ermittelte Datumswert angezeigt.

PHP-Datei in einem neuen Browserfenster anzeigen.


 

   Jetzt kommt der schwierige Teil ...

4 Arbeitsschritte zur Modifikation ihres Kalenders:

  • zusätzlichen Code in den HEAD-Bereich kopieren (siehe weiter unten)
  • zusätzliche Codezeile in das Adventskalender-Script einfügen
  • Adventskalender-Datei als PHP-Datei speichern
  • PHP-Datei hochladen
Die Erklärungen dazu:

Ich lasse von meinem PHP / JavaScript den ermittelten Datumswert vom Server in eine JavaScript-Variable schreiben, damit das Adventskalender-Script diesen Wert für seine Berechnungen verwenden kann.

1  Datumswert durch PHP ermitteln lassen

Sie notieren also zunächst die Codezeilen zur Ermittlung des Serverdatums in den Kopfbereich ihrer Kalenderseite. Wichtig: Das Script soll als erstes JavaScript der Seite notiert sein, also noch oberhalb des Kalender-Scripts!

Dieses Script in den HEAD-Bereich ihrer Adventskalender-PHP-Datei kopieren:
<script type="text/javascript" language="JavaScript">
<!--

// Zeitwert vom Server in Sekunden
var serverzeitSec = <?php echo time() ?>

// umgerechnet in Millisekunden
var serverzeitMilliSec = serverzeitSec * 1000;

// neue JavaScript-Variable definieren
var JetztZeit = new Date();

// berechneten Server-Zeitwert in die Variable schreiben
JetztZeit.setTime(serverzeitMilliSec);

//-->
</script>
Zur Verdeutlichung habe ich den Arbeitablauf in 4 einzelnen Schritten aufgezeigt. Die Umrechnung des Datumswetes ist notwendig, weil die Unix-Zeit vom Server in Sekunden zurück gegeben wird, JavaScript aber einen Wert in Millisekunden verwendet. Es handelt sich aber in beiden Fällen um einen Zeitwert berechnet ab dem 1. Januar 1970, 0:00 Uhr UTC. Für sie wichtig ist aber lediglich:

Der ermittelte Wert steht nun in der JavaScript-Variablen 'JetztZeit'


2  Wert in das Kalender-Script übernehmen

Im Kalender-Script wird für die Prüfung (öffnen erlaubt?) das Systemdatum verwendet. Das geschieht innnerhalb einer Funktion. In meinen Adventskalendern verwende ich unterschiedliche Funktions- und Variablennamen.

Ich nehme hier im Beispiel einmal an, die Funktion hieße 's(nummer)' und die Variable 'datum'. Der in der Prüfung verwendete Datumswert stünde also in der Variablen 'datum'.

function s(nummer)
{
var datum = new Date();
...
Möchten sie den durch PHP-ermittelten und an JavaScript übergebenen Datumswert verwenden, muss der Wert von 'JetztZeit' in die Kalender-Script-Variable 'datum' »transportiert« werden. Fachleute sagen: sie weisen den Wert von 'JetztZeit' der Variablen 'datum' zu. Der bis zu diesem Zeitpunkt dort abgelegte Datumswert wird durch die Zuweisung überschrieben.

Dazu muss innerhalb der Funktion 's(nummer)' eine zusätzliche Codezeile eintragen werden:
function s(nummer)
{
var datum = new Date();
datum = JetztZeit;
...
das bedeutet: Der Wert von 'datum' ist nun das, was in der variablen 'JetztZeit' stand.

Nun enthält die im Adventskalender-Script verwendete Variable 'datum' den Datums-Zeit-Wert, der auf dem Server ermittelt wurde. Beim Klicken auf ein Fensterchen wird nun zur Prüfung dieser neue Wert verwendet.


3  Kalenderdatei als PHP-Datei speichern

Meine Kalenderdateien sind HTML-Dateien, erkennbar an der Dateiklasse 'htm'. Wenn Sie die kalenderdatei angepasst haben soll die Datei als PHP-Datei gespeichert werden. Speichern Sie die Datei also nun mit der Dateiendung 'php' ab. Der Link auf den Kalender innerhalb Ihres Projekts müsste nun allerdings auch angepasst werden. Verweisen Sie also auf die PHP-Datei.

Übrigens sollte zu diesem Zeitpunkt der Kalender gründlich getestet sein und funktionieren.


4  Datei auf den Server laden

Natürlich muss vor dem Abruf / der Anzeige des kalenders die PHP-datei zuerst auf den Server hoch geladen Werden. Zur Erinnerung: PHP-Funktionen werden auf dem Server ausgeführt. Ein Testen ist (normalerweise) nur möglich, wenn Sie Ihren kalender online abrufen!


 Nix mehr mit Mogeln, ... oder doch?

Natürlich kann man weiterhin Mogeln. Im Internet ist nichts sicher, zumindest nicht für immer! Neugierig? Dann lesen sie später ganz unten weiter ...

 

   Datumswerte für die Counter

... noch x Tage bis Weihnachten, x Tage bis zum ersten Fensterchen

Bitte berücksichtigen sie: Die Datumsberechnungen für aktuelles Datum und Countdown, die unter den Adventskalendern angezeigt wird, basieren in einigen Versionen immer noch auf lokaler Rechnerzeit!

Grund: Dazu wurde eine (oder abhängig von der Kalenderversion mehrere) zusätzliche Datums-Variable(n) mit anders lautenden Variablennamen kreiert!

Möchte man auch dort die Serverzeit verwenden, müsste man wie in der Kontroll-Funktion den Datumswert ersetzen. Das bedeutet, gleich in der nächsten Zeile unterhalb der Deklaration des Datums-Objekts ( var xxxx = new Date() ), muss eine Codezeile eingetragen werden:
var Variablenname = new Date();
Variablenname = JetztZeit;
Beispiel:
var Kalnow = new Date();
Kalnow = JetztZeit;

 



      Mogeln ... und es geht doch!

Ein vorzeitiger Abruf der Datein aus dem Kalender heraus ist non nicht mehr möglich!

Aus dem Adventskalender heraus lässt sich nun eine 'verbotene' Datei nicht mehr aufrufen aber das Prinzip der Datenablage für ihre Tagesdateien ist einfach zu durchschauen.

Vorzeitiger Abruf der Datein über die Adresszeile des Browsers bleibt dennoch möglich!

Sobald ihr Seitenbesucher die logische Namensvergabe für die Tagesdateien erkennt und sieht, in welchem Ordner sie stehen





wird er wohl in der Lage sein, die URL der nächsten Tagesdatei einzutragen.
http://www.web-toolbox.net/webtoolbox/adventskalender/advent01/06.htm



   Dateinamen verschlüsseln

Dem können wir nun auch wieder 'ein Stöckchen vorschieben' (sagt man bei uns im Rheinland) und legen unsere Tagesdateien unter solchen Bezeichnungen ab:
http://www.domainname.de/ordner/ordner/535422888.htm     (für Tag 10)
http://www.domainname.de/ordner/ordner/486748080.htm     (für Tag 11)
http://www.domainname.de/ordner/ordner/446185740.htm     (für Tag 12)
... logischerweise wäre die URL für die Tagesdatei 13 dann
http://www.domainname.de/ordner/ordner/411863760.htm
Und wo liegt die Logik?

Nun, der Dateiname wird durch eine logische Rechenoperation ermittelt, der die angeklickte Tageszahl mit einbezieht. Für Mathe-Asse kein Problem das aufzulösen aber vor der neugierigen Vorausschau kommt nun immer das Rechnen (übrigens reichen simple Taschenrechner mit nur 8 Stellen nicht aus).

Kein echter Schutz also - aber eine Bremse!


Iss ja klar (Atze Schröder): Das JavaScript zur Datumsprüfung im Adventskalender müsste beim Einsatz dieser Technik ein wenig modifiziert werden.

Wie das geht lesen Sie hier: Querverweis Dateinamen verschlüsseln



* * *

Das als Standard im meine Scripte einzubeziehen wäre kein Problem. Allerdings sind die Tagesdateien nicht mehr am Dateinamen erkennbar. Eine zu große Hürde für HTML-Beginner. meine Vorlagen sollen simpel und unkompliziert bleiben.



* * *

Es gibt auch andere, weit kompliziertere Mechanismen oder PHP-Funktionen in Kombination mit .htaccess, die bestimmte Zugriffe auf Verzeichnisse datumsabhängig nicht zulassen.

So viel Aufwand möchte man aber nicht betreiben. Dann bleiben wir doch einfach beim täglichen Upload der Tagesdateien.









NACH OBEN