Et stort problem i dag er spam. Den beste måten å bekjempe spam er Captcha. Captcha gjør forskjellen mellom en datamaskin og et menneske. Datamaskiner kan ikke lese teksten i et bilde, og dette er grunnen til at vi kommer til å bruke et bilde også.
La oss begynne med å lage filen captcha.php. Denne filen vil skape et bilde med en tekst skrevet på den
header ('Content-type: image /jpeg.
'); //En jpeg bildet vil bli sendt ut $ width = 60; //Bredde av bildet $ height = 24; //Høyde av bildet $ my_image = imagecreatetruecolor ($ bredde, $ høyde); //Opprett Truecolor bilde imagefill ($ my_image, 0, 0, 0xFFFFFF); //Hvit bakgrunn
Inntil nå har vi klart å skape et bilde som har en hvit bakgrunn, 60 piksler bred og 24 piksler høy.
La oss legge til noen distorsions:
for ($ c = 0; $ c $ x = rand (0, $ bredde-1); $ y = rand (0, $ høyde-1); imagesetpixel ($ my_image , $ x, $ y, 0x000000);}
Vi satt 40 sorte piksler i bildet Disse pikslene vil ha ulike coordonates hver gang et bilde blir lastet
La oss skrive tekst på.. bildet:..
$ x = rand (1,10); //X coordonate av øvre venstre hjørne $ y = rand (1,10); //Y coordonate av øvre venstre hjørne $ rand_string = rand (10000,99999); //Skaff et tall mellom 10 000 og 99 999 imagestring ($ my_image, 5, $ x, $ y, $ rand_string, 0x000000); //Skriv antall oppnådde tidligere på bildet
La oss redde strengen skrevet på bildet i en cookie. Vi vil lese denne cookie gang et skjema sendes til å sammenligne data.
setcookie ("cookie-captcha" (md5 ($ rand_string)) , tid () + 3600, "/"); imagejpeg ($ my_image); //Opprett jpeg bilde imagedestroy ($ my_image); //Slett jpeg bilde
I dette eksemplet cookie navn er cookie -captcha, det er innholdet vil være md5 kodet verdi av tilfeldig streng oppnådd tidligere (tallet skrevet i bildet), vil det være gyldig i en time på hele ditt domene.
Bildet er slettet (imagedestroy ) for å spare plass på serveren
Den komplette captcha.php filen vil være:
header ('Content-type: image /jpeg.
'); $ width = 60; $ height = 24; $ my_image = imagecreatetruecolor ($ bredde, $ høyde); imagefill ($ my_image, 0, 0, 0xFFFFFF); for ($ c = 0; $ c $ x = rand (0, $ bredde-1); $ y = rand (0, $ høyde-1); imagesetpixel ($ my_image, $ x, $ y, 0x000000);} $ x = rand (1,10); $ y = rand (1,10); $ rand_string = rand (10000,99999); imagestring ($ my_image, 5, $ x, $ y, $ rand_string, 0x000000); setcookie ("cookie-captcha" (md5 ($ rand_string)), tid () + 3600, "/"); imagejpeg ($ my_image); imagedestroy ($ my_image);?>