Перейти к содержанию
CMSTOOLS.org - форум поддержки и развития CMS

Рекомендуемые сообщения

  • 1 год спустя...
2 часа назад, banoved сказал:

@Семен  как шрифт поченить,подскажите пожалуйста,заранее благодарен

 

В файле antibot.php функция imagettftext() отвечает за рисование текста на картинке.

Вот документация https://www.php.net/manual/ru/function.imagettftext.php

Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, banoved сказал:

@Семен  шрифт стал выводится, но картинка не выводится  помогите пожалуйста ,заранее благодарен

проблема.png

все решил уже

  • Like 1
Ссылка на комментарий
Поделиться на другие сайты

@timbios вставишь в фаил антибот 


// Тип содержимого
header('Content-Type: image/gif');

// Создание изображения
$im = imagecreatetruecolor(400, 30);

// Создание цветов
$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);

// Текст надписи
$text = 'sec_code';
// Замена пути к шрифту на пользовательский
$font = 'arial.ttf';

// Тень
imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);

// Текст
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);

imagegif($im);
imagedestroy($im);
 

  • Like 1
Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, banoved сказал:

помогите пожалуйста, поченил проблему с текстом, перестала отображаться картинка 

 

проблема.png

Чтобы не строить велосипед благодараря сообществу php разработчиков есть много готовых библиотек.

Ссылка на комментарий
Поделиться на другие сайты

 

3 часа назад, Семен сказал:

Чтобы не строить велосипед благодараря сообществу php разработчиков есть много готовых библиотек.

Я думаю это уже давно можно заменить на google recaptcha

Ссылка на комментарий
Поделиться на другие сайты

9 часов назад, timbios сказал:

@banoved  

Плохой код, есть библиотека от самого  google, есть обертки и сторонних библиотек много.

Ссылка на комментарий
Поделиться на другие сайты

я устранил ошибку 

<?php
/* 
    Appointment: АнтиБОТ
    File: antibot.php 
 
*/
@session_start();

function clean_url($url){

  if ($url == '') return;

  $url = str_replace("http://", "", strtolower($url));
  $url = str_replace("https://", "", $url );
  if (substr($url, 0, 4) == 'www.')  $url = substr($url, 4);
  $url = explode('/', $url);
  $url = reset($url);
  $url = explode(':', $url);
  $url = reset($url);

  return $url;
  
}

if(clean_url($_SERVER['HTTP_REFERER']) != clean_url($_SERVER['HTTP_HOST'])) 
    die("Hacking attempt!");
    
$width = 120;                //Ширина изображения
$height = 50;                //Высота изображения
$font_size = 16;               //Размер шрифта
$let_amount = 5;            //Количество символов, которые нужно набрать
$fon_let_amount = 30;        //Количество символов на фоне
$font = "../system/fonts/cour.ttf";    //Путь к шрифту
 
//набор символов
$letters = array('q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'z', 'x', 'c', 'v', 'b', 'n', 'm', '1', '2', '3', '4', '5', '6', '7', '8', '9');        

//Цвета для фона
$background_color = array(mt_rand(200, 255), mt_rand(200, 255), mt_rand(200, 255));

//Цвета для обводки
$foreground_color = array(mt_rand(0, 100), mt_rand(0, 100), mt_rand(0, 100));

$src = imagecreatetruecolor($width,$height); //создаем изображение            
    
$fon = imagecolorallocate($src, $background_color[0], $background_color[1], $background_color[2]); //создаем фон

imagefill($src,0,0,$fon); //заливаем изображение фоном

//то же самое для основных букв
for($i=0; $i < $let_amount; $i++){
    $color = imagecolorallocatealpha($src, $foreground_color[0], $foreground_color[1], $foreground_color[2], rand(20,40)); //Цвет шрифта
    $letter = $letters[rand(0,sizeof($letters)-1)];
    $size = rand($font_size*2-2,$font_size*2+2);
    $x = ($i+1)*$font_size + rand(2,5); //даем каждому символу случайное смещение
    $y = (($height*2)/3) + rand(0,5);                            
    $cod[] = $letter; //запоминаем код
    imagefttext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text , array $extrainfo = ? ) : array
}

$foreground = imagecolorallocate($src, $foreground_color[0], $foreground_color[1], $foreground_color[2]);

imageline($src, 0, 0,  $width, 0, $foreground);
imageline($src, 0, 0,  0, $height, $foreground);
imageline($src, 0, $height-1,  $width, $height-1, $foreground);
imageline($src, $width-1, 0,  $width-1, $height, $foreground);

$cod = implode("",$cod); //переводим код в строку
 
header("Content-type: image/gif"); //выводим готовую картинку

imagegif($src); 

$_SESSION['sec_code'] = $cod; //Добавляем код в сессию

$text = 'sec_code';
?>

чтоб капча заработала нужно включить библеотеку  GD

Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, Семен сказал:

Плохой код, есть библиотека от самого  google, есть обертки и сторонних библиотек много.

Так, сделай, тогда нормально.

Ссылка на комментарий
Поделиться на другие сайты

В 28.01.2021 в 15:55, Stark98 сказал:

Так, сделай, тогда нормально.

Ничего сложного. Генерация строки и картинки.

@Stark98 не знаешь как библиотеками пользоваться?

 

Изменено пользователем Семен
Ссылка на комментарий
Поделиться на другие сайты

12 часов назад, banoved сказал:

@Семен  я не умею пользоватся библеотеками,я только начал изучать php

Например такая капча https://packagist.org/packages/gregwar/captcha

Спойлер

gregwar_captcha.png.7dce0cc4a3ec4d5f7f40da25336a8c8c.png

Установка:

Спойлер

1. Устанавливаем Composer

2. Добавляем gregwar/captcha

    composer require gregwar/captcha

    или

    php composer.phar require gregwar/captcha

3. в antibot.php все заменяем на


<?php

session_start();

require_once __DIR__.'/../vendor/autoload.php';

$builder = new \Gregwar\Captcha\CaptchaBuilder();

/** Generate the image */
$builder->build();

/** Captcha phrase */
$_SESSION['sec_code'] = $builder->getPhrase();

/** Outputs the image */
header('Content-type: image/jpeg');
$builder->output();

4. в sec_code.php все заменяем на


<?php
session_start();
if($_GET['user_code'] == $_SESSION['sec_code']){
    echo 'ok';
}
echo 'no';

 

 

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...