CAPTCHA
Этот коммит содержится в:
@@ -7,11 +7,21 @@
|
||||
*/
|
||||
|
||||
namespace PTEST\C;
|
||||
use PFRM\Controller;
|
||||
use PFRM\View as View;
|
||||
use PTEST\M\CAPTCHAModel as Model;
|
||||
|
||||
|
||||
class CAPTCHAController {
|
||||
class CAPTCHAController extends Controller{
|
||||
|
||||
public function indexAction() {
|
||||
|
||||
$view = new View('CAPTCHA');
|
||||
$view->setHTTPHeader('Content-Type: image/png');
|
||||
$view->setHTTPHeader('Cache-Control: max-age=0, no-cache, no-store');
|
||||
$view->setHTTPHeader('Pragma: no-cache');
|
||||
$model = new Model();
|
||||
$view->image = $model->getImage();
|
||||
$_SESSION['CAPTCHA'] = $model->code;
|
||||
$view->render();
|
||||
}
|
||||
}
|
@@ -6,7 +6,7 @@
|
||||
* Time: 00:20
|
||||
*/
|
||||
|
||||
namespace PTEST\Model;
|
||||
namespace PTEST\M;
|
||||
|
||||
|
||||
class AdModel {
|
||||
|
65
src/M/CAPTCHAModel.php
Обычный файл
65
src/M/CAPTCHAModel.php
Обычный файл
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Игорь
|
||||
* Date: 24.01.2017
|
||||
* Time: 00:37
|
||||
*/
|
||||
|
||||
namespace PTEST\M;
|
||||
|
||||
|
||||
class CAPTCHAModel {
|
||||
|
||||
public $code;
|
||||
|
||||
public function getImage() {
|
||||
global $app;
|
||||
$letters = 'ABDEFABDEFGKLMNPRSTWXYZ482GKLMNABDEFGKLMNPRSTWXYZ482PRSTWXYZ482'; // алфавит
|
||||
|
||||
$length = 6; //длина текста
|
||||
$height = 60*2;
|
||||
|
||||
$fonts_arr = [
|
||||
$app->config->public_dir . 'font/PTF55F.ttf',
|
||||
$app->config->public_dir . 'font/PTF56F.ttf',
|
||||
$app->config->public_dir . 'font/PTF75F.ttf',
|
||||
$app->config->public_dir . 'font/PTF76F.ttf',
|
||||
$app->config->public_dir . 'font/PTZ55F.ttf',
|
||||
$app->config->public_dir . 'font/PTZ56F.ttf',
|
||||
];
|
||||
$fontsize_base = 36;// размер текста
|
||||
|
||||
$image = imagecreatefrompng($app->config->public_dir . 'image/CAPTCHA_' . rand(0,4) .'.png');
|
||||
|
||||
$captcha = '';
|
||||
|
||||
for ($i = 0; $i < $length; $i++)
|
||||
{
|
||||
$fontsize = rand($fontsize_base - 2, $fontsize_base + 2) ;
|
||||
$captcha .= $letters[ rand(0, strlen($letters)-1) ];
|
||||
$x = ($i + 1) * ($fontsize + 5 );
|
||||
$x = rand($x, $x+6);
|
||||
$y = $height - ( ($height - $fontsize) / 2 ) + rand(-8,16);
|
||||
$curcolor = imagecolorallocate( $image, rand(50, 127), rand(0, 127), rand(0, 127) );
|
||||
|
||||
//шум
|
||||
imageellipse($image, rand($x - 32 ,$x + 32), $y, rand(16,32), rand(16,52), $curcolor);
|
||||
imageellipse($image, $x, rand($y - 16 ,$y + 16), rand(16,52), rand(16,32), $curcolor);
|
||||
|
||||
$angle = rand(-25, 25);
|
||||
|
||||
imagettftext($image, $fontsize, $angle, $x, $y, $curcolor, $fonts_arr[rand(0,5)], $captcha[$i]);
|
||||
}
|
||||
|
||||
|
||||
ob_start();
|
||||
imagepng($image);
|
||||
$image_data = ob_get_contents();
|
||||
ob_end_clean();
|
||||
|
||||
$this->code = $captcha;
|
||||
|
||||
return $image_data;
|
||||
}
|
||||
}
|
2
src/V/CAPTCHA.php
Обычный файл
2
src/V/CAPTCHA.php
Обычный файл
@@ -0,0 +1,2 @@
|
||||
<?php
|
||||
echo $this->image;
|
@@ -27,7 +27,7 @@ $app->config = (object) [
|
||||
"site_name" => "Доска объявлений"
|
||||
];
|
||||
|
||||
$app->setRoute( '/^\/CAPTCHA.png$/', 'CAPTCHA' );
|
||||
$app->setRoute( '/^\/CAPTCHA.png\?*\d*$/', 'CAPTCHA' );
|
||||
$app->setRoute( '|^/page/(?<id>\d+)/$|', 'Index', 'page');
|
||||
$app->setRoute( '/^.*$/', 'error404' );
|
||||
|
||||
|
Ссылка в новой задаче
Block a user