Klaus: Captcha

Moin Jungs,
ich hab ein Problem, und zwar erzeugt mir mein Captcha-Skript kein png. Ich kann aber keinen Fehler finden.
Die Sache läuft so, daß ich die php-erzeugte png-Datei über

<img src="./captcha/captcha.php" border="0" title="Sicherheitscode">

einfüge. Das php-Skript sieht folgendermaßen aus:

<?php  
 session_start();  
 unset($_SESSION['captcha_spam']);  
  
 function randomString($len)  
 {  
  function make_seed()  
  {  
   list($usec , $sec) = explode (' ', microtime());  
   return (float) $sec + ((float) $usec * 100000);  
  }  
  srand(make_seed());  
  
  //Der String $possible enthält alle Zeichen, die verwendet werden sollen  
  $possible="ABCDEFGHJKLMNPRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789";  
  $str="";  
  while(strlen($str)<$len)  
  {  
   $str.=substr($possible,(rand()%(strlen($possible))),1);  
  }  
  return($str);  
 }  
  
 $text = randomString(5);  //Die Zahl bestimmt die Anzahl stellen  
 $_SESSION['captcha_spam'] = $text;  
  
 header('Content-type: image/png');  
 $img = ImageCreateFromPNG('captcha.png'); //Backgroundimage  
 $color = ImageColorAllocate($img, 0, 0, 0); //Farbe  
 $ttf = "./captcha/xfiles.ttf"; //Schriftart  
 $ttfsize = 25; //Schriftgröße  
 $angle = rand(0,5);  
 $t_x = rand(5,30);  
 $t_y = 35;  
 imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $text);  
 imagepng($img);  
 imagedestroy($img);  
?>

Kann es vielleicht an der Session liegen? Die Datei wird nämlich innerhalb eines Buffers (ob_start()) ausgeführt...

Vielen Dank und Grüße aus dem warmen Süden,

Klaus

  1. Hello,

    ich habe Dein Script jetzt nicht weiter untersucht, aber mMn fehlt da ein Content-Header.

    header('Content-Type: image/png');

    imagepng($img);
    imagedestroy($img);

    Liebe Grüße aus Syburg bei Dortmund

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. ich habe Dein Script jetzt nicht weiter untersucht, aber mMn fehlt da ein Content-Header.

      Ausschnitt aus dem OP:

      header('Content-type: image/png');
       $img = ImageCreateFromPNG('captcha.png'); //Backgroundimage
       $color = ImageColorAllocate($img, 0, 0, 0); //Farbe

      1. Hello,

        Ausschnitt aus dem OP:

        Ach, Entschuldigung. Das habe ich nicht gesehen und an der Stelle auch nicht vermutet.
        Ist aber ziemlich egal, wo es steht.

        header('Content-type: image/png');
        $img = ImageCreateFromPNG('captcha.png'); //Backgroundimage
        $color = ImageColorAllocate($img, 0, 0, 0); //Farbe

        Vielleicht kann sein PHP auch keine PNG-Unterstützung. Ist auch schon vorgekommen ;-)

        Klaus sollte das Script mal direkt in der Adressleiste des Browsers aufrufen.

        Liebe Grüße aus Syburg bei Dortmund

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Vielleicht kann sein PHP auch keine PNG-Unterstützung. Ist auch schon vorgekommen ;-)

          Deshalb hab ich ihm gesagt, er soll prüfen ob eine Fehlermeldung erzeugt wird.

          Klaus sollte das Script mal direkt in der Adressleiste des Browsers aufrufen.

          Was soll das bringen? Im FF maximal ne Fehlermeldung, dass das Bild nicht angezeigt werden kann.

          1. Hello,

            Deshalb hab ich ihm gesagt, er soll prüfen ob eine Fehlermeldung erzeugt wird.

            Klaus sollte das Script mal direkt in der Adressleiste des Browsers aufrufen.

            Was soll das bringen? Im FF maximal ne Fehlermeldung, dass das Bild nicht angezeigt werden kann.

            Na, eben die Fehlermeldung anzzuzeigen. Im Kontext von <img src="..."> kann man die nicht sehen...

            Liebe Grüße aus Syburg bei Dortmund

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
            1. Na, eben die Fehlermeldung anzzuzeigen. Im Kontext von <img src="..."> kann man die nicht sehen...

              Solange er den Content-Type weiterhin als image/png ausgibt, sieht er die auch nicht, wenn er das Script direkt im Browser aufruft.

              1. Hello,

                Na, eben die Fehlermeldung anzzuzeigen. Im Kontext von <img src="..."> kann man die nicht sehen...

                Solange er den Content-Type weiterhin als image/png ausgibt, sieht er die auch nicht, wenn er das Script direkt im Browser aufruft.

                Hab jetzt keine Lust, das zu überprüfen. Aber ich denke mir, dass mindestens die Ausgaben, die vor dem Header gesendet werden, angezeigt werden sollten...

                Liebe Grüße aus Syburg bei Dortmund

                Tom vom Berg

                --
                Nur selber lernen macht schlau
                http://bergpost.annerschbarrich.de
                1. Hab jetzt keine Lust, das zu überprüfen. Aber ich denke mir, dass mindestens die Ausgaben, die vor dem Header gesendet werden, angezeigt werden sollten...

                  Und wenn davor keine Fehlermeldungen auftreten?

  2. ich hab ein Problem, und zwar erzeugt mir mein Captcha-Skript kein png. Ich kann aber keinen Fehler finden.

    Hast du schonmal geprüft, ob dein Script eine Fehlermeldung erzeugt?

  3. Hi,

    ich hab ein Problem, und zwar erzeugt mir mein Captcha-Skript kein png.

    sondern?

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  4. Hi,

    ich hab ein Problem, und zwar erzeugt mir mein Captcha-Skript kein png.

    zwar leider keine Lösung, aber es gibt auch zuverlässige Alternativen zu Captchas, die die User nicht ärgern oder gar ausgrenzen...

    freundliche Grüße
    Ingo

    1. zwar leider keine Lösung, aber es gibt auch zuverlässige Alternativen zu Captchas, die die User nicht ärgern oder gar ausgrenzen...

      Nabend,
      dazu kann ich nur sagen dass solche Techniken nicht wirklich gut funktionieren. Fake-Eingabefelder die z.B. mit CSS versteckt werden sind nichts neues. Ich habe selbst einige Gästebücher mit solchen Feldern in Betrieb... man muss die Felder immer wieder anpassen, da die Bots nach kurzer Zeit merken welche Felder auszufüllen sind und welche nicht (vermutlich setzen sie einfach mehrere Requests mit unterschiedlich gefüllten Feldern ab und schauen welche dann auch auf der Seite landen).

      Gruß,
      Andreas

      1. Hi,

        dazu kann ich nur sagen dass solche Techniken nicht wirklich gut funktionieren. Fake-Eingabefelder die z.B. mit CSS versteckt werden sind nichts neues. Ich habe selbst einige Gästebücher mit solchen Feldern in Betrieb... man muss die Felder immer wieder anpassen, da die Bots nach kurzer Zeit merken welche Felder auszufüllen sind und welche nicht (vermutlich setzen sie einfach mehrere Requests mit unterschiedlich gefüllten Feldern ab und schauen welche dann auch auf der Seite landen).

        dann machst Du etwas falsch (z.B. unattraktive name-Attribute) und/oder verlässt Dich ausschließlich auf diese Fallen. Sie halten zar die meisten Bots ab, aber nicht alle. Für die schlauen oder emsigen Bots hilft dann zu über 90% eine Zeitabfrage.

        freundliche Grüße
        Ingo

  5. Hallo,

    also, wenn ich die php-erstellende Datei direkt aufrufe, erhalte ich eine Grafik, die allerding nur Text enthält: "Die Graphik captcha.php kann nicht angezeigt werden, da sie Fehler enthält."

    Häää? :)

    1. Häää? :)

      Was war an meinem Tip, du sollst das Script auf Fehlerausgaben prüfen, denn nicht zu verstehen?

      Genau die von dir zitierte Meldung habe ich bereits beschrieben hier im Thread. Du liest abe3r schon die Beiträge, die auf deine Frage folgen?

    2. Hallo Klaus,

      also, wenn ich die php-erstellende Datei direkt aufrufe, erhalte ich eine Grafik, die allerding nur Text enthält: "Die Graphik captcha.php kann nicht angezeigt werden, da sie Fehler enthält."

      das erinnert mich an die c't-Schlagseite 19/2006.

      Freundliche Grüße

      Vinzenz