|
|
|
| Не отображается картинка каптчи, вроде все верно, шрифт тоже лежит в нужной директории, появляется лишь пустое изображение и все, в чем может быть проблема?
<?php
Header("Content-type: image/jpeg");
session_start();
$im=ImageCreateFromJpeg(round(mt_rand(1,3)).".jpg");
$color=ImageColorAllocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
ImageTtfText($im, 23, mt_rand(-5,5), 3, 30, $color, "addict.ttf", $_SESSION['uid']);
ImageJpeg($im);
ImageDestroy($im);
?>
|
| |
|
|
|
|
|
|
|
|
для: Fractured#
(16.12.2009 в 00:52)
| | Пишет что не может найти шрифт, пробовал указывать и абсолютные и относительные пути, результат один и тот же:
Warning: imagettftext() [function.imagettftext]: Could not find/open font in
|
Из-за чего так? | |
|
|
|
|
|
|
|
для: Softic
(16.12.2009 в 00:48)
| | Интересно, что такое нужная директория и какая была полная диагностика?
Для отладки таких вещей не надо торопиться привинтить Content-Type .
Нужно сперва убедиться, что в поток вылезает картинка, а не поток диагностических сообщений. | |
|
|
|
|
|
|
|
для: Trianon
(16.12.2009 в 01:10)
| | Я пробую без заголовка
Header("Content-type: image/jpeg");
|
Это я просто привел полностью код здесь.
Пробовал и шрифт менять, но все равно выводит следующее:
Warning: imagettftext() [function.imagettftext]: Could not find/open font in /var/www/sait/data/www/sait.ru/img/capcha.php on line 6
���� ....... и т. д.
|
| |
|
|
|
|
|
|
|
для: Softic
(16.12.2009 в 01:20)
| | может попробовать полный путь к файлу (с фонтом) указать? | |
|
|
|
|
|
|
|
для: Trianon
(16.12.2009 в 01:22)
| | спасибо Trianon помогло.
Но теперь новая проблема, не отображается текст поверх фона картинки.
Запускаю скрипт такой ссылкой http://www.sait.ru/img/capcha.php?sid=269375
выводится лишь фон, а вот текста поверх него нету. | |
|
|
|
|
|
|
|
для: Softic
(16.12.2009 в 01:37)
| | По указанноу адресу ничего не открывается
Смотрите наличие и размер картинок.
Где-то 640x480 вполне идут. | |
|
|
|
|
|
|
|
для: Softic
(16.12.2009 в 01:20)
| | Пока за чаем писал предыдущее сообщение, ответов уже прибавилось и оно стало явно не в тему.
Возможно (исходя из пути - /var/www/sait/data) нужно права у файла шрифта посмотреть? | |
|
|
|
|
|
|
|
для: Softic
(16.12.2009 в 00:48)
| | А ошибки какие-нибудь есть?
Вообще, код страный немножко. Так какую задачу преследует применение функции round()? В любом случае (хоть с ней, хоть без нее) результат будет в промежутке от 1 до 3. Следует проверить переменную сессии, возможно там просто ничего нет. | |
|
|
|
|
|
|
|
для: Sergeich
(16.12.2009 в 01:35)
| | Я не спорю, может быть он со стороны профи и странный, я пока мало соображаю.... вот код обработчика формы:
class reg{
function reg($dbserver,$dbuser,$dbpass,$db,$sitename)
{
$link = mysql_connect($dbserver, $dbuser, $dbpass) or die("No Mysql connect" );
mysql_select_db($db, $link) or die ('No select db');
mysql_query("Set name utf8");
if(!$_POST['do'] OR $_POST['do'] =='')
{
if($_SESSION['uid'] =='') { $_SESSION['uid'] = mt_rand(100000,999999); }
echo '<h1>Форма регистрации</h1>';
echo'<form action="" method="POST"><table cellpadding=4 cellspacing=0 border=1 style="border-collapse:collapse">';
echo '<tr><td>Фамилия:</td><td><input name="fname" type="text" value=""></td></tr>';
echo '<tr><td>Имя:</td><td><input name="name" type="text" value=""></td></tr>';
echo '<tr><td>Пароль:</td><td><input name="pass" type="password" value=""></td></tr>';
echo '<tr><td>Ещё раз пароль:</td><td><input name="rpass" type="password" value=""></td></tr>';
echo '<tr><td>Эл.адрес</td><td><input name="mail" type="text" value=""></td></tr>';
echo '<tr><td>Телефон</td><td><input name="tel" type="text" value=""><br/>+7 xxxx xxxxxx</td></tr>';
echo '<tr align="center"><td colspan=2><img src="http://www.sait.ru/img/capcha.php?sid='.$_SESSION['uid'].'"/><br/><input name="sid" type="text" value=""></td></tr>';
echo '<tr><td colspan=2 align="right"><input name="do" type="submit" value="Продолжить"></td></tr>';
echo '</table></form>';
}
if($_POST['do'] !='')
{
if($_POST['sid'] == $_SESSION['uid'])
{
|
| |
|
|
|
|
|
|
|
для: Softic
(16.12.2009 в 01:44)
| | mysql_query("Set name utf8");
Это откуда списали? | |
|
|
|
|
|
|
|
для: Softic
(16.12.2009 в 01:44)
| | Кто ж Вас неволит использовать чужой сложный и непонятный, а не написать свой, простой и ясный?
Вот ей-богу не въезжаю... | |
|
|
|
|
|
|
|
для: Trianon
(16.12.2009 в 01:56)
| | Все это мне досталось от другого человека, а меня обязали переделать и доделать все недоработки. И не спросили как я могу разобраться в непонятном чужом коде. Вот в чем основная проблема. | |
|
|
|
|
|
|
|
для: Sergeich
(16.12.2009 в 01:35)
| | round() - для фона каптчи, у меня 3 разных картинки 1.jpg: 2.jpg; 3.jpg, всмысле подложки, сверху которых должен быть текст. | |
|
|
|
|
|
|
|
для: Softic
(16.12.2009 в 01:55)
| | Последняя проблема заключается в том, что в переменной $text ничего несодержится.
Хотя перехожу вроде бы по правильной ссылке http://www.sait.ru/img/capcha.php?sid=670013
Почему в $_SESSION пусто?
<?php
Header("Content-type: image/jpeg");
$c1 = mt_rand(50,200);
$c2 = mt_rand(50,200);
$c3 = mt_rand(50,200);
session_start();
$text = $_SESSION['sid'];
$im=ImageCreateFromJpeg(round(mt_rand(1,3)).".jpg");
$color=ImageColorAllocate($im, $c1, $c2, $c3);
ImageTtfText($im, 23, mt_rand(-5,5), 3, 30, $color, "../img/addict.ttf", $text);
ImageJpeg($im);
ImageDestroy($im);
?>
|
| |
|
|
|
|
|
|
|
для: Softic
(16.12.2009 в 11:41)
| | А переменную $_SESSION['sid'] проверить трудно? Пусто, значит в нее ничего не заносят. | |
|
|
|
|
|
|
|
для: sim5
(16.12.2009 в 11:45)
| | я проверил, в том то и дело что в ней пусто, тогда как сделать так чтобы в нее заносилось значение?
Поробовал $_GET['sid']; - работает, но, не могу теперь понять, почему программист использовал именно $_SESSION['sid']; объясните пожалуйста | |
|
|
|
|
|
|
|
для: Softic
(16.12.2009 в 11:53)
| | А я откуда знаю почему именно ее? С таким же успехом можно использовать $_SESSION['Вова'], но пака мы не запишем в нее $_SESSION['Вова']="дурак", она таки так и будет пустой, если только еще и создана будет. | |
|
|
|
|
|
|
|
для: sim5
(16.12.2009 в 12:00)
| | спасибо | |
|
|
|
|
|
|
|
для: Softic
(16.12.2009 в 00:48)
| | Как сделать кнопку перезагрузки изображения каптчи, то есть в моем случае нужно чтобы перезагружалась только подложка - фон? | |
|
|
|
|
|
|
|
для: Softic
(16.12.2009 в 12:30)
| | <input type="button" name = "reset" value="Обновить" onclick="document.getElementById('captcha-image').src = 'capcha.php'>
У картинки назначаете id, событие привязываете к этому id, 'capcha.php' - скрипт, который генерирует картинку. | |
|
|
|
|
|
|
|
для: Лена
(16.12.2009 в 12:43)
| | Сэнкс!
Работает, но теперь немогу правильно записать строку, проблема с расстановкой кавычек...
echo '<input type="button" name = "reset" value="Обновить" onclick="document.getElementById('captcha-image').src = 'http://www.556626.ru/img/capcha.php?sid='.$_SESSION['uid'].''">';
|
| |
|
|
|
|
|
|
|
для: Softic
(16.12.2009 в 13:01)
| | А слеши для чего? | |
|
|
|
|
|
|
|
для: sim5
(16.12.2009 в 13:09)
| | Обновление работает только один раз, можно как-либо увеличить? ну чтобы кнопка работала постоянно? | |
|
|
|
|
|
|
|
для: Softic
(16.12.2009 в 13:21)
| | А что вы хотите? Она у вас в кеше, с кеша браузер и берет ее. Вот это $_SESSION['uid'] зачем вообще для каптчи? Какую роль оно выполняет? | |
|
|
|
|
|
|
|
для: sim5
(16.12.2009 в 13:51)
| | $_SESSION['uid'] - здесь содержится набор цифр, которые отображаются на картинке. А проверяются они при отправке формы, в куске кода который я приводил выше. Я могу и полностью его выложить если потребуется.
Вы поймите я этот код не писал, мне просто приходится его переделывать без особого опыта программирования. А человека который занимался этим кодом, больше нету, вот так. | |
|
|
|
|
|
|
|
для: Softic
(16.12.2009 в 18:02)
| | Если в этой переменной содержится код каптчи, то вы передавая ее клиенту, делаете роботу огромную услугу. Нафига тогда вообще нужна каптча ваша?
Выбросить эту хрень из кода HTML. Код каптчи должен формироваться случайно, запоминаться в сессии, никоим образом не передаваться клиенту, и проверять нужно то, что ввел клиент, с тем, что вы сохранили в сессии.
Кликать можно просто на картинку, не обязательно для этого ее во что-то "прятать". А чтобы она не кешировалась, необходимо передавать заголовок соответствующий - не поможет, вместо sid ненужного, подставлять случайное число к адресу src изображения, сгенерированное в JS. | |
|
|
|
|
|
|
|
для: Softic
(16.12.2009 в 13:21)
| | URL http://www.556626.ru/img/capcha.php возвращает закешированный результат. | |
|
|
|