mein jetziges funktioniert zwar anders und auf 1 minute genau, aber bei einer Uptime von 60 Tagen ist das wohl egal...
EDIT: bei einem freehoster wie funpic funktioniert das nicht, weil diese keine Verbindungen nach Aussen zulassen.
geschrieben wird das Ganze in PHP
also fangen wir an:
man findet im Downloadsbereich von Uptime-Project ein phpscript, das die uptime aus einer XML-Datei ausliest.
Code etwas gekürzt:
- Code: Alles auswählen
<?
/*
WICHTIG:
Es muessen Schreibrechte auf die Temp-Datei existieren !
Bitte keine Aenderungen an der Cache-Funktion oder am Programmablauf vornehmen. Danke.
*/
// Uptime Project User-ID
$config[uid] = 1;
// (Path to) Temp-File
$config[tmp] = "uptime.dat";
if(@filemtime($config[tmp]) <= time() - 3600 || @filesize($config[tmp]) == 0)
{
$input_xml = @fopen("http://data.uptime-project.net/xml.php?uid=$config[uid]","r");
$input = @fread($input_xml,2048);
@fclose($input_xml);
if($input)
{
$tmpfile = @fopen($config[tmp],w);
if($tmpfile)
{
@fwrite($tmpfile,$input);
}
else
{
echo "Kann nicht in Temp-File schreiben. Fehlende Rechte.";
exit;
}
@fclose($tmpfile);
}
unset($input,$input_xml,$tmpfile);
}
$tmpfile = @fopen($config[tmp],r);
$input = @fread($tmpfile,2048);
if($input)
{
$parser = xml_parser_create();
xml_parse_into_struct($parser,$input,$values);
xml_parser_free($parser);
$xml = array();
foreach($values as $data)
{
if($data[tag] != "PROFILE")
{
$xml[strtolower($data[tag])] = $data[value];
}
}
}
else
{
echo "Kann Temp-Datei $config[tmp] nicht lesen.";
exit;
}
@fclose($tmpfile);
unset($tmpfile,$input,$parser,$values,$data);
echo $xml[username];
echo $xml[uptime];
?>
wir sehen also, die Ausgaben weiden in $xml[username] und $xml[uptime] gespeichert.
kurze Erklärung des scripts:
bei Aufruf wird eine Verbindung zu http://data.uptime-project.net/ aufgebaut, die XML-Informationen geholt und ausgewertet.
Danach wird der Inhalt in einem Temp-File gespeichert.
Hier eine Warnung:
es müssen unbedingt schreibrechte auf die Datei existieren.
weiters werden dann die Informationen in Variablen geschrieben.
beim nächsten Aufruf wird überprüft, wie alt das Temp file ist. ist es älter als 3600 Sekunden, werden die Daten neu geholt.
an der Zeit nichts ändern
die echo-ausgaben müssen wir entfernen, da wir keinen Text ausgeben wollen.
nun müssen wir uns die Grafik Funktionen von PHP anschauen:
zuerst müssen wir dem browser sagen, dass jetzt ein Bild kommt:
- Code: Alles auswählen
header("Content-Type: image/png");
außerdem brauchen wir schriftarten:
- Code: Alles auswählen
$font="fonts/ARIAL.TTF";
wir haben ein Hintergrundbild, das wollen wir öffnen:
- Code: Alles auswählen
$img = imagecreatefromgif ("background.gif");
eine Schriftfarbe: (bei bedarf auch mehr)
- Code: Alles auswählen
$gray = ImageColorAllocate ( $img , 110 , 110 , 110 );
jetzt: wie schreibt man text in ein bild:
- Code: Alles auswählen
ImageTTFText ($img, $Größe, 0, $x-koordinate, $y-koordinate, $Farbe, $fontfile, $text);
so und jetzt geben wir das Bild aus:
- Code: Alles auswählen
ImagePNG ( $im );
und der verwendete Arbeitsspeicher muss auch noch freigeschaufelt werden:
- Code: Alles auswählen
imagedestroy ( $img );
Fertiger Code: (ich habe mir mal die id von flensdorfer geliehen, da schauts am Besten aus ^^)
- Code: Alles auswählen
<?
// UPTIMEPROJECT-ID
$config[uid] = 70918;
// (Path to) Temp-File
$config[tmp] = "uptime.dat";
/*
WICHTIG:
Es muessen Schreibrechte auf die Temp-Datei existieren !
Bitte keine Aenderungen an der Cache-Funktion oder am Programmablauf vornehmen. Danke.
*/
if(@filemtime($config[tmp]) <= time() - 3600 || @filesize($config[tmp]) == 0)
{
$input_xml = @fopen("http://data.uptime-project.net/xml.php?uid=$config[uid]","r");
$input = @fread($input_xml,2048);
@fclose($input_xml);
if($input)
{
$tmpfile = @fopen($config[tmp],w);
if($tmpfile)
{
@fwrite($tmpfile,$input);
}
else
{
$xml[username]="Temp-File nicht beschreibbar.";
exit;
}
@fclose($tmpfile);
}
unset($input,$input_xml,$tmpfile);
}
$tmpfile = @fopen($config[tmp],r);
$input = @fread($tmpfile,2048);
if($input)
{
$parser = xml_parser_create();
xml_parse_into_struct($parser,$input,$values);
xml_parser_free($parser);
$xml = array();
foreach($values as $data)
{
if($data[tag] != "PROFILE")
{
$xml[strtolower($data[tag])] = $data[value];
}
}
}
else
{
$xml[username]="Temp-Datei nicht lesbar.";
exit;
}
@fclose($tmpfile);
unset($tmpfile,$input,$parser,$values,$data);
// Bild generierung
header("Content-Type: image/png");
$font="ARIAL.TTF";
$img = imagecreatefromgif ("background.gif");
$gray = ImageColorAllocate ( $img , 50 , 50 , 50 );
ImageTTFText ($img, 10.5, 0, 90, 20, $gray, $font, $xml[username] );
ImageTTFText ($img, 10, 0, 80, 35, $gray, $font, "Uptime: $xml[uptime]" );
ImageTTFText ($img, 10, 0, 80, 50, $gray, $font, "Average: $xml[average]" );
ImageTTFText ($img, 10, 0, 80, 65, $gray, $font, "Record: $xml[record]" );
ImagePNG ( $img );
imagedestroy ( $img );
?>
so schaut das Ganze dann aus:

hier alles fertig gepackt:
http://www.datacop.server-underground.com/uptimeproject.rar
ich hab mal schnell das script etwas abgeändert und auf meinen webspace geladen, hiermit kann jeder über
- Code: Alles auswählen
datacop.server-underground.com/projects/up/up/[uptimeclient-id].png
ein bild wie oben generieren lassen.
das sollte dann meins sein ^^



