Я использую скрипт капчи для формы.Как ни странно, изображение часто не отображает первый символ строки случайных символов.Этот шаблон будет длиться около 8-12 обновленных страниц, прежде чем будет восстановлено ожидаемое поведение.
Я знаю, что строка содержит полный набор из четырех символов, потому что я отладил это с помощью оператора печати, чтобы показать последнюю переменную сеанса:
1) изображение загружено без первого символа;
2) при обновлении последняя страница из четырех символов отображается на странице с печатью;
3) сравнение подтверждает, что первый символ не был отображен в последнем изображении капчи;
Этот скрипт использует сессии.Сценарий также устанавливает цвет фона и цвет текста из двух непересекающихся диапазонов значений.Это происходит только на удаленном общем хост-сайте, а не на моем локальном тестовом сайте.
Я думаю, что мой удаленный сайт где-то добавляет задержку.Или, может быть, теги PHP, используемые для генерации изображения (imagecolorallocate (), imagecreate (), imagepng (), imagettftext (), imagettfbbox ()), имеют некоторую встроенную задержку, которую я не учел.Может быть, есть способ настроить файлы php.ini или .htaccess?
UPDATE =
Результаты теста ... Код:
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
Как видитеэто всегда первый символ.
Код PHP:
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);