Как использовать капчу в плагине WordPress

Я создаю плагин WordPress. Этот плагин показывает форму отправки в теме WordPress. я использую этот код php captcha в моем плагине wp:

    function create_image() {
$md5_hash = md5(rand(0,999));
$security_code = substr($md5_hash, 15, 5);
$_SESSION["security_code"] = $security_code;
$width = 100;
$height = 35;
$image = ImageCreate($width, $height);
$white = ImageColorAllocate($image, 255, 255, 255);
$black = ImageColorAllocate($image, 2, 0, 0);
$blue = ImageColorAllocate($image, 87, 20, 186);
$grey = ImageColorAllocate($image, 204, 204, 204);
ImageFill($image, 0, 0, $blue);
ImageString($image, 5, 30, 8, $security_code, $white);
ImageRectangle($image,0,0,$width-1,$height-1,$grey);
header("Content-Type: image/jpeg");
Imagepng($image);
ImageDestroy($image);
}

и используйте капчу в теге img:

<img class="captcha" src="<?php create_image() ?>">

Но когда я использую этот плагин в моей теме, не работает!

0

Решение

Ваш тег изображения, когда вы делаете это, скажем,

      <img class="captcha" src="<<a whole bunch of binary stuff>>">

Зачем? потому что ваш create_image() Функция испускает изображение встроенным, используя форму с одним параметром Imagepng(),

Вместо этого вам нужно отправить изображение в файл .png, а затем указать имя этого файла в <img ... /> тег.

Вы можете изменить последние несколько строк вашей функции, чтобы работать следующим образом.

   ...
ImageRectangle($image,0,0,$width-1,$height-1,$grey);
$file = "tmp-" . rand() . ".png";
Imagepng($image, $file);
return "/" . $file;
}

Это заставит вашу функцию создать png-файл со случайным именем, а затем вернет путь к этому файлу, который будет использоваться в вашем <img .../> тег.

Это займет некоторую отладку. То, как я это написал, предполагает, что вы можете писать в текущий рабочий каталог. Вам, вероятно, нужно записать в какой-то временный каталог, который доступен для вашего веб-сервера.

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

0

Другие решения

попробуйте этот код ..

<?php
function generateRandomString($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}
function generateCaptchaImage($text = 'good'){
// Set the content-type
header('Content-Type: image/png');
$width  = 200;
$height = 30;
// Create the image
$im = imagecreatetruecolor($width, $height);

// Create some colors
$white  = imagecolorallocate($im, 255, 255, 255);
$grey   = imagecolorallocate($im, 128, 128, 128);
$black  = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);

//ADD NOISE - DRAW background squares
$square_count = 6;
for($i = 0; $i < $square_count; $i++){
$cx = rand(0,$width);
$cy = (int)rand(0, $width/2);
$h  = $cy + (int)rand(0, $height/5);
$w  = $cx + (int)rand($width/3, $width);
imagefilledrectangle($im, $cx, $cy, $w, $h, $white);
}

//ADD NOISE - DRAW ELLIPSES
$ellipse_count = 5;
for ($i = 0; $i < $ellipse_count; $i++) {
$cx = (int)rand(-1*($width/2), $width + ($width/2));
$cy = (int)rand(-1*($height/2), $height + ($height/2));
$h  = (int)rand($height/2, 2*$height);
$w  = (int)rand($width/2, 2*$width);
imageellipse($im, $cx, $cy, $w, $h, $grey);
}

// Replace path by your own font path
$font = 'ThisisKeSha.ttf';

// Add some shadow to the text
imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);

// Add the text
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);

// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
}

$randomString = generateRandomString();
generateCaptchaImage($randomString);
?>

Тем не менее, ты не получаешь тогда отослать это Хорошее решение с демо

-1

По вопросам рекламы [email protected]