[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вывод капчи
denis39
В файле capcha.php формируется картинка с кодом. Вывожу ёё в нужном месте страницы таким образом
<img src="capcha.php">


Проблема в том, что если обновлять странницу 15 раз, то 3-5 раз она не появляется.
Подскажите как можно устранить проблему, а то человек регится, вводит все данные и внизу страницы видит что капчи нет. Приходится обновлять и заного заполнять форму



Спустя 3 часа, 51 секунда (1.01.2010 - 14:02) Romms написал(а):
как я понял изображения генерируется? Если "да" то может кодик даш?

Спустя 9 часов, 17 минут, 18 секунд (1.01.2010 - 23:20) denis39 написал(а):
Romms, да изображение генерируется.

<?php
error_reporting(E_ALL);
$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];
define("code_dir", $DOCUMENT_ROOT."/code/capcha/");
function generate_code()
{

$hours = date("H");
$minuts = substr(date("H"), 0 , 1);
$mouns = date("m");
$year_day = date("z");

$str = $hours . $minuts . $mouns . $year_day; //создаем строку
$str = md5(md5($str)); //дважды шифруем в md5
$str = strrev($str);// реверс строки
$str = substr($str, 2, 7); // извлекаем 6 символов, начиная с 3
// Вам конечно же можно постваить другие значения, так как, если взломщики узнают, каким именно способом это все генерируется, то в защите не будет смысла.



$array_mix = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
srand ((float)microtime()*1000000);
shuffle ($array_mix);
//Тщательно перемешиваем, соль, сахар по вкусу!!!
return implode("", $array_mix);
}

function img_code() //Берем карандаши и рисуем картинку smile.gif
{

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s", 10000) . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Content-Type:image/png");
//защита от кэширования

$linenum = 2; //линии
$img_arr = array(
"code.png",//фон изображения. Можете сами нарисовать
"code1.png"//фон изображения. Можете сами нарисовать
);

$font_arr = array();
$font_arr[0]["fname"] = "verdana.ttf"; //ttf шрифты, можно заменить на свои
$font_arr[0]["size"] = 16;//размер
$font_arr[1]["fname"] = "times.ttf"; //ttf шрифты, можно заменить на свои
$font_arr[1]["size"] = 16;//размер

$n = rand(0,sizeof($font_arr)-1);
$img_fn = $img_arr[rand(0, sizeof($img_arr)-1)];
$im = imagecreatefrompng (code_dir . $img_fn); //создаем изображение со случайным фоном

for ($i=0; $i<$linenum; $i++)
{
//рисуем линии
$color = imagecolorallocate($im, rand(0, 150), rand(0, 100), rand(0, 150));
imageline($im, rand(0, 20), rand(1, 50), rand(150, 180), rand(1, 50), $color);
}

$color = imagecolorallocate($im, rand(0, 200), 0, rand(0, 200));
imagettftext ($im, $font_arr[$n]["size"], rand(-4, 4), rand(10, 45), rand(20, 35), $color, code_dir.$font_arr[$n]["fname"], generate_code());//накладываем код

for ($i=0; $i<$linenum; $i++)//еще раз линии! Уже сверху.
{
$color = imagecolorallocate($im, rand(0, 255), rand(0, 200), rand(0, 255));
imageline($im, rand(0, 20), rand(1, 50), rand(150, 180), rand(1, 50), $color);
}

ImagePNG ($im);
ImageDestroy ($im);//ну вот и создано изображение!
}

img_code();
?>

Спустя 3 минуты, 28 секунд (1.01.2010 - 23:23) denis39 написал(а):
Проблема та же. При обновлении странницы картинка то появляется, то нет unsure.gif

Спустя 1 час, 46 минут, 39 секунд (2.01.2010 - 01:10) 6a6ka написал(а):
Написать кнопку обновления капчи. Или устроить тест, or die.

Спустя 4 часа, 35 минут, 19 секунд (2.01.2010 - 05:45) qpayct написал(а):
Аякс поможет обновлять картинку не перегружая страницы, а несчёт самой капчи должны быть причины почему она выводится не каждый раз. Надо разбираться в чём дело. Дома буду, проверю.

Спустя 5 часов, 5 минут, 45 секунд (2.01.2010 - 10:51) denis39 написал(а):
qpayct
Буду ждать

Спустя 2 часа, 36 минут, 10 секунд (2.01.2010 - 13:27) 6a6ka написал(а):
http://cs.devilmice.by/code/

У меня все норм. Заменил только использование шрифтов.

define("code_dir", $DOCUMENT_ROOT."/code/capcha/");


на свое.
добавил
putenv('GDFONTPATH=' . realpath('.'));


Так, как шрифты не читались... Соответственно -

$font_arr[0]["fname"] = "verdana";
$font_arr[1]["fname"] = "times";

Спустя 1 час, 35 минут, 27 секунд (2.01.2010 - 15:02) denis39 написал(а):
6a6ka
Поставил другой скрипт, всё стало работать biggrin.gif
Как всегда попов УГ!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.