IT-Academy Logo
Sign Up Login Help
Home - Programmieren - PHP - PHP: Userinformationen



PHP: Userinformationen

Wer an solchen Spielereien interessiert ist, wird sich sicher schon mal gefragt haben, wie man solche Bilder erstellt. Nun, das wird in diesem Artikel beschrieben.


Autor: Goe rgi (Goergi)
Datum: 03-05-2005, 21:24:46
Referenzen: Ausprobieren/Internet
Schwierigkeit: Fortgeschrittene
Ansichten: 12447x
Rating: 9.5 (4x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]





Stimmt doch, oder?

Hast du dir schon mal überlegt wie das gehen könnte? Im Grunde genommen ist es ganz einfach: du wertest mit PHP den User_Agent aus und lässt die Informationen in eine Grafik schreiben. Aber jetzt mal langsam; es wird nun alles genau beschrieben:

Bevor ich noch über die Programmierung nachdenke, mache ich mir ein schönes Bild, in das die Daten dann hineingeschrieben werden:

Ich habe dazu ein ClipArt verwendet und eine AutoForm Sprechbalse. Diese zwei Komponenten wurden dann in einem Bildbearbeitungsprogramm verkleinert und auf Größe optimiert.



Schaut ja schon recht gut aus!

Als nächstes suchst du dir noch eine schöne Schriftart aus.
Du kannst dir die Schriften in Word anschauen und dann benutzen:

Im Windows sind die Schriftarten meistens unter C:\WINDOWS\Fonts\ gespeichert. Windows XP zeigt hier schon die Namen der Schriftarten an. Daher wird (in meinem Fall) nicht comic.ttf angezeigt sondern Comic Sans MS.
Du markierst deine Schriftart und kopierst sie auf deinen Webserver.
Ich verwende für die fertige Grafik Comic Sans MS (schaut freundlich aus :D )

Aber jetzt zur eigentlichen Programmierung:

Aus dem Browser heraus wird nur eine Datei aufgerufen:

[userinfo.php]:

<?php

############### Betriebssystem Weiche ################
if (strpos($HTTP_USER_AGENT, "Win95") || strpos($HTTP_USER_AGENT, "Windows 95")) {
$os = "Windows 95";
}
if (
strpos($HTTP_USER_AGENT, "Win98") || strpos($HTTP_USER_AGENT, "Windows 98")) {
$os = "Windows 98";
}
if (
strpos($HTTP_USER_AGENT, "WinNT") || strpos($HTTP_USER_AGENT, "Windows NT")) {
$os = "Windows NT";
}
if (
strpos($HTTP_USER_AGENT, "WinNT 5.0") || strpos($HTTP_USER_AGENT, "Windows NT 5.0")) {
$os = "Windows 2000";
}
if (
strpos($HTTP_USER_AGENT, "WinNT 5.1") || strpos($HTTP_USER_AGENT, "Windows NT 5.1")) {
$os = "Windows XP";
}
if (
strpos($HTTP_USER_AGENT, "Linux")) {
$os = "Linux";
}
if (
strpos($HTTP_USER_AGENT, "OS/2")) {
$os = "OS/2";
}
if (
strpos($HTTP_USER_AGENT, "Sun")) {
$os = "Sun OS";
}
if (
strpos($HTTP_USER_AGENT, "Macintosh") || strpos($HTTP_USER_AGENT, "Mac_PowerPC")) {
$os = "Mac OS";
}
if (!isset(
$os)) {
$os = "[Unbekannt]";
}
############ Betriebssystem Weiche Ende ##################

##################### Browser Weiche ##################
if (strpos($HTTP_USER_AGENT, "Mozilla/5.0")) {
$browser = "Mozilla";
}
if (
strpos($HTTP_USER_AGENT, "Mozilla/4")) {
$browser = "Netscape";
}
if (
strpos($HTTP_USER_AGENT, "Mozilla/3")) {
$browser = "Netscape";
}
if (
strpos($HTTP_USER_AGENT, "Firefox") || strpos($HTTP_USER_AGENT, "Firebird")) {
$browser = "Firefox";
}
if (
strpos($HTTP_USER_AGENT, "MSIE")) {
$browser = "Internet Explorer";
}
if (
strpos($HTTP_USER_AGENT, "Netscape")) {
$browser = "Netscape";
}
if (
strpos($HTTP_USER_AGENT, "Camino")) {
$browser = "Camino";
}
if (
strpos($HTTP_USER_AGENT, "Galeon")) {
$browser = "Galeon";
}
if (
strpos($HTTP_USER_AGENT, "Konqueror")) {
$browser = "Konqueror";
}
if (
strpos($HTTP_USER_AGENT, "Safari")) {
$browser = "Safari";
}
if (
strpos($HTTP_USER_AGENT, "OmniWeb")) {
$browser = "OmniWeb";
}
if (
strpos($HTTP_USER_AGENT, "Opera")) {
$browser = "Opera";
}
if (!isset(
$browser)) {
$browser = "[Unbekannt]";
}
############ Browser Weiche Ende #################

// IP Adresse ermitteln
$ip_addr = $HTTP_SERVER_VARS['REMOTE_ADDR'];
if (!isset(
$ip_addr) || $ip_addr == '') {
$ip_addr = "[Unbekannt]";
}

header("Content-type: image/png");

$png = imagecreatefromgif("./computer.gif");

$Textfarbe = imagecolorallocate($png, 255, 0, 0);

imagettftext($png, 8, 0, 105, 20, $Textfarbe, "./comic.ttf", "Deine IP-Adresse: ".$ip_addr);
imagettftext($png, 8, 0, 105, 40, $Textfarbe, "./comic.ttf", "Du surfst mit ".$browser);
imagettftext($png, 8, 0, 105, 60, $Textfarbe, "./comic.ttf", "Du verwendest ".$os);

imagepng($png);
imagedestroy($png);

?>


Zur Erklärung:

Als erstes prüfe ich den USER_AGENT (eine Zeichenkette, die von jedem Browser mitgesendet wird; sie enthält Angaben über das Betriebssystem, den Browser, die Browserversion etc.) auf verschiedene Übereinstimmungen. Konnte danach immer noch kein Browser ermittelt werden, so müssen wir "Unbekannt" angeben.
Genauso verfahren wir mit dem Betriebssystem.

Beispiel:

Mein USER_AGENT lautet: "Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.7.7) Gecko/20050414 Firefox/1.0.3"
Daraus kann man folgendes erkennen:
  • Ich verwende Windows ("Windows NT 5.1" bedeutet Windows XP)
  • Dann sieht man meine bevorzugte Sprache - nämlich Deutsch (de-DE) eventuell könnte man auch auf das Herkunftsland schließen; dies ist allerdings mit Vorsicht zu genießen!
  • Ich verwende Mozilla Firefox Version 1.0.3
  • Mein Browser basiert auf der Gecko Rendering Engine
aber das war schon zu viel des Guten...

Uns interessiert nur der Browsername und das Betriebssystem.
Als letztes wollen wir noch die IP Adresse wissen.
Dies geschieht mit den Apache Umgebungsvariablen.

Nachdem nun alle Angaben gespeichert sind, können wir uns mit der Erstellung der Grafik befassen:

Damit der Browser das Bild auch tatsächlich als Bild darstellt, müssen wir ihm sagen, dass es eine PNG-Grafik ist.
Das übernimmt die header()-Funktion

Wir wollen unsere Informationen in ein bereits bestehendes Bild einfügen (der Computer + Sprechblase). Dazu liefert die Funktion imagecreatefromgif() das passende Handle.

imagecolorallocate() erzeugt die Schriftfarbe. Die letzten drei Argumente sind der RGB-Wert. Diese gehen jeweils von 0 bis 255.

Jetzt kommt eine interessante Funktion: imagettftext(). Sie funktioniert folgendesmaßen:

imagettftext($im, $size, $angle, $x, $y, $col, $fontfile, $text)
$im ist das Handle des zu beschriebenden Bildes
$size ist die Schriftgröße in Punkt
$angle ist der Neigungswinkel des Textes
$x und $y sind die Koordinaten
$col ist die Textfarbe die per imagecolorallocate erstellt wurde
$fontfile ist der Pfad zur Schriftartendatei
und $text ist - wie der Name schon sagt - der auszugebende Text


Die Funktion schreibt daher unsere Zeichenketten auf das Bild.

Mit imagepng() wird unser fertiges Bild an den Browser gesendet

Als letztes rufen wir noch imagedestroy() auf, damit wir das Bild wieder aus dem Speicher des Servers entfernen.

Hinweis: Dein Webserver muss Freetype und die GD Lib installiert haben.

Als weiterer Gag ließe sich noch die Auflösung und Farbtiefe des Bildschirmes ermitteln:
Dazu benötigt man allerdings JavaScript, welches einige Benutzer aus Sicherheitsgründen deaktiviert haben:


<script languague="Javascript">
document.writeln("<img src=\"./userinfo.php?xRes=" + screen.width + "&yRes=" + screen.height + "&color=" + screen.pixelDepth + "\">");
</script>
<noscript>
<img src="./userinfo.php?xRes=unbekannt&yRes=unbekannt&color=unbekannt">
</noscript>


Daher: wenn JavaScript aktiviert ist, wird die Bildschrimauflösung ausgegeben, ansonsten wir "unbekannt" übermittelt.

Zur Ausgabe wird einfach, wie oben, imagettftext() verwendet. Die Variablen heißen dann $_GET['xRes'], $_GET['yRes'] und $_GET['color']

Links zu den PHP-Funktionen:
strpos() - Schaut nach, ob ein String in einem größeren String enthalten ist bzw. ermittelt dessen Position
imagecreatefromgif() - Erstellt ein neues Bild-Handle aus einer Bildvorlage
imagecolorallocate() - Definiert eine Farbe nach dem Schema RGB
imagettftext() - Schreibt einen String mit einer TrueType Schriftart auf ein Bild
imagepng() - Sendet das Bild zum Browser
imagedestroy() - Löscht das Bild aus dem Speicher des Servers


shorty066
Rookie
Beitrag vom:
18-04-2008, 14:35:30

Hallo,

bin zufällig auf den Artikel gestoßen und finde ihn auch sehr interessant, klappt alles soweit bestens. Leider ist er (bzw. die enthaltenen Listen) etwas veraltet, so wird z.B. wenn ich bei Firefox, den Useragent auf Opera 9.25 oder Netscape stelle als Browser nur unbekannt angezeigt. Gleiches beim OS Vista, was ich aber inzwischen nachgetragen habe. Gibt es irgendwo aktuellere Listen?? Konnte bei Google bislang nichts passendes bzw. aktuelleres finden, daher meine Frage hier.

MfG,
Shorty066

-----------------------------------------------------


incsoft
Professonial
Beitrag vom:
05-05-2005, 15:03:51

wo kann man den artikel bewerten? die leiste ist weg. (edit: leiste ist wieder da.)
finde den artikel ausgesprochen interessant und auch sehr gut erklärt. 10 punkte.

-----------------------------------------------------


Goergi
Developer
Beitrag vom:
03-05-2005, 21:28:21

so lernt man auch aus den kommentaren :D

hab ich jetzt zum ersten mal gesehen.

-----------------------------------------------------


picard
Professonial
Beitrag vom:
03-05-2005, 21:26:48

interessanter Artikel!

Für diejenigen die zu faul sind: http://danasoft.com/
:-)

-----------------------------------------------------
"...denn wir arbeiten nicht nur um uns selbst zu verbessern, sondern auch den Rest der Menschheit!"


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04508
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06245
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1150
Comments: 0