Ich habe eine Seite, die jede Stunde automatisch aktualisiert und gecached (selbst gemacht über ein Textfile) wird.
Beim Aufruf der Seite ($id=cache) wird der gespeicherte Teil geladen, sofern vorhanden.
Über den Aktualisieren-Button kann der Benutzer, wenn gewünscht, die Daten auf den neuesten Stand bringen.
Die Seite wird dann erneut aufgerufen, aber mit $id=0, weshalb der else-Teil ausgeführt wird, der wiederum die Seite aufruft.
Folgendes Problem:
Der Aktualisieren-Button funktioniert nur ein Mal.
Danach durchläuft er immer den if-Teil, oder der Browser ruft aus seinem Speicher die Datei auf, was ich aber eigentlich im Header unterbunden habe.
Den if-Teil aber aktualisiert er, d.h. wenn von einer Aktualisierung zur nächsten das Zeitlimit über die 30-Minuten-Grenze kommt ist der Button rot.
Aber eigentlich sollte ja der gesamte Body neu berechnet werden und die Seite neu aufgerufen werden.
Ich hoffe das war verständlich und mir kann hierbei jemand weiter helfen.
Beim Aufruf der Seite ($id=cache) wird der gespeicherte Teil geladen, sofern vorhanden.
Über den Aktualisieren-Button kann der Benutzer, wenn gewünscht, die Daten auf den neuesten Stand bringen.
Die Seite wird dann erneut aufgerufen, aber mit $id=0, weshalb der else-Teil ausgeführt wird, der wiederum die Seite aufruft.
PHP-Code:
if ($id=='cache'&&file_exists($data))
{
$meine_html_seite = file( $data ); // gecachte Seite auslesen
$lastCache=$meine_html_seite[0]; // erste Zeile entspricht dem Cache-Zeitpunkt
$now=time();
$diff=$now-$lastCache;
$min=(integer)($diff/60); // Anzahl der Minuten seit der letzten Aktualisierung
$date=strftime("%d.%m.%Y",$lastCache);
$time=strftime("%R",$lastCache);
//header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
//header ("Pragma: no-cache"); // HTTP/1.0
echo"
<html>
<head>
<title> Wieso tuts net? </title>
<meta http-equiv=\"cache-control\" content=\"no-store, no-cache, must-revalidate\">
<meta http-equiv=\"pragma\" content=\"no-cache\">
<link rel=\"stylesheet\" href=\"CorpID.css\" type=\"text/css\"></link>
</head>
<body>
//---------- Aktualisierungsbutton; Hintergrund = rot, wenn Limit überschritten, sonst grau (normal)
echo"
<div align=\"left\" valign=top style=\"padding:4px\">
<input type=Button ";if($min>1){echo"style=\"background-color:#cc0000\"";}
echo" name=group title='auf den aktuellen Stand bringen\nAchtung: Dauert ein paar Sekunden!'
value=\"Aktualisieren\" onClick=\"window.location.href='overview_year.php3?id=0'\">
</input>
</div>
";
//---- Zeichen für Zeichen gecachte Datei auslesen und darstellen, Beginn in Zeile 2, da erste Zeile die Zeit der Erstellung ist
$h=1;
while($meine_html_seite[$h])
{
echo $meine_html_seite[$h];
$h++;
}
exit(); //----- script ist fertig; nicht unbedingt nötig, da else nicht durchlaufen wird und das script dann sowieso zu Ende ist
}
else
{
$s=''; //String in den der Rest vom Body gespeichert wird
$s.=...;
$fp = fopen($data,'w'); //--------------------------------------------------------------------
fwrite( $fp, $s); //------ Daten in die zugehörige Textdatei CacheYearXXXX.cac schreiben
fclose( $fp ); //--------------------------------------------------------------------
//------- Seite neu aufrufen, diesmal aber die soeben gecachte
echo"<html>
<body>
<script language=\"javascript\">window.location.href='overview_year.php3?id=cache' </script>
</body>
</html>
";
Der Aktualisieren-Button funktioniert nur ein Mal.
Danach durchläuft er immer den if-Teil, oder der Browser ruft aus seinem Speicher die Datei auf, was ich aber eigentlich im Header unterbunden habe.
Den if-Teil aber aktualisiert er, d.h. wenn von einer Aktualisierung zur nächsten das Zeitlimit über die 30-Minuten-Grenze kommt ist der Button rot.
Aber eigentlich sollte ja der gesamte Body neu berechnet werden und die Seite neu aufgerufen werden.
Ich hoffe das war verständlich und mir kann hierbei jemand weiter helfen.
Kommentar