2013-12-03 6 views
1

Я хочу создать свою собственную проверку Captcha в PHP, и я написал этот код, но он, похоже, не работает. Изображение не создается, и я не могу найти, где ошибка.Создание пользовательского кода в PHP

PHP:

<?php 
session_start(); 

$string = ''; 

for ($i = 0; $i < 5; $i++) { 
    // this numbers refer to numbers of the ascii table (lower case) 
    $string .= chr(rand(97, 122)); 
} 

$_SESSION['rand_code'] = $string; 

//specify the path where the font exists 
$dir = 'fonts/arial.ttf'; 

$image = imagecreatetruecolor(170, 60); 
$black = imagecolorallocate($image, 0, 0, 0); 
$color = imagecolorallocate($image, 200, 100, 90); // red 
$white = imagecolorallocate($image, 255, 255, 255); 

imagefilledrectangle($image,0,0,399,99,$white); 
imagettftext ($image, 30, 0, 10, 40, $color, $dir."arial.ttf", $_SESSION['random_code']); 

header("Content-type: image/png"); 
imagepng($image); 
?> 

HTML:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data"> 
<p><input type="text" name="name" /> Name</p> 
<p><input type="text" name="email" /> Email</p> 
<p><textarea name="message"></textarea></p> 
<img src="captcha.php"/> 
<p><input type="text" name="code" /> Are you human?</p> 
<p><input type="submit" name="submit" value="Send" class="button" /></p> 
</form> 
+0

Попробуйте использовать порт imagemagick PHP. –

+0

Это требует базовой отладки. Что не так? Вы получаете изображение? Если нет, удалите вызов 'header()' и посмотрите, какие сообщения об ошибках появляются. –

+0

Нет, я не получаю изображение. Я получаю значок браузера по умолчанию для недостающего изображения. Удаление заголовка() ничего не изменило и не показало никаких сообщений об ошибках. – Smolikas

ответ

1

вы генерировать предупреждение из-за неопределенного вар ..

изменение этой линии

imagettftext ($image, 30, 0, 10, 40, $color, $dir."arial.ttf", $_SESSION['random_code']); 

к этому

imagettftext ($image, 30, 0, 10, 40, $color, $dir."arial.ttf", $_SESSION['rand_code']); 

также проверить, если файл шрифта действительно доступен и или вы также получите предупреждение

+0

О, Боже. Огромное спасибо. Так было. Неопределенный var i был случайно пропущен. – Smolikas

1

Изменить это:

imagettftext ($image, 30, 0, 10, 40, $color, $dir."arial.ttf", $_SESSION['random_code']); 

Для этого:

imagettftext ($image, 30, 0, 10, 40, $color, $dir, $_SESSION['random_code']); 

Вы уже садилось имя файла шрифта здесь:

$dir = 'fonts/arial.ttf'; 
+0

Да, я просто нашел это тоже, и я изменил его, но ничего не произошло. – Smolikas

0

Это JQuery Validate слову?

1.- У вас установлена ​​библиотека GD?

2.- Файл называется .php или .jpg? Если имя .jpg, ваш сервер может выполнять файлы .jpg, такие как .php-файлы?

Другие рекомендации. Вы пытаетесь проверить HoneyPot вместо captcha?

0

сначала, измените текст из sessio п вар до некоторой закодированной строки, что-то вроде

imagettftext ($image, 30, 0, 10, 40, $color, $dir , "sdfsfdsfd"); 

Если все еще не работает, удалите строку

header("Content-type: image/png"); 

и открыть полный URL в captcha.php в вашем браузере. он наверняка покажет некоторые ошибки.

+0

извините, я писал, и я забыл опубликовать его, когда я это сделал, тем временем вы уже нашли ответ! моя вина! –

Смежные вопросы