lucaswxp 22 Denunciar post Postado Abril 19, 2009 Hoje ensinarei, ou pelo menos tentarei =] a criar um sistema de captcha =D Caso você não saiba, captcha (Completely Automated Public Turing test to tell Computers and Humans Apart) são aquelas letrinhas e numero que você deve digitar se 'apoiando' em uma imagem para efetuar alguma ação, como por exemplo: postar um comentario, se cadastrar num forum, se logar etc... etc.. etc.. xD O que faremos será este: http://lucaswxp.22web.net/captcha/index.php O codigo está com comentarios que irá lhe guiar... OBS: Caso você queira mudar o fundo é só alterar o array $c['pathBG'] no arquivo captcha.class.php, seria legal construir uns fundos randomicos =D, bom isso fica com você :P captcha.class.php <?php /* * Script desenvolvido por Lucas Pelegrino * Contato: lucas_wxp@hotmail.com * Não conhece alguma função? http://php.net/ */ class Captcha{ // config public $c = array ( 'pathABSOLUTO' => NULL, 'pathBG' => 'bgs/bg1.gif', 'pathTEMPS' => 'temps_img/', 'pathREG' => 'reg/reg.php', 'pathFONT' => 'font/font1.ttf', 'tempoEXPIRACAO' => 60, 'tempoTOTAL' => NULL, 'pathABSOLUTO' => NULL, 'nomeIMG' => NULL ); public $erro = NULL; public function geraImagem (){ $this->c['tempoTOTAL'] = time() + $this->c['tempoEXPIRACAO']; // Criamos a imagem com a qual iremos trabalhar $imagem = imageCreateFromGif ($this->c['pathBG']); // Criamos o codigo que será inserido na img $string = md5(uniqid(rand())); // Cortamos ele para 4 caracteres $string = substr($string , 0 , 4); // o nome do arquivo que será gravado na pasta temps_img $nomeIMG = substr(sha1($string),0,15); // Caminho absoluto onde a img será gravada $this->c['pathABSOLUTO'] = $this->c['pathTEMPS'] . $nomeIMG . ".gif"; // Iniciamos um sessão e gravamos o $code que aparecerá na img $this->c['nomeIMG'] = $nomeIMG; // Iniciamos uma seção com o codigo que será mostrado na tela para futura validação $_SESSION['string'] = $string; // Cor do texto $preto = imageColorAllocate($imagem , 0 , 0, 0); // Escrevemos a $string na img imagettftext($imagem,25,0,9,26,$preto,$this->c['pathFONT'],$string); // Gravamos a img imagegif($imagem,$this->c['pathABSOLUTO']); // Removemos o espaço alocado imagedestroy($imagem); } public function renova(){ // Aqui transforamos o arquivo que ficará armazenado o tempo em array $dataPHP = file ($this->c['pathREG']); // Contamos o numero de array $countFile = count($dataPHP); // Realizamos um loop for ($i=0;$i<=$countFile;$i++){ // Se $i for igual à 0 ou o ultimo elemento do array, 'pula' para o proximo loop // Isso porque o array com chave 0 é um codigo PHP que nao nos será util aqui, eo o ultimo é uma quebra de linha if ($i == 0 || $i == $countFile) {continue;} // Quebramos uma linha para poder tratar nome de tempo $data = str_replace (' ','',explode('|' , $dataPHP[$i])); // Se o tempo do arquivo for menor que o tempo atual deleta-o da pasta temps_img e retira a linha do arquivo $pathArquivo if ($data[1] < time()){ unset($dataPHP[$i]); unlink($this->c['pathTEMPS'] . $data[0] . '.gif'); } } // Montamos o novo arquivo com as linhas ja alteradas file_put_contents($this->c['pathREG'] , $dataPHP); } public function registra(){ // Registramos um novo arquivo $dataPHP = fopen($this->c['pathREG'] , 'a'); fwrite($dataPHP , $this->c['nomeIMG'] . '|' . $this->c['tempoTOTAL'] . ' '); fclose($dataPHP); } public function checa(){ // Checamos se digitou corretamente $string = $_POST['string']; if ($string != $_SESSION['string']){ $this->erro = "O texto digitado não confere com a imagem! Tente novamente."; } else $this->erro = "Parabens, você digitou o texto corretamente!"; } } ?> Neste arquivo ficará armazenado o nome e tempo que a imagem irá expirar: reg/reg.php <?php exit ?> index.php <?php include "captcha.class.php"; $captcha = new Captcha(); session_start(); if (isset($_GET['checar']) && $_GET['checar'] == 1){ $captcha->checa(); } $captcha->geraImagem(); $captcha->renova(); $captcha->registra(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Captcha</title> </head> <div style="text-align: center"> <img src="<?php echo $captcha->c['pathABSOLUTO'] ?>" style="border: 2px solid #000;"> <form action="index.php?checar=1" method="post" /> <input type="text" name="string" maxlength="4" style="width: 80px;text-align: center;" /><br /> <input type="submit" value="Checar" /> </form> <?php echo $captcha->erro ?> </div> <body> </body> </html> Prontinho, como você pode ver é bem simples, só usamos três arquivo =O, as outras pastas como temps_imgs (ficará armazenado as imagens temporarias), font (ficará armazenado a font que usaremos), e bgs (ficará armazenado o fundo que usaremos) só precisão ser alterado algo caso você queira personalizar o sisteminha... Bom, é isso ai, flws o/ PS: titulo errado... correto: anti-"SPAM" nao span, arruma ae modera =D DOWMLOAD DO SCRIPT [AQUI] Compartilhar este post Link para o post Compartilhar em outros sites
Rispiridon 3 Denunciar post Postado Abril 21, 2009 eu sempre kis saber como se faz *__* Compartilhar este post Link para o post Compartilhar em outros sites
Rispiridon 3 Denunciar post Postado Abril 21, 2009 esses erros tem aver com o q ? Warning: imagecreatefromgif(bgs/bg1.gif) [function.imagecreatefromgif]: failed to open stream: No such file or directory in C:\Arquivos de programas\EasyPHP 3.0\www\laboratorio\captcha\captcha.class.php on line 24 Warning: imagecolorallocate(): supplied argument is not a valid Image resource in C:\Arquivos de programas\EasyPHP 3.0\www\laboratorio\captcha\captcha.class.php on line 38 Warning: imagettftext() expects parameter 1 to be resource, boolean given in C:\Arquivos de programas\EasyPHP 3.0\www\laboratorio\captcha\captcha.class.php on line 40 Warning: imagegif(): supplied argument is not a valid Image resource in C:\Arquivos de programas\EasyPHP 3.0\www\laboratorio\captcha\captcha.class.php on line 42 Warning: imagedestroy(): supplied argument is not a valid Image resource in C:\Arquivos de programas\EasyPHP 3.0\www\laboratorio\captcha\captcha.class.php on line 44 Warning: file(reg/reg.php) [function.file]: failed to open stream: No such file or directory in C:\Arquivos de programas\EasyPHP 3.0\www\laboratorio\captcha\captcha.class.php on line 48 Warning: file_put_contents(reg/reg.php) [function.file-put-contents]: failed to open stream: No such file or directory in C:\Arquivos de programas\EasyPHP 3.0\www\laboratorio\captcha\captcha.class.php on line 67 Warning: fopen(reg/reg.php) [function.fopen]: failed to open stream: No such file or directory in C:\Arquivos de programas\EasyPHP 3.0\www\laboratorio\captcha\captcha.class.php on line 72 Warning: fwrite(): supplied argument is not a valid stream resource in C:\Arquivos de programas\EasyPHP 3.0\www\laboratorio\captcha\captcha.class.php on line 74 Warning: fclose(): supplied argument is not a valid stream resource in C:\Arquivos de programas\EasyPHP 3.0\www\laboratorio\captcha\captcha.class.php on line 75 Compartilhar este post Link para o post Compartilhar em outros sites
lucaswxp 22 Denunciar post Postado Abril 21, 2009 Se você só copio e colou o script nao vai dar certo mesmo http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif é que eu esqueci de postar ele para download.... DOWMLOAD DO SCRIPT [AQUI] Testa ae agora e ve se funfo Compartilhar este post Link para o post Compartilhar em outros sites
Rispiridon 3 Denunciar post Postado Abril 22, 2009 agora sim xD funfo funfando... ja tava estudando as funções mto bom msm ampliando os horizontes Compartilhar este post Link para o post Compartilhar em outros sites
lucaswxp 22 Denunciar post Postado Abril 22, 2009 hehe È o que eu sempre digo: Vivendo e aprendendo tiu xD Compartilhar este post Link para o post Compartilhar em outros sites
Mcliano 0 Denunciar post Postado Junho 14, 2009 Funcionou perfeitamente, e com certeza, será muito útil. Obrigado Lucaswxp Compartilhar este post Link para o post Compartilhar em outros sites
DimmyKx 0 Denunciar post Postado Junho 6, 2010 Bem Complicado, prefiro usar: ReCaptcha http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Compartilhar este post Link para o post Compartilhar em outros sites