tam rastgele dize işlemek için başarısız bir PHP CAPTCHA komut giderme

0 Cevap php

Ben bir form için bir CAPTCHA komut dosyası kullanıyorum. Garip görüntü sık sık rasgele karakter dizesinin ilk karakterini işlemek için başarısız olur. Beklenen davranış reestablished önce bu model, yaklaşık 8-12 yenilenir sayfalar sürecek.

I know the string contains the full set of four characters because I've debugged this with a print statement to reveal the last session var:
1) image is loaded missing the first character;
2) on refresh the last four character string is revealed on the page with print;
3) comparrison confirms the first character was not rendered in the last captcha image;

Bu komut oturumları kullanır. Komut dosyası da olmayan iki birleştirilerek üst üste değer aralıkları arka plan ve renk metin rengini ayarlar. Bu, yalnızca uzak paylaşılan ana site ve benim yerel bir test sitesinde oluşur.

Ben uzak site yerde gecikme ekliyor düşünüyorum. Ya da belki görüntüyü (imagecolorallocate (), imagecreate (), imagepng (), imagettftext (), imagettfbbox ()) oluşturmak için kullanılan PHP etiketleri gecikme bazı yerleşik ben hesaba almamış. Belki ayar php.ini ya. Htaccess dosyaları için bir yolu var mı?

GÜNCELLEME =

Test Sonuçları ... Kodu:

01  --------------------------------------
02  test     $_SESSION VAR     IMG VALUE
03  --------------------------------------
04  0                                  2UV
05  1            Q2UV             UMV
06  2            CUMV             KON
07  3            5KON             D93
08  4            MD93             4GH
09  5            T4GH             8BH
10  6            V8BH             UBJ
11  7            WUBJ             AMN9
12  8            AMN9 ...Next 50+ are OK

Eğer onun her zaman ilk karakteri görebilirsiniz.

PHP-Kodu:

13        $char_spacing = 200 / 4; 
14        $font_list = array("arial.ttf", "castelar.ttf", "gibli.ttf", "lfaxi.ttf");
15        /* toggle for speed test $font_list = array("arial.ttf", "arial.ttf", "arial.ttf", "arial.ttf"); */
16        //start image creation 
17        if (!function_exists('imagecreate') || !function_exists("imagepng") || !function_exists("imagecolorallocate") || !function_exists("imagettftext") || !function_exists("imagettfbbox") || !function_exists("imagedestroy")) 
18        { 
19            return false; 
20        } 
21        $image = @imagecreate(200, 50); 
22        if(!$image){ 
23            return false; 
24        } 
25        $background_color = imagecolorallocate($image, rand(150,255), rand(150,255), rand(150,255));    
26        //draw in some noise 
27        for($i = 0; $i < 15; $i++){ 
28            $rand_colour = imagecolorallocate($image, rand(120, 250), rand(120, 250), rand(120, 250)); 
29            imageline($image, rand(0, 200), rand(0, 50), rand(0, 200), rand(0, 50), $rand_colour); 
30        } 
31     
32        //generate random string 
33        for ($s = '', 
34            $i = 0, 
35            $z = strlen( 
36                "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789" 
37            )-1; 
38            $i != 4; 
39            $x = rand(0,$z), 
40            $s .= "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789"{ 
41                $x 
42            }, 
43            $i++ 
44        ); 
45        $_SESSION[$captcha_det['session_id']] = $s; 
46        for($i = 0; $i < strlen($s); $i++){ 
47            $font = $font_list[array_rand($font_list)]; 
48            $colour = imagecolorallocate($image, rand(0, 100), rand(0, 100), rand(0, 100)); 
49            $font_size = rand(16, 22); 
50            $angle = rand(-30, 30); 
51            $char_dets = imagettfbbox($font_size, $angle, $font, $s[$i]); 
52            $x = ($char_spacing / 4) + ($i * $char_spacing); 
53            $y = (50 / 2) + (($char_dets[2] - $char_dets[4]) / 4) + rand(5, 10); 
54            imagettftext($image, $font_size, $angle, $x, $y, $colour, $font, $s[$i]); 
55        } 
56        imagepng($image); 

0 Cevap