Create an account


Die Random-Signatur

#1
Hallo Community,
ich wollte mal mein kleines php-Script posten, mit dem meine Signatur hier um Forum läuft Big Grin

Vll. haben sich schon mal welche gefragt, ob es möglich ist, eine Signatur zu erstellen, die ein zufälliges Bilder anzeigt, wenn man die Seite lädt.

Alles was man dazu benötigt ist ein PHP-tauglicher Webspace im Internet, sei es bei irgendeinem Freehoster.

** Vorbereitung **

Zuerst fängt man an sich eine Textdatei zu erstellen. In jede Zeile fügt man den Direktink zum jeweiligen Bild ein, welches später in der Signatur angezeigt werden kann. Diese datei speichert man dann als z.B "sigs.txt" ab. Diesen Namen solltet ihr beibehalten, da ihr den gleich noch braucht.

Ein Beispiel für die Text-Datei findest du unter dem fertigen Script.

** Der Code **

Ihr erstellt eine Datei z.b mit dem Namen "random.php"
Am besten könnt ihr die Datei in einem Editor wie Notepad bearbeiten.

Um die Datei in php auszulesen benötigt ihr die Funktion file().
Dieses speichert man dann in eine Variable wie hier:
PHP Code:
$file file('sigs.txt'); // die sigs.txt (Wo eure Bilder drinne sind) liegt im selbem Ordner wie die random.php 

Da die Ausgabe von file() in einem Array erfolgt geben wir nun wie folgt das Array mit der Array-Schleife foreach() aus:
PHP Code:
$i 0;
foreach(
$file as $f) {
    
$im[$i] = $f;
    if(
substr($f01) != '#'$i += 1;

In der letzten Zeile wird somit gleich überprüft, ob am Anfang der Zeile (Strings) das Zeichen '#' steht. Wenn das zutrifft wird $i nicht um eins erhöht und der aktuelle Key von $im überschrieben.
Dies finde ich ist nützlich, wenn man Zeilen auslassen möchte bzw. auskommetieren möchte innerhalb der Text-Datei.

Danach wird das zufällige Bild ermittelt, das ausgegeben werden soll:
PHP Code:
$r rand(0, ($i-1)); 
$i ist hierbei der Key des letzten Wertes des Arrays $im. Da er beim letzten Durchlauf der Schleife nochmal um eins erhöht wird wird er einfach um 1 subtrahiert.
Die Funktion rand() macht somit nichts anderes als einen zufälligen Wert zwischen der ersten und zweiten Zahl auszugeben.

Den Wert zum dazugehörigem Key speichern wir dann in einer einfachen Variable:
PHP Code:
$pic $im[$r]; 

Im Folgenden kürzen wir den Link (String) nochmal um 1 Zeichen, wenn es nicht die letzte Zeile in der Textdatei ist, da im String der Zeilenumbruch hinten noch auftaucht, den wir entfernen müssen, da er das Bild sonst später nicht findet.
PHP Code:
if($pic != end($im)) $pic substr($pic0, -1); 

Zum Schluss leiten wir den Browser noch auf das Bild um, indem wir Informationen an den header senden.
PHP Code:
header('Location: '.$pic); 

** Fertiges Script **

PHP Code:
<?php
$file 
file('sigs.txt');

$i 0;
foreach(
$file as $f) {
    
$im[$i] = $f;
    if(
substr($f01) != '#'$i += 1;
}

$r rand(0, ($i-1));
$pic $im[$r];

if(
$pic != end($im)) $pic substr($pic0, -1);

header('Location: '.$pic);
?>

Ein Beispiel für die Text-Datei könnte sein:
Code:
http://www.imgbox.de/users/SunRed/Pics/born_yes.gif
#http://chzmemebase.files.wordpress.com/2011/07/memes-just-another-day.gif
http://i.chzbgr.com/completestore/2011/7/14/f0bc47e6-c8fc-4f9e-9da4-97176343c2ff.gif
http://gifs.gifbin.com/082012/1346345872_saved_skat_jump_fail.gif
http://gifs.gifbin.com/042011/1303149519_turtle-bites-cat.gif

Die zweite Zeile wird in diesem Fall ignoriert/auskommentiert.

Nachdem ihr es via FTP o.ä. hochgeladen habt, könnt ihr das ganze im Forum via bbCodes z.b mit
Code:
[img]http://deinedomain.de/random.php[/img]
oder in HTML mit
Code:
<img src="http://deinedomain.de/random.php">
einbinden.
Natürlich müsst ihr eure Domain/Subdomain nehmen, die auf euren Webspace verleitet mit dem jeweiligen Dateinamen der PHP-Datei und eventuellem Pfad.

Anmerkung:
Ich weiß, es ist zwar kein schwieriges und langes Script, aber für php-Anfänger, die eine "etwas andere" Signatur wollen durchaus nützlich. Dafür habe ich es auch etwas ausführlicher erklärt.

MfG, SunRed
[Image: sig.gif]
Reply

#2
Warum seh ich das eigentlich erst jetzt? Schöne Idee.
Jetzt weiß ich auch, woher ich die Idee für meine eigene Signatur her hab. Ich wusste doch, so etwas ähnliches hatte schon mal jemand vorgestellt. Nur ists bei mir kein Random, sondern es geht nach Tageszeit (MEZ/MESZ). Mein Skript ist allerdings nicht öffentlichkeitstauglich da keine externe Konfigurations-txt geparsed wird. ^^

Im <img>-Tag eine *.php, statt einer Grafik anzugeben scheint den Browser ja nicht zu stören solange am Ende der Umleitung(en) eine Grafik präsentiert wird, oder? Du selbst, wie auch ich, nutzen ja nicht direkt die PHP Datei in der Anfrage URI. Vllt ists ja noch eine Erwähnung wert, wie man mit einer .htaccess Datei die Anfrage von einer nicht existierenden sig.gif auf die PHP umleitet.

Ich vermisse bei dir noch Header Angaben zum Caching. Die letztendliche Grafik darf (und sollte!) ja natürlich im Cache landen, die sich immer wieder ändernde Umleitung aber nicht.
PHP Code:
header('Pragma: no-cache');
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0'); 
Ich habe variable PHP Inhalte zugegebenermaßen noch nie ohne strikte no-cache Angaben entworfen, weiß also nicht ob sich Browser überhaupt wirklich zu viel merken würden. Speziell mit sich verändernden Grafiken hab ich aber auf diversen Webseiten beim Caching schlechte Erfahrungen gemacht. Und gerade bei meiner Signatur, möchte ich eine falsche Umleitung vermeiden, da der Auslöser nun mal die Tageszeit ist. Bei einer Zufälligen Umleitung ists vllt nicht ganz so wild.

Dann noch eine Kleinigkeit zu deinem HTTP-Statuscode: 302 ist nicht mehr so gern gesehen. Wenn er auf Fremdinhalte verweist, bewirkt er URL-Hijacking. Ich selbst zieh mich aus der Affäre, indem sich die genutzten Grafiken alle auch direkt auf meinem Webspace befinden.
[i am dumb]
Reply




Forum software by © MyBB Theme © iAndrew 2016