So zu Weihnachten hab ich mir gedacht schreibe ich dann mal ein kleines Tutorial zu einer Dynamischen Forensignatur in PHP, da mich schon einige (auch in anderen Foren) schon gefragt haben wie so etwas geht.
Ich hoffe es gefällt Euch, und habt bitte nachsicht, es ist mein erstes Tutorial welches nun so öffentlich ist:
Los gehst es:
Mit PHP kann man in Verbindung der GD Bilder dynamisch erzeugen. Dies kann man z.B. als Forensignatur verwenden, hier bei bplaced funktioniert es wenn Ihr hier Webspace habt und Sie hier später hochladet. Ansonsten solltet Ihr überpüfen ob auf Euerm Server mod_rewirte aktiviert ist.
Als erstes wollen wir erst mal Festlegen was es für ein Bild werden soll, also ein .png .gif .jpg dies machen wir mit:
<?
header("Content-type: image/png"); // Für eine PNG Datei
//header("Content-type: image/jpeg"); // Für eine JPG Datei
//header("Content-type: image/gif"); //Für eine Gif Datei
?>
Als Info: Ich verwende wür meine Sig png aber das bleib Euch überlassen.
Als nächtes braucht Ihr noch ein Hintergrundbild, auch hier ist es Euch überlassen welche grösse Ihr nehmen wollt, aber ich würde es nicht zu gross machen. Meine haben eine Dimension von 400x120px und ich selbst finde es eigentlich schon zu gross, aber ich hab andererseits auch schon zu viele Infos drauf stehen.
Aber Weiter:
Nun müssen wir noch sagen welches Bild geladen werden soll dies geschieht mit:
$img = imagecreatefrompng("deine_Datei.png"); //sollte das Pic in einem Unterordner liegen müsst Ihr diesen mit angeben zB. /img/deine_Datei.png
[quote]
Hierzu könnte man sich noch eine Randomfunktion (Zufallsfunktion) schreiben und die Bildernamen in einem array() angeben die werden dann halt zufällig ausgegeben
Öhm… kennt Ihr das irgendwo her?? [/quote]
OK nun kommt es darauf an Was Ihr anzeigen wollt. Damit die die es noch nicht wissen wie leicht es ist, Infos aus einem Client (Besucherrechner) auszulesen könnten Wir mal den Browser und das Betriebssytem anzeigen lassen.
Aber Ihr könntet auch ein RSS-Feed Eurer Seite anzeigen lassen, oder was euer Musikprogramm Abspielt, oder auch die Uptime eures Rechners, oder die Posts in eurem Forum, das soll hier nur als Anregung dienen und bedarf einer generellen erweiterrung diesen kleinen Scriptes . Jedoch sollten wir vorher noch ein paar Farben definieren.
Die Farb Definitionen:
Wir müssen erst noch farben definieren die Unser Text am Ende erhalten soll:
$white = imagecolorallocate($img,255,255,255);
$black = imagecolorallocate($img,0,0,0);
$red = imagecolorallocate($img,255,0,0);
$blue = imagecolorallocate($img,0,0,255);
Die könnt Ihr natürich beliebig erweitern oder auch farben ausnnehmen schaut einfach mal nach RGB-Farbtabellen bei einer Suchmaschiene Eurer Wahl
Das Auslesen der Infos:
Ja nun werden Wir mal schauen das wir erstmal die Infos der Clienten bekommen.
Hier habe ich mal meine Bisherigen Eintragungen genommen denn es war mühsam alles zusammenzutragen da immer mal wieder jemand mit einem OS das nicht definiert war anschrieb und sich beschwerte das bei Ihm Unknown Bei OS ständ. Daher denke ich sollt Ihr es einfacher haben Nur bei Linux habe ich nicht weiter definiert, da es einfach zu viele Derivate und Versionen gibt.
Dieses machen wir in beiden fällen (also Browser und OS ) mit [HTTP_USER_AGENT]
// Auslesen der Browser
if (ereg( 'MSIE',$_SERVER[HTTP_USER_AGENT])) {
if (strstr($_SERVER[HTTP_USER_AGENT],'MSIE 5.0')) {
$browser = "Internet Explorer 5";
} elseif (strstr($_SERVER[HTTP_USER_AGENT],'MSIE 5.5')) {
$browser = "Internet Explorer 5.5";
} elseif (strstr($_SERVER[HTTP_USER_AGENT],'MSIE 6.0')) {
$browser = "Internet Explorer 6";
} else {
$browser = "Internet Explorer";
}
} elseif (ereg( 'Opera',$_SERVER[HTTP_USER_AGENT])) {
$browser = "Opera";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "Firefox")) {
$browser = "Firefox";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "Safari")) {
$browser = "Safari";
} elseif (ereg("Lynx", $_SERVER["HTTP_USER_AGENT"])) {
$browser = "Lynx";
} elseif(ereg("WebTV", $_SERVER["HTTP_USER_AGENT"])) {
$browser = "WebTV";
} elseif(ereg("Konqueror", $_SERVER["HTTP_USER_AGENT"])) {
$browser = "Konqueror";
} elseif (ereg( 'Mozilla/([0-9].[0-9]{1,2})',$_SERVER[HTTP_USER_AGENT])) {
$browser = "Mozilla";
} else {
$browser = "Unknown";
}
Und so lesen wir das Betriebssystem aus:
// Auslesen der Betriebssysteme
if (strstr($_SERVER[HTTP_USER_AGENT], "Windows 95")) {
$os = "Windows 95";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "Windows 98")) {
$os = "Windows 98";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "NT 4.0")) {
$os = "Windows NT";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "NT 5.0")) {
$os = "Windows 2000";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "NT 5.1")) {
$os = "Windows XP";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "Win")) {
$os = "Windows";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "Mac")) {
$os = "MacOS";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "Linux")) {
$os = "Linux";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "FreeBSD")) {
$os = "FreeBSD";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "SunOS")) {
$os = "SunOS";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "IRIX")) {
$os = "IRIX";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "BeOS")) {
$os = "BeOS";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "OS/2")) {
$os = "OS/2";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "AIX")) {
$os = "AIX";
} elseif (strstr($_SERVER[HTTP_USER_AGENT], "Unix")) {
$os = "Unix";
} else {
$os = "Unbekanntes System";
}
Wer will kann auch noch die IP und den Hostnamen auslesen was dann so funktioniert:
Host und IP:
// IP bestimmen und Host auslesen
$ip = getenv("REMOTE_ADDR");
$host = gethostbyaddr($ip);
So das hätten wir nun müssen wir noch dafür sorgen das es auch angezeigt wird.
Das machen wir mit :
Hierzu müssen wir den Text aber auch positionieren und auch die Scriftgrösse angeben können das machen wir jetzt zusammen mit der ausgabe.
Das geht so:
($img, 12, 0, 120, 45, $black, "fonts/kr1.ttf", "Dein OS ist: ")
die erste Zahl also die 12 steht für die Schriftgrösse, die 0 steht für die Schriftweite, die 120 wo unser erster Buchstabe beginnt sie 45 für den Abstand von oben. So sieht das ganze dann in meinem Code auch aus. Hier solltet Ihr aber die Positionen nach eurer Grafik bestimmen und ein bisschen herumspielen.
imagettftext($img, 12, 0, 120, 45, $black, "fonts/kr1.ttf", "Dein OS ist: ");
imagettftext($img, 12, 0, 200, 45, $red, "fonts/kr1.ttf", "". $os);
imagettftext($img, 12, 0, 120, 60, $black, "fonts/kr1.ttf", "Dein Browser ist: ");
imagettftext($img, 12, 0, 230, 60, $blue, "fonts/kr1.ttf", "". $browser);
imagettftext($img, 12, 0, 120, 75, $black, "fonts/kr1.ttf", "deine IP-Adresse: ");
imagettftext($img, 12, 0, 230, 75, $red, "fonts/kr1.ttf", "". $ip);
imagettftext($img, 12, 0, 120, 90, $black, "fonts/kr1.ttf", "dein Host ist: ");
imagettftext($img, 12, 0, 120, 105, $blue, "fonts/kr1.ttf", "". $host);
Danke kla_kal für deinen Hinweis Das ist dies vergessen hatte denn
zum Abschluss brauchen wir noch ein
imagepng($img);
Was wir noch brauchen ist eine Schriftart, ich habe hier in meinem Beispiel und in meiner die Schriftart kr1.ttf und diese liegt in einem Unterordner /fonts/ hier gibt es auch keine Grenze sucht euch eine Schöne aus z.B. bei myfont.de/ oder eben wo anders.
Ich habe aber auch mal meine Angehängt:
So das Wars auch schon. Die Signatur sollte schon im Browser funktionieren wenn Ihr sie mit url/sig.php aufruft.
Nun haben wir aber noch ein Recht grosses Problem, denn ich kenne kein Forum in dem man eine externe php Datei in der Signatur anzeigen lassen kann.
Ja hm…
Das hat mich damals ein paar Tage gekostet bis das so funktionierte, hab viel lesen und probieren müssen, und das obwohl die Lösung so einfach war/ist .
Aber ich will Euch ja nun die Lösung nicht vorenthalten
Das anzeigen eines Bildes welches mit PHP generiert wurde als Dateiendung des eigentlichen Bildes:P
Legt euch eine Datei namens .htaccsess an und füllt sie mit folgendem inhalt:
RewriteEngine On
RewriteRule sig.png sig.php
Wenn eure fertige .php Date nicht sig heisst solltet Ihr natürlich den Dateinamen anpassen.
Ja und nun viel spass mir eurer Sig
Ich hoffe Es hatt euch Spass gemacht und war verständlich, bei Problemen einfach fragen. Und ausserdem ich hoffe Ihr habt Verständiss dafür das ich nicht all meinen Code einfach hier rein Kopiert habe. Dann wäre es ja auch kein Tutorial .
Solltet Ihr Fehler entdecken sagt bitte bescheid…
Mein Weihnachtsgeschenk an und die User
Frohes Weihnachtsfest Euer Sixpack