Капча отображается через раз

Статус
В этой теме нельзя размещать новые ответы.

dandandan

Мой дом здесь!
Регистрация
7 Авг 2008
Сообщения
1.036
Реакции
292
Написал капчу. Возникла проблема - запускается через раз. То на картинке есть буквы, то букв нету. :(
Скрипт
session_start();
$antisp='';
header("Expires: Sun, 1 Jan 2000 12:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")."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/jpeg");

$height=35;
$font_size=24;
$kolvo_bukv=3;
$kolvo_bukv1=6;
$width=$font_size*($kolvo_bukv1+1)*1.5;
$im = @imagecreate($width*0.5, $height*1.1)
or die("Cannot Initialize new GD image stream");
$background_color = imagecolorallocate($im, 255, 255, 255);
$color_font = imagecolorallocate($im, 0, 0, 0);
$font=random_font();
// выводим капчу
for($i = 0; $i < $kolvo_bukv; ++$i) {
$string.=random_string(1);
}
$antisp.=$string;
$color_font = imagecolorallocate($im, mt_rand(0,100), mt_rand(0,100), mt_rand(0,100));
imagettftext($im, $font_size, 0, 5, 30, $color_font, $font, $string);

$_SESSION['capcha']=$antisp;
$font='';
imagejpeg($im);
imagedestroy($im);
//*****************************
function random_string($len) // выбор случайной буквы
{
$string = "";
$chars = array("A", "B", "C", "D","E", "F", "G", "H", "I", "J", "K", "L", "M", "N",
"P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");

for($i = 0; $i < $len; ++$i)
{
shuffle($chars); // возвращает случайный элемент массива
$string .= $chars[0];
}
return $string;
}
//**************************
function random_font() // выбор случайного шрифта
{
$string = 'shrift_s/0('.mt_rand(1,2).').ttf';
return $string;
}
Вызов капчи из друго дока
<img id="captcha" src="capcha.php" align="absmiddle">

Что где подправить ?
 
Написал капчу. Возникла проблема - запускается через раз. То на картинке есть буквы, то букв нету. :(
Скрипт

Вызов капчи из друго дока


Что где подправить ?
проблема в загрузке шрифтов
например, попробуй указать один файл шрифта:
$string = 'shrift_s/font.ttf';
return $string;
 
проблема в загрузке шрифтов
например, попробуй указать один файл шрифта:
$string = 'shrift_s/font.ttf';
return $string;
Пробовал. Проблема осталась. Смотрел программой Unlocker она показывает, что к шрифту, после показа капчи, все еще обращается Apache. Видимо апач блокирует шрифт.
Может есть какая-нибудь чудодейственная команда для очистки обращения?
 
Странно, я примерно так же делаю каптчу - никаких блокировок нет, да и быть не может. ИМХО дело не в Апаче.

Убери все @ из кода и включи отображение все ошибок и предупреждений.
 
когда я тестирую на денвере со шрифтами у меня Apache тоже блокирует.
может некоторые шрифты не обрабатываются. вот шрифт загрузи его и попробуй с одним шрифтом, а потом делай вывод случайного шрифта, у меня все работает:
PHP:
$string = 'shrift_s/font.ttf';
return $string;
да и вот это, мне кажется, не нужно:
PHP:
header("Expires: Sun, 1 Jan 2000 12:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")."GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
 

Вложения

  • font.rar
    16,7 KB · Просмотры: 3
Не держится сессия....
Возможные У Вас изменяется IP-адрес при каждом следующем обращении к сайту.
 
Шрифты пробывал все и по отдельности и вместе. Даже жестко прописать 1 шрифт, то он показывается через раз.
на счет @ - попробую.

когда я тестирую на денвере со шрифтами у меня Apache тоже блокирует.
Тестировал и на денвере и на серваках - одинаково блокирует.
да и вот это, мне кажется, не нужно:
PHP:
header("Expires: Sun, 1 Jan 2000 12:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")."GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
Это высмотрел у продвинутых скриптов, чтобы изображение не кешировалось.

Не держится сессия....
Возможные У Вас изменяется IP-адрес при каждом следующем обращении к сайту.
а причем здесь сессия? Я не могу увидеть капчу .
ip = const


@ - убрал. Результат тот же.
Сама картинку с задним фоном генерируется. Не генерятся только нужные буквы, которые должен ввести юзер. Если есть желание посмотреть на примере, то вот адресок Для просмотра ссылки Войди или Зарегистрируйся

Взял, приложенный здесь шрифт - все шпарит на ура. :).
Сейчас сделал, чтобы у каждой буквы был свой цвет. В итоге редко, но буквы пропадают.
Вот интересно почему с моими шрифтами работает через раз.
 
я делал капчу с этим платным скриптом:

для примера подойдет ;)
 
Есть ненулевая вероятность что капча генерится, но в ней мусор. Попробуйте сделать вывод капчи в строку и вызовите die с ее значением
 
Есть ненулевая вероятность что капча генерится, но в ней мусор. Попробуйте сделать вывод капчи в строку и вызовите die с ее значением

К сожалению не понял что нужно сделать. Можно другими словами перефразировать:(
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху