Cron 用于验证码的imagemagick
我有一个cronjob,可以为我的在线表单(注册、联系和时事通讯)生成验证码 我每天生成5000多张图像,所以当我显示表单时,我随机选择一张,然后简单地显示图像并设置会话 我的桌子很简单: 验证码(id mediumint(5)未签名的PK,短语varchar(10))Cron 用于验证码的imagemagick,cron,imagemagick,captcha,Cron,Imagemagick,Captcha,我有一个cronjob,可以为我的在线表单(注册、联系和时事通讯)生成验证码 我每天生成5000多张图像,所以当我显示表单时,我随机选择一张,然后简单地显示图像并设置会话 我的桌子很简单: 验证码(id mediumint(5)未签名的PK,短语varchar(10)) 然后我运行cronjob生成图像并插入数据库。这个过程需要一段时间才能运行,我想知道是否有更好的方法,为了最大限度地提高性能和生成,因为我有其他整天都在运行的cronjob,我想确保我可以从cronjob中去掉这一点,这样我的c
然后我运行cronjob生成图像并插入数据库。这个过程需要一段时间才能运行,我想知道是否有更好的方法,为了最大限度地提高性能和生成,因为我有其他整天都在运行的cronjob,我想确保我可以从cronjob中去掉这一点,这样我的cronjob作业就可以稍微喘口气了。创建一个文件调用
Captcha.class.php
,并将其放入:
class Captcha {
private $font = '/path/to/font/yourfont.ttf'; // get any font you like and dont forget to update this.
private function generateCode($characters) {
$possible = '23456789bcdfghjkmnpqrstvwxyz'; // why not 1 and i, because they look similar and its hard to read sometimes
$code = '';
$i = 0;
while ($i < $characters) {
$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
$i++;
}
return $code;
}
function getImage($width, $height, $characters) {
$code = $this->generateCode($characters);
$fontSize = $height * 0.75;
$image = imagecreate($width, $height);
if(!$image) {
return FALSE;
}
$background_color = imagecolorallocate($image, 255, 255, 255);
$text_color = imagecolorallocate($image, 66, 42, 32);
$noiseColor = imagecolorallocate($image, 150, 150, 150);
for( $i=0; $i<($width*$height)/3; $i++ ) {
imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $noiseColor);
}
for( $i=0; $i<($width*$height)/150; $i++ ) {
imageline($image, mt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $noiseColor);
}
$textbox = imagettfbbox($fontSize, 0, $this->font, $code);
if(!$textbox) {
return FALSE;
}
$x = ($width - $textbox[4])/2;
$y = ($height - $textbox[5])/2;
imagettftext($image, $fontSize, 0, $x, $y, $text_color, $this->font , $code) or die('Error in imagettftext function');
header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
$_SESSION['captcha'] = $code;
}
}
您也可以根据需要更改参数以显示不同的验证码
这样,您将动态生成。如果您愿意,您也可以随时将图像保存在磁盘上。如果您总共有5000多个联系人或时事通讯,您非常受欢迎:)这似乎效率很低,而且浪费资源。仅在需要时生成图像。我生成5000,以确保我随机化时不会得到相同的图像两次。@Owan Bakudan是正确的,您应该使用GD动态生成它们。我不认为你需要一份工作this@BookOfZeus我读到我需要使用imagecreate,但它有点复杂。有什么我可以玩的吗?@Owan首先你必须检查GD是否启用,你可以使用php信息检查并搜索GD。
session_start();
require('Captcha.class.php');
$Captcha = new Captcha();
$Captcha->getImage(120,40,6);