Grafikrotation

bick-fm

42!
ID: 333985
L
6 Januar 2009
353
16
Sicher kennen viele von euch Sloganizer.
Ich suche ein ähnliches Script, allerdings mit meinen eigenen Sprüchen und zusätzlich will ich auch die Verlinkung rotieren lassen. Das Ganze soll also ein bisschen wie die Lose4Sigview Grafiken funktionieren.
Grafik rotiert, Linkcode bleibt gleich, leitet aber immer zu einer anderen, zur Grafik gehörenden Seite weiter. Weiß jemand, wie sowas geht?
Liebe Grüße,
bick-fm
 
Ganz primitiv: array_rand().
Gib ein Array vor und lass mit obiger Funktion immer ein anderes Element auswählen.

Du willst Grafiken, also setze in das Array lauter Dateinamen von Grafiken. Du erhältst dann zufällig einen.

Mit readfile() gibst du den Dateiinhalt, d.h. das Bild, an den Client zurück.

Kleinigkeit noch: Sende am Anfang einen entsprechenden Header, sonst weiß der Client nicht, was er machen soll und stellt das Bild nicht als Bild, sondern als einen wirren Haufen von komischen Zeichen dar.
PHP:
header("content-type: image/jpeg");
// oder
header("content-type: image/gif");
// oder
header("content-type: image/png");
 
So, das hab ich probiert, weiß einer warum es eine Fehlermeldung gibt:
PHP:
<?php
header('Content-type: image/gif');
header('Content-Disposition: attachment; filename="file.gif"');
$grafiken = array ("1.gif", "2.gif", "3.gif");
readfile(array_rand($grafiken));
?>
 
Ich sehe keine Fehlermeldung :roll:

P.S. Banner downloaden zu lassen, dürfte dem Besucher nicht besonders gefallen :ugly:
 
PHP:
<?php
header('Content-type: image/gif');
$grafiken = array ("1.gif", "2.gif", "3.gif");
readfile(array_rand($grafiken));
?>

Download weg aber immer noch keine Anzeige.
 
Ah, jetzt seh ich. Lies mal im Manual, was array_rand zurückgibt. Du benutzt die Funktion falsch.
 
Ah, ok, da hab ich falsch gedacht, dann so:
PHP:
<?php
header('Content-type: image/gif');
$grafiken = array ("1.gif", "2.gif", "3.gif");
readfile($grafiken[array_rand($grafiken)]);
?>

Geht aber auch nicht? Kann das am Funpicserver liegen?
 
Jetzt müsste es gehen.

Debugging:

  • Lass dir den Array-Index ausgeben.
  • Lass dir den Array-Eintrag ausgeben und guck nach, ob der Dateiname stimmt.
  • Dann guck nach, ob die Grafik vorhanden is (da im selben Verzeichnis wie dein Script (Einschränkung!), muss die Grafik auch über HTTP zu erreichen sein).
  • Ersetze den image/-Content-Type, durch text/plain, um zu gucken, ob überhaupt eine Ausgabe kommt oder ob nur die Grafik fehlerhaft ist.
Unwahrscheinlich, dass es an Funpic liegt - außer die haben readfile() deaktiviert :ugly: Das findest du aber mit phpinfo() raus. Außerdem müsste es normal ne Fehlermeldung geben.
Drum wichtig, mal mit text/plain probieren, dass du die Fehlermeldung ohne Umwege (Browsermenü Ansicht / Quellcode) direkt auf dem Bildschirm siehst - so denn überhaupt eine da is.
 
Mein Posting einfach ganz lesen und ganz durcharbeiten. Die Ursache bzw. der Weg, um das Problem zu erkennen, steht bereits in #8.
 
Gut, es funktioniert alles aber nur, wenn ich es als file.html speichere.
Sobald ich es als gif speichere oder es im header als Grafik definiere, dann bekomme ich nur eine Fehlermeldung. Es muss also an der Grafik liegen, irgendwas passt ihm da nicht.
 
Welche Grafik?
Das Script oder die drei Zufallsgrafiken?
Die drei Banner sind einwandfrei, wenn ich das Script als html laufen lasse, zeigt es mir die Bilder an. Irgendwas klappt da nicht, hat irgendwas mit den image functions zu tun.


//edit: Ich hab den Fehler glaub ich. Ich schreib zurück, wenn ich es hab.
 
So, das Script läuft.
Ohne theHacker hätte ich es nie geschafft, deshalb erstmal ein dickes Dankeschön an dieser Stelle.
Aber: Ohne dich hätte ich mir nie so einen Kopf gemacht, denn der Fehler war die ganze Zeit das readfile! Ich weiß zwar nicht was daran falsch war, denn die Funktion sollte genau das machen, was ich wollte, aber hier nach langem debuggen ist es dann genau darauf rausgelaufen.
Hier das fertige Script:
PHP:
<?php
header('Content-type: image/png');
$array=array ("1.png", "2.png", "3.png");
$rand=array_rand($array);
$file=$array[$rand];
$img=ImageCreateFromPNG($file);
imagepng($img);
//(c) 2009 by bick-fm
/*
* ----------------------------------------------------------------------------
* "THE Cookieware LICENSE" (Revision 42):
* bick-fm erschuf diese geniale Datei. Solange Sie diesen Vermerk nicht entfernen,
* können Sie mit der Datei machen, was Sie möchten. Wenn wir uns eines Tages treffen
* und Sie denken, die Datei ist es wert, können Sie mir dafür einen Keks kaufen. Wer mir keinen Keks kauft ist ein dummer Blutsauger! Njä!
* ----------------------------------------------------------------------------
*/

?>


Gif-Grafiken funktionieren im übrigen nicht.
 
Die Image-Funktionen sind halt etwas "überdimensionierter", für das, was du machen willst.

Ich verstehs aber trotzdem ned, was mit der einfachen Variante nicht funktioniert hat :-?

GIFs gehen schon, nur du musst halt

  • anderen Header senden
  • ImageCreateFromGIF() verwenden (das könnte der Haken sein; gibts nur für GDLib<1.6)
  • ImageGIF() zur Ausgabe benutzen
 
Du hast ja schon geschrieben, weshalb es mit gif nicht funktioniert, gd in zu neuer Version. Ich habe nochmal bisschen mit dem readfile rumprobiert, aber es funktioniert nicht, warum, ich weiß es nicht, ist mir aber jetzt auch egal.