strtotime funktioniert auf dem Server nicht

Hallo zusammen,

ich habe eine einfache Abfrage programmiert, die die Feiertage abfragt und rechtzeitig einige Tage vorher ankündigt.

Auf meinem Rechner funktioniert es problemlos, auf dem Server geht gar nichts, alle anderen php.include-Dateien funktionieren.

Feiertage.php

[CODE]

<?php $Valentinstag_Anfang = strtotime ( "09.02.2011" ); $Valentinstag_Ende = strtotime ( "15.02.2011" ); $Muttertag_Anfang = strtotime ( "05.05.2010" ); $Muttertag_Ende = strtotime ( "10.05.2010" ); $Pfingsten_Anfang = strtotime ( "20.05.2010" ); $Pfingsten_Ende = strtotime ( "25.05.2010" ); $date = strtotime ( "d.m.Y" ); $datum = date('d.m.Y'); if ( $date > $Valentinstag_Anfang && $date < $Valentinstag_Ende ) { include("Valentinstag.php"); } elseif( $date > $Ostern_Anfang && $date < $Ostern_Ende ) { include("Ostern.php"); } elseif ( $date > $Muttertag_Anfang && $date < $Muttertag_Ende ) { include("Muttertag.php"); } elseif ( $date > $Pfingsten_Anfang && $date < $Pfingsten_Ende ) { include("Pfingsten.php"); } else { include("Willkommen.php"); } ?>

[/CODE]Aufruf auf der Index-Seite

[CODE]


<?php include("Php-include/Feiertage.php"); ?>

[/CODE]Wird statt der Willkommenseite als Standard z.B. Muttertag gewählt funktioniert es auch, nur eben nicht auf dem Server.

Hier der Link zur Testseite:Homepage Tussi Tussel - Index

Hat jemand eine Idee woran es liegt?

Vielen Dank für Eure Mühe

Debuggen. Lass dir den Inhalt der Variablen ausgeben und versuche, so dem Problem auf die Spur zu kommen. „Geht nicht“ ist keine besonders aussagekräftige Fehlerbeschreibung.

Hallo mermshaus,

vielen Dank für Deine Mühe, ich habe inzwischen weiter getestet, scheinbar liegt es am web.de - Server, auf funpic Homepage Tussi Tussel - Index
funktioniert alles einwandfrei.

Datumsänderungen verarbeitet den PHP-code sofort richtig.

Scheinbar ist bei web.de irgend etwas bei Php abgeschaltet.

Weist Du was da abgeschaltet sein könnte bzw. wie man es über PHP-Code oder andere Programmierung umgehen kann?

Spontan nicht. Server laufen unter Umständen in einer anderen Zeitzone oder mit anderen „locale“-Einstellungen, aber es ist nicht sonderlich wahrscheinlich, dass die Zeit mehr als ein paar Stunden abweicht. Du musst daher versuchen, den Fehler einzukreisen. Lass dir per echo oder var_dump den Inhalt der Variablen bzw. die Rückgabe von date(‚Y-m-d H:i:s‘); oder so ausgeben und versuche festzustellen, was an welcher Stelle fehlschlägt.

Und schalte in deinem Script das error_reporting ein. Ganz oben:

[php]<?php
error_reporting(E_ALL | E_STRICT);[/php]

Hallo mermshaus,

trotz vieler Versuche leider kein erfolg ich bekomme nur die Meldung

Strict Standards: strtotime(): It is  not safe to rely on the system's timezone  settings. Please use the date.timezone setting, the TZ environment  variable or  the date_default_timezone_set() function. We selected 'Europe/Paris' for   '2.0/DST' instead in D:\ZZZ - CSS - Datei\HP-Seiten\Php-include\

Auch Timezone Settings brachte mich nicht weiter, auf web.de Server gehts scheinbar einfach nicht.

Trotzdem vielen Dank für Deine Mühe

Mir fällt gerade an deinem geposteten Script was auf:

$date = strtotime ( "d.m.Y" ); $datum = date('d.m.Y'); if ( $date > $Valentinstag_Anfang && $date < $Valentinstag_Ende )

Du bildest hier strtotime von der Zeichenkette ‚d.m.Y‘ und nutzt die Rückgabe (vermutlich 0?) in deinen if-Abfragen. Das dürfte nicht klappen. Verwechselst du da $date und $datum?

Falls es das wider Erwarten nicht ist, poste doch mal den Inhalt von $Muttertag_Anfang, $Muttertag_Ende, $date und $datum.

Hallo mermshaus,

trotz vieler Versuche klappt es einfach nicht auch mit der Abfrage von date oder strtotime. Aus irgendwelchen Gründen wird hier einfach nicht das Datum richtig verglichen.

Die Datum-Variable „date“ und „$datum“ werden korrekt ausgegeben.

Hier nochmal der komplette Code, alle Include-Aufrufe beziehen sich nur auf einfache Bilder ohne Php Code.

<?php
error_reporting(0);

$Valentinstag_Anfang = strtotime ( "09.02.2010" );

$Valentinstag_Ende = strtotime ( "15.02.2010" );

$Ostern_Anfang = strtotime ( "30.03.2010" );

$Ostern_Ende = strtotime ( "06.04.2010" );

$Muttertag_Anfang = strtotime ( "05.05.2010" );

$Muttertag_Ende = strtotime ( "10.05.2010" );

$Pfingsten_Anfang = strtotime ( "20.05.2010" );

$Pfingsten_Ende = strtotime ( "25.05.2010" );

$Winterzeit_Anfang = strtotime ( "28.10.2010" );

$Winterzeit_Ende = strtotime ( "01.11.2010" );

$Halloween_Anfang = strtotime ( "28.10.2010" );

$Halloween_Ende = strtotime ( "01.11.2010" );

$Weihnachten_Anfang = strtotime ( "20.12.2010" );

$Weihnachten_Ende = strtotime ( "27.12.2010" );

$Sylvester_Anfang = strtotime ( "29.12.2010" );

$Sylvester_Ende = strtotime ( "04.01.2011" );


$date = strtotime ( "d.m.Y" );

$datum = date("d.m.Y");


if ( $date > $Valentinstag_Anfang && $date < $Valentinstag_Ende )
{
include("Valentinstag.php");
}
elseif( $date > $Ostern_Anfang && $date < $Ostern_Ende )
{
include("Ostern.php");
}
elseif ( $date > $Muttertag_Anfang && $date < $Muttertag_Ende )
{
include("Muttertag.php");
}
elseif ( $date > $Pfingsten_Anfang && $date < $Pfingsten_Ende )
{
include("Pfingsten.php");
}
elseif ( $date > $Winterzeit_Anfang && $date < $Winterzeit_Ende )
{
include("Winterzeit.php");
}
elseif  ( $date > $Weihnachten_Anfang && $date < $Weihnachten_Ende )
{
include("Weihnachten.php");
}
elseif  ( $date > $Sylvester_Anfang && $date < $Sylvester_Ende )
{
include("Silvester.php");
}
else
{
include("Willkommen.php");
}

?>

Ich bräuchte mal dringend einen Denkanstoß oder einen freien Kopf, ich sehe im Moment einfach nicht den Fehler.

Vielen Dank für Deine Hilfe.

Es gibt doch definierte Regeln, wie die Feiertage gebildet werden. Warum baust du dir nicht eine Struktur auf, welche mit den berechneten Daten gefüllt wird?

Dann gibst du die entsprechenden Daten aus.

Okay, ich sage es noch mal:

[php]$date = strtotime ( „d.m.Y“ );
$datum = date(„d.m.Y“);

if ( $date > $Valentinstag_Anfang && $date < $Valentinstag_Ende ){
include(„Valentinstag.php“);
}[/php]

Hier erhält $date den Wert false, weil strtotime nicht korrekt angewendet wird. Das heißt, es wird danach verglichen, ob false (bzw. 0) zwischen dem Start- und Enddatum liegt.

Du meinst wahrscheinlich:

[php]$date = strtotime(date(‚d.m.Y‘));[/php]

Bzw. einfach:

[php]$date = time();[/php]

Debuggen…

PHP kennt im übrigen ein schönes DateTime-Objekt, wo man mit Daten arbeiten und diese dann auch noch vergleichen kann: PHP: DateTime::diff - Manual

Wenn der Interval bei diff() gleich <= 0 ist, dann ist der Tag da, läuft oder ist vorbei.

Hallo zusammen,

vielen Dank für Eure Tipps, ich habe mich nochmal den ganzen Tag damit beschäftigt und eine zweite Lösung erstellt.

Seltsamerweise funktioniert es auf dem Funpic-Server ohne Probleme
Homepage Tussi Tussel - Index

nur bei Web.de (exakt derselbe Code) funktioniert es wieder nicht.
Homepage Tussi Tussel - Index

es wird die falsche Auswahl angezeigt.

[CODE]

<?php /* error_reporting(E_ALL); */ error_reporting(0); $Valentinstag_Anfang = date ( "09.02.2010" ); $Valentinstag_Ende = date ( "15.02.2010" ); $Ostern_Anfang = date ( "30.03.2010" ); $Ostern_Ende = date ( "06.04.2010" ); $Muttertag_Anfang = date ( "05.05.2010" ); $Muttertag_Ende = date ( "10.05.2010" ); $Pfingsten_Anfang = date ( "20.05.2010" ); $Pfingsten_Ende = date ( "25.05.2010" ); $Winterzeit_Anfang = date ( "28.10.2010" ); $Winterzeit_Ende = date ( "01.11.2010" ); $Weihnachten_Anfang = date ( "20.12.2010" ); $Weihnachten_Ende = date ( "27.12.2010" ); $Sylvester_Anfang = date ( "29.12.2010" ); $Sylvester_Ende = date ( "04.01.2011" ); $date = date("d.m.Y"); if (strtotime($date) >= (strtotime($Valentinstag_Anfang)) && (strtotime($date)) <= (strtotime($Valentinstag_Ende))){ include("Valentinstag.php"); } elseif (strtotime($date) >= (strtotime($Ostern_Anfang)) && (strtotime($date)) <= (strtotime($Ostern_Ende))){ include("Ostern.php"); } elseif (strtotime($date) >= (strtotime($Muttertag_Anfang)) && (strtotime($date)) <= (strtotime($Muttertag_Ende))){ include("Muttertag.php"); } elseif (strtotime($date) >= (strtotime($Pfingsten_Anfang)) && (strtotime($date)) <= (strtotime($Pfingsten_Ende))){ include("Pfingsten.php"); } elseif (strtotime($date) >= (strtotime($Winterzeit_Anfang)) && (strtotime($date)) <= (strtotime($Winterzeit_Ende))){ include("Winterzeit.php"); } /* elseif (strtotime($date) >= (strtotime($Halloween_Anfang)) && (strtotime($date)) <= (strtotime($Halloween_Ende))){ include("Weihnachten.php"); } */ elseif (strtotime($date) >= (strtotime($Weihnachten_Anfang)) && (strtotime($date)) <= (strtotime($$Weihnachten_Ende))){ include("Weihnachten.php"); } elseif (strtotime($date) >= (strtotime($Sylvester_Anfang)) && (strtotime($date)) <= (strtotime($Sylvester_Ende))){ include("Silvester.php"); } else include("Willkommen.php"); ?>

[/CODE]ich versuche jetzt nochmal Eure Vorschläge.

Nochmals vielen Dank für Eure Mühe.

Hallo zusammen,

zuerst nochmals vielen Dank für die vielen hinweise und Tipps, es hat mir viel geholfen.

Nachdem nun auf meinem System und auch auf einem Kostenlosen Server alles funktioniert hat, habe ich eigentlich viel zu spät, bei Web.de angerufen da mein PhpInfo Vers. 4.49 anzeigte, wo der Fehler liegt.

Bei Web.de wird PHP 5.3 angeboten, allerdings wird grundsätzlich nur PHP 4.49 zur Verfügung gestellt, weil die meisten Kunden das möchten. Nur wenn ein Kunde sich meldet und Vers. 5.3 möchte bekommt man eine .htaccess Datei zugesandt und schon geht PHP 5.3

Das war nun das ganze Problem. 16 Stunden nach Fehlern gesucht die nicht da waren und geärgert weils nicht funktionierte.

Man lebt und Lernt, aber das hätte ich auch in 2 min. kapiert.