Captcha - ich verzweifle ("Lösung" gefunden)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Captcha - ich verzweifle ("Lösung" gefunden)

    Hi,

    Es geht um ein ganz normales CaptchaScript (modifiziertes Script von stoppt-den-spam.info, da ich mir nie Mühe gemacht habe eins vollständig selbst zu schreiben :)
    Hier der Quellcode:

    Quellcode

    1. <?php
    2. session_save_path('.../irgendeinKorrekterOrdner');
    3. session_start();
    4. /*if(isset($_SESSION['captcha'])){
    5. unset($_SESSION['captcha']);
    6. }*/
    7. include('...class-log.php');
    8. $log = new Log('....logs/');
    9. function randomString($len) {
    10. function make_seed(){
    11. list($usec , $sec) = explode (' ', microtime());
    12. return (float) $sec + ((float) $usec * 100000);
    13. }
    14. srand(make_seed());
    15. $possible="ABCDEFGHJKLMNPRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789";
    16. $str="";
    17. while(strlen($str)<$len) {
    18. $str.=substr($possible,(rand()%(strlen($possible))),1);
    19. }
    20. return($str);
    21. }
    22. $z = rand(4,6);
    23. $text = randomString($z);
    24. $_SESSION['captcha'] = $text;
    25. $log->report('Captcha-Aufruf mit "' . $text . '"');
    26. header('Content-type: image/png');
    27. $i = rand(0,6);
    28. $img = ImageCreateFromPNG('captcha' . $i . '.PNG');
    29. $color = ImageColorAllocate($img, 0, 0, 0);
    30. $ttf = "XFILES.TTF";
    31. $ttfsize = 25;
    32. $angle = rand(0,5);
    33. //distance from the left border
    34. $max = 60/strlen($text);
    35. $t_x = rand(5,$max);
    36. $t_y = 35;
    37. imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $text);
    38. imagepng($img);
    39. imagedestroy($img);
    40. ?>
    Alles anzeigen


    Ich muss dazu sagen, auf meinem localhost und einem Space auf Funpic funktioniert alles tadellos: Ich binde die Datei per <img src="....captcha.php" /> ein, prüfe nach dem Absenden des Buttons die Variable $_SESSION['captcha'] bzw. vergleiche sie mit der Eingabe und gebe daraufhin eine Meldung aus (obs geklappt hat oder nicht).
    Auf meinem Webspace funktioniert das Ganze aber -nicht.
    Wieso, kann ich bis jetzt nicht sagen. Ich dachte zuerst an fehlerhafte Sessioneinstellungen und verglich diese. Da session_auto_start es verhinderte session_save_path zu verändern, ließ ich diese Einstellung von meinem Webhoster auf off stellen. Nun laufen alle session-Dokumente über einen Ordner und doch funktioniert es nicht. Also habe ich meine Log-Klasse eingebaut, um zu sehen, was bei einem Aufruf der index.php geschieht und tada, folgendes sehe ich:
    [index.php, in der das Bild captcha.php eingebettet wurde, wurde aufgerufen]
    Log:
    17:51 Captcha-Aufruf mit "hZg7W"
    17:51 Captcha-Aufruf mit "FAhfC"
    17:51 Captcha-Aufruf mit "AWYCcA"
    Ich bin verdutzt und wiederhole den Vorgang. Selbes Ergebnis. Es werden drei (!!) Ergebnisse erzeugt. Als ob die Datei drei Mal aufgerufen wurde. Ich bin misstrauisch und rufe die Datei captcha.php direkt auf.
    Log:
    17:53 Captcha-Aufruf mit "ehGF5s"
    17:53 Captcha-Aufruf mit "Jnt3Rt"
    17:53 Captcha-Aufruf mit "gxYs"
    Ich habe bewusst -ein einziges Mal- geladen. Übrigens ist der mittlere Code (Jnt3Rt) derjenige, der am Bild angezeigt wurde. Ich verstehe die Welt nicht mehr.. Daraufhin habe ich das Ganze auf meinem localhost wiederholt und siehe da: Jeder log-Eintrag wird einmal getätigt.

    Nun weiß ich einfach nicht mehr weiter. Ich hoffe ihr könnt mir helfen - könnte es eine Einstellung geben, an der das liegt? Sieht jemand eine bösartige Schleife, die nur bewusst im Web agiert, um dann alles zu verdreifachen?



    Danke für eure Hilfe..



    lG

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von PHP0Kid ()

  • Also Funktionen in Funktionen habe ich noch nie gemacht. Vielleicht klappt das bei irgendeiner PHP Version nicht.

    Bei Problemen die mit der Serverkonfiguration zusammenhängen (und auch generell bei jedem PHP-Problem) sollte man immer als erstes error_reporting(E_ALL) setzen.
    Mach das mal bei deinen Scripten und auch bei deinem Bild. (also einfach mal das Bild direkt im Browser aufrufen - ohne header image/png)
  • Die index.php hat bereits ein error_reporting(E_ALL) (so wie all meine Scripte) - sowohl die index.php als auch captcha.php geben keine Fehler aus.
    Index.php hatte kurzzeitig durch den Counter "chCounter" einen Fehler:
    [Blockierte Grafik: http://www.julian-stier.de/error.jpg]
    Diesen habe ich bereinigt. Das ist scheinbar ein Bug des chCounter, dass wenn man die Einstellung "Zeichensatz der Website" einfach leert er diesen Fehler ausgibt. Ich wusste das bis dahin noch nicht, ändert aber nichts an meinem Problem.
    Captcha.php gibt sowohl mit als auch ohne header() keine Fehler (bei error_reporting(E_ALL)) aus.

    Weiterhin werden drei Logs verursacht.. (lt. topster.de/http-header/ ist der http-header "HTTP/1.1 200 OK", falls euch das was hilft ... ?)


    lG



    EDIT: übrigens siehts jetzt so aus (funktion aus der funktion genommen):

    Quellcode

    1. error_reporting(E_ALL);
    2. session_save_path('.../tmp');
    3. session_start();
    4. @include('class-log.php');
    5. $log = new Log('..saves/');
    6. function make_seed(){
    7. list($usec , $sec) = explode (' ', microtime());
    8. return (float) $sec + ((float) $usec * 100000);
    9. }
    10. function randomString($len){
    11. srand(make_seed());
    12. $possible="ABCDEFGHJKLMNPRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789";
    13. $str="";
    14. while(strlen($str)<$len){
    15. $str .= substr($possible,(rand()%(strlen($possible))),1);
    16. }
    17. return($str);
    18. }
    19. $z = rand(4,6);
    20. $text = randomString($z);
    21. $_SESSION['captcha'] = $text;
    22. $log->report('Captcha-Aufruf mit "' . $text . '"');
    23. header('Content-type: image/png');
    24. $i = rand(0,6);
    25. $img = ImageCreateFromPNG('captcha' . $i . '.PNG');
    26. $color = ImageColorAllocate($img, 0, 0, 0);
    27. $ttf = "XFILES.TTF";
    28. $ttfsize = 25;
    29. $angle = rand(0,5);
    30. //distance from the left border
    31. $max = 60/strlen($text);
    32. $t_x = rand(5,$max);
    33. $t_y = 35;
    34. imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $text);
    35. imagepng($img);
    36. imagedestroy($img);
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von PHP0Kid ()

  • Joa, war ein Versehen, das @, macht aber nix aus. Habe es jetzt mal übersichtlicher gemacht, genauer dokumentiert und ohne Log-Script geschrieben. Außerdem habe ich eine einfache Ausgabe (wie du empfohlen hast) durchgeführt und kam zu dem Ergebnis, dass bei echo 'x'; ein faches "x" erschien oder bei echo $_SESSION['captcha'] der einfache Zufallstext.

    Daher habe ich nun eine .phps-Datei (was mir gar nicht so Recht ist .. ^.^) und eine zugehörige Log-Datei, die die Funktion fopen() verwendet:

    >> Link zum php-Script
    >> Link zur Logdatei
    >> Link zum offenen Quellcode

    Wie du siehst, wird "fwrite" wieder mal 3fach durchgeführt .. 8| (probier ruhig ein wenig rum..)



    lG
  • Alles geschehen und bereits ausprobiert, ändert aber nichts an der Lage.

    Ich glaube es bringt auch nichts auf jede Kleinigkeit im Script nun einzugehen, an der es liegen -könnte-, denn auf meinem localhost und auf Funpic funktioniert das Script ja. Also wüsste ich gerne, ob es eine bestimmte Einstellung der php.ini ist, die mein Hoster ändern könnte..

    Vielleicht wäre es besser das Problem per Messenger oder Mail zu lösen? Dann könnte ich die Lösung auch irgwann hier posten..

    ICQ: 239816625
    Mail: email AT julian-stier DOT de



    lG
  • Das ist mir und nem Freund von mir auch aufgefallen, jo. Daher hab ich mir die Sache näher angesehen und letztendlich lag es am URL-Hiding von United-Domains.de. Ich habs nun ausgeschaltet und es funktioniert (yippie^^), aber bin doch etwas von united-domains enttäuscht.. Hat mich eigentlich noch nie im Stich gelassen - naja. Da ich jetzt aber kein URL-Hiding mehr verwende, ist zumindest die Anbindung schneller :D


    Sorry für die Umstände und so.. (ich und falscher php-Code? 8) :D)



    lG