dani
Goto Top

PHP - Zeitberechnung

Hi Leute,
es ist soweit...heute brauche ich mal ein bisschen Nachhilfe in Sachen PHP. face-wink

Wir haben hier für einen Linuxserver "rrdtool" im Einsatz. Wem das nichts sagt, sowas wie Nagios bloß etwas viel kleiner - sozusagen der kl. Bruder. face-wink Mit diesem Tool erstellen wir unsere Auswertungen für CPU, Netzwerk, Festplatten, Traffic, etc... . Damit die Graphen selbstständig sich aktualisieren habe ich einen Cronjob erstellt, der alle 5 Minuten läuft - und zwar in diesem Rythmus: 10:00 Uhr, 10:05 Uhr, 10:10Uhr

Passend dazu gibt es eine 0815 Website mit ein bisschen HTML und PHP. Diese gibt brav alle Graphen sortiert nach Typ aus. Nun möchte ich folgendes realisieren:

Der Admin "x" hat um 10:03 die Monitoring - Seite betreten und bleibt bis 10:08 Uhr auch darauf und analysiert die Graphen. Nun ist es so, dass um 10:05 (siehe oben) eine Aktualisierung der Graphen durchgeführt worden ist. D.h. es könnte schon wieder ganz anders aussehen.
Sprich die Website soll genau um 10:05:02 Uhr (Stunden:Minuten:Sekunden) reloaded werden. Der Refresh der Seite ist kein Problem - jedoch die Zeitberechung macht mir Kopfzerbrechen. Denn ich bei bereten der Seite muss berechnet werden, wie viele Sekunden noch bis 10:05 Uhr fehlen.

Meinen bisherigen Ansatz poste ich einfach mal nicht. Da sonst zu 90% die Ideen darauf aufbauen und ich vllt. auf dem falschen Weg bin. Falls ihr es nicht ganz verstanden habt, sagt Bescheid - ich hab's auch nicht gleich aufs 1. Mal kapiert. face-smile


Grüsse,
Dani

Content-Key: 97590

Url: https://administrator.de/contentid/97590

Printed on: April 23, 2024 at 19:04 o'clock

Member: manuel-r
manuel-r Sep 23, 2008 at 10:00:40 (UTC)
Goto Top
Ich hätte folgenden Ansatz:
Die aktuellen Minuten mit 60 multiplizieren plus die aktuellen Sekunden. Danach solange 300 subtrahieren bis der Rest kleiner 300 ist. Die Diferenz zu 300 bilden. Fertig.

Beispiel: xx:12:23 Uhr
-> 12 * 60 = 720 + 23 = 743
-> 743 - 300 = 443 - 300 = 143
-> 300 - 143 = 157 [Sekunden]

Beispiel: xx:18:59 Uhr
-> 18 * 60 = 1080 + 59 = 1139
-> 1139 - 300 = 839 - 300 = 539 - 300 = 239
-> 300 - 239 = 61 [Sekunden]

Es geht natürlich auch mit Division:
-> 18 * 60 = 1080 + 59 = 1139
-> 1139 : 300 = 3,7966
-> 0,7966 * 300 = 239
-> 300 - 239 = 61 [Sekunden]

Manuel
Member: Mitchell
Mitchell Sep 23, 2008 at 10:07:36 (UTC)
Goto Top
1. du benötigst Nachhilfe in PHP? Ich wünsch dir gute Besserung, scheint die momentan umhergehende Grippe zu sein (icb beschuldige jetzt mal nicht einen gewissen Webmin, der dich womöglich bis zum Rest ausgequetscht hat) face-smile

2. Du kennst meine Kenntnisse, aber ich versuchs trotzdem mal *gg*

<?php
$refresh = mktime(10, 5, 0); 
$current = time(); 
$remain = $refresh- $current; 
$minuten =  interval($remain / 60);
$sekunden = $remain % 60;

echo "Noch $minuten Minuten und $sekunden Sekunden bis zum Refresh";  
?>


So ungefähr?

Mfg

Mitchell
Member: dtzzzzzz
dtzzzzzz Sep 23, 2008 at 10:13:03 (UTC)
Goto Top
Wenn ich es richtig verstanden habe, dann soll der Admin, wenn er um 10:03 da ist und um 10:08 gehen will, um 10:05 einen automatischen Seitenreload bekommen? Oder? Wenn ja, dann mach es doch einfach mit JavaScript. Lass dort einfach jede Minute die Zeit abfragen und wenn du mod 5 bei Minuten erreicht hast, dann soll ein Reload stattfinden.
Member: Dani
Dani Sep 23, 2008 at 11:15:48 (UTC)
Goto Top
Hi Manu,
wenn ich das richtig verstanden habe, nimmst du die Stunden * 60. Kannst du mir kurz erklären warum du das machst?! Denn somit habe ich die Minuten am Ende. Irgendwie denke ich gerade, du hast Sekunden und Minuten durcheinander gebracht. :-P

So siehts ganz gut aus:
<?php
$intervall= 300; //Sekunden = 5 Minuten

$akt_sec = (date("i") * 60) + date("s");  


while ($akt_sec > $intervall)
        {
        $akt_sec-= $intervall;
        }
$akt_sec = $intervall - $akt_sec + 2;

?>
Die Tests sehen kannst gut aus, die Differenz stimmt...ich habe einfach zu kompliziert gedacht...war schon dabei den UNIX_TIMESTAMP rauszuholen...Danke!


Gruss,
Dani
Member: Dani
Dani Sep 23, 2008 at 11:17:35 (UTC)
Goto Top
Hi Mitchell,
du glaubst gar nicht, wie viel Zeit ich schon mit dem Listenparser verbringe - könnte meine neue Freundin werden. face-wink
Bei deiner Variante, blick ich nicht so ganz durch. Der Pharser meckert, dass es die Funktion "interval()" nicht gibt. Benutzen hier eigentlich PHP 5.1.x.... ???

@dtzzz
Ein Beispiel wäre nett gewesen....


Gruss,
Dani
Member: Dani
Dani Sep 23, 2008 at 11:24:07 (UTC)
Goto Top
Das Problem ist zum Teil schon gelöst - die Berechung der Sekunden funktioniert. Nur leider wenn ich meinen Test-PHP-Code in die index.php mit einfüge, geht der Refresh nicht mehr. So sieht im Moment meine index.php aus:
<?php
$intervall= 300; //Sekunden = 5 Minuten

$akt_sec = (date("i") * 60) + date("s");  


while ($akt_sec > $intervall)
        {
        $akt_sec-= $intervall;
        }
$akt_sec = $intervall - $akt_sec + 2;

?>

<html>
<head>
        <title>LIVE Monitoring v1</title>
        <meta http-equiv="refresh" content="<?php echo $akt_sec; ?>; URL=http://meine zieladresse">  
        <link rel="stylesheet" type="text/css" href="style.css">  

        <script language="JavaScript" type="text/JavaScript">  
        <!--
        function NewWindow(modul,x,y)
                {
                Popup = open("popup.php?bild=" +modul,"Popup","width=" + x + ",height=" + y + ",left=0,top=0,status=no,menubar=no,resizeable=no,dependent=yes,scrollbars=no,scrolling=no,location=no");  
                Popup.moveTo((screen.width/2)-x/2, (screen.height/2)-y/2);
                Popup.focus();
                }
        //-->
        </script>
</head>

<body>
<h1> Monitoring ROOT - Server (dserver01)</h1>
<?php
$dir = './';  
if(is_dir($dir))
        {
        $files=scandir($dir);
        $i=0;

        foreach($files as $pic)
                {
                if(strstr($pic, ".png"))  
                        {
                        if($i%2 == 0) echo "<br /><br />";  
                        echo "<img src=".$pic."?".time()." onClick=NewWindow('$pic','900','300'); /></img>&nbsp;&nbsp;";  
                        $i ++;
                        }
                }
        }
?>

</body>
</html>
Das verstehe wer will...denn der Quellcode nach dem Pharser sieht so aus:
<html>
<head>
	<title>LIVE Monitoring v1</title>
	<meta http-equiv="refresh" content="5; URL=http://meine zieladresse">   
	<link rel="stylesheet" type="text/css" href="style.css">  

	<script language="JavaScript" type="text/JavaScript">  
        <!--
        function NewWindow(modul,x,y)
                {
		Popup = open("popup.php?bild=" +modul,"Popup","width=" + x + ",height=" + y + ",left=0,top=0,status=no,menubar=no,resizeable=no,dependent=yes,scrollbars=no,scrolling=no,location=no"); 
		Popup.moveTo((screen.width/2)-x/2, (screen.height/2)-y/2);
		Popup.focus();
		}
	//-->
	</script>
</head>

<body>
<h1> Monitoring ROOT - Server (dserver01)</h1>
<br /><br /><img src=01_load-h.png?1222168459 onClick=NewWindow('01_load-h.png','900','300'); /></img>&nbsp;&nbsp;<img src=02_load-d.png?1222168459 onClick=NewWindow('02_load-d.png','900','300'); /></img>&nbsp;&nbsp;<br /><br /><img src=03_load-w.png?1222168459 onClick=NewWindow('03_load-w.png','900','300'); /></img>&nbsp;&nbsp;<img src=04_load-w.png?1222168459 onClick=NewWindow('04_load-w.png','900','300'); /></img>&nbsp;&nbsp;<br /><br /><img src=11_memory-d.png?1222168459 onClick=NewWindow('11_memory-d.png','900','300'); /></img>&nbsp;&nbsp;<img src=15_root-w.png?1222168459 onClick=NewWindow('15_root-w.png','900','300'); /></img>&nbsp;&nbsp;<br /><br /><img src=20_processes-d.png?1222168459 onClick=NewWindow('20_processes-d.png','900','300'); /></img>&nbsp;&nbsp;<img src=21_processes-w.png?1222168459 onClick=NewWindow('21_processes-w.png','900','300'); /></img>&nbsp;&nbsp;<br /><br /><img src=25_traffic-eth0-h.png?1222168459 onClick=NewWindow('25_traffic-eth0-h.png','900','300'); /></img>&nbsp;&nbsp;<img src=26_traffic-eth0-d.png?1222168459 onClick=NewWindow('26_traffic-eth0-d.png','900','300'); /></img>&nbsp;&nbsp;<br /><br /><img src=27_traffic-eth0-w.png?1222168459 onClick=NewWindow('27_traffic-eth0-w.png','900','300'); /></img>&nbsp;&nbsp;<img src=28_traffic-eth0-m.png?1222168459 onClick=NewWindow('28_traffic-eth0-m.png','900','300'); /></img>&nbsp;&nbsp;  
</body>
</html>
Das verstehe ich nicht mehr...die Syntax ist eigentlich so in Ordnung. Haben wir 100x so schon gemacht.
Member: Mitchell
Mitchell Sep 23, 2008 at 11:37:49 (UTC)
Goto Top
Hi Dani,

ups, da war ich wohl teilweise noch in meinem Brief mit richtigen Wörtern face-smile

Der Befehl lautet natürlich intval, dieser gibt dir einen Integer-Wert aus. Hm...das mit dem Refresh kapiere ich grade auch nicht, entweder liegts an meinen fehlenden Javakenntnissen oder an Blindheit.

Mfg

Mitchell
Member: dtzzzzzz
dtzzzzzz Sep 23, 2008 at 12:16:54 (UTC)
Goto Top
Hier als Beispiel mit JavaScript

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
"http://www.w3.org/TR/html4/loose.dtd">  
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">  
<meta name="language" content="de">  
<title>Reload</title>

<script language="JavaScript" type="text/javascript">  
var timeInterval = 30000; // in Milisekunden, wie oft wird die Zeit verglichen (hier 30sec)
var timeIntervalReload = 5; // in Minuten (zu wann wird das Reload durchgeführt (hier jede 5te Minute einer Stunde)
var reloadFlag = false; // mehrere Reloads hintereinander unterbinden
var timeCheckTimer = window.setInterval("checkTime()", timeInterval);  

function checkTime(){
	var timeNowObject = new Date();
	var timeNow = timeNowObject.getMinutes();
	var timeToReload = 0;
	
	timeToReload = timeNow%timeIntervalReload;	
	if(timeToReload == 0 && reloadFlag){
		// reload homepage
		location.reload();
	}else if(timeToReload != 0){
		self.document.getElementById('reloadCounter').innerHTML = 'Reload in ' + (timeIntervalReload-timeToReload) + ' Minuten...';  
		reloadFlag = true;
	}
}
</script>

</head>
<body>
<div id="reloadCounter">Daten sind aktuell.</div>  
</body>
</html>
Member: Dani
Dani Sep 23, 2008 at 14:33:26 (UTC)
Goto Top
Hi dtzzzzzzzzzz,
geil...damit geht es nun. Habe es noch ein bisschen angepasst aber die Grundfunktion hat keine Probleme gemacht - Thx.


Grüsse,
Dani
Member: manuel-r
manuel-r Sep 23, 2008 at 20:39:24 (UTC)
Goto Top
Nö, ich hab nichts durcheinander gebracht. Da steht doch xx:12:23 - also x Uhr 12 Minuten und 23 Sekunden. Die Stunden hatte ich ge-x-t, weil die bei deiner Problemstellung keine Rolle spielen.

Manuel
Member: Dani
Dani Sep 23, 2008 at 20:46:39 (UTC)
Goto Top
Au...das habe ich nicht gesehen. Ok, dann möchte ich nix gesagt haben. face-smile


Grüsse,
Dani