Modul Menü

Wer ist online?

Insgesamt sind 4 Besucher online: 1 registrierter, 0 unsichtbare und 3 Gäste
Der Besucherrekord liegt bei 226 Besuchern, die am 8. Jul 2012, 14:25 gleichzeitig online waren.

Mitglieder: Google [Bot]

basierend auf den aktiven Besuchern der letzten 5 Minuten

Statistik

3 Beiträge


Geburtstage

Heute hat kein Mitglied Geburtstag kein Mitglied hat in den nächsten 3 Tagen Geburtstag

Kalender

<< Juni 2013 >>
Mo Di Mi Do Fr Sa So
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Fest u. Feiertage Kalender-Ereignisse

Anstehende Termine:

[HowTo] eigene UptimeProject Bilder

HOWTOs zum c't Server

Moderator: Moderatoren Team

[HowTo] eigene UptimeProject Bilder

Beitragvon datacop » 3. Apr 2006, 17:30

ich habe vor einiger Zeit mir meine eigenen Uptime-Bilder für das uptime-project erstellt.

mein jetziges funktioniert zwar anders und auf 1 minute genau, aber bei einer Uptime von 60 Tagen ist das wohl egal... :P

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:
Bild
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.

Bild
das sollte dann meins sein ^^
cu,
datacop

Bild
datacop
Regular
Regular
 
Beiträge: 76
Registriert: 27. Nov 2005, 22:05
Wohnort: Wien

Beitragvon neobiker » 23. Jan 2007, 13:07

Danke für die Info :wink:

Hat soweit funktioniert, nur dass ich mein Image nur als HTML-Code angezeigt bekomme, nicht als BB-Code :?
Gruss neobiker
Bildhttp://wiki.neobiker.de
"Der Computer macht genau das, was Du ihm sagst - nicht das, was Du von ihm willst!"
neobiker
Moderator
Moderator
 
Beiträge: 1226
Registriert: 11. Aug 2005, 22:06
Wohnort: Nürnberg / Umgebung

Beitragvon datacop » 3. Mär 2007, 17:19

jop, das is weil das Bild die Endung .php hat und das phpbb nur Bilder mit richtiger Endung zulässt, hier kann man sich aber beim Apache mit Rewrite Engine helfen ^^

cu,
datacop
cu,
datacop

Bild
datacop
Regular
Regular
 
Beiträge: 76
Registriert: 27. Nov 2005, 22:05
Wohnort: Wien


Zurück zu HOWTOs

Wer ist online?

Mitglieder: Google [Bot]

cron