Chciałem się zabezpieczyć przed spamem (roboty klepia też po www procz maili). Skuteczna metoda to tzw. wizualne potwierdzenie.
Dla wyjasnienia - pojawia się obrazek z ciągiem znaków, ktory trzeba przepisać w odpowiednie pole, wtedy kod wykonuje się dalej, przy błednym wpisaniu (badz pominieciu tego) zapętla się od nowa.
Znalazłem w internecie niby działający skrypt:
Kod PHP:
<?
session_start();
$txt = $_SESSION***91;"kod"***93;;
$x = 85; // szerokość obrazka
$y = 25; // wysokość obrazka
$rozmiarczcionki = 10;
$czcionka = "./bookosb.ttf";
$pochylenie = 5;
// co druga litera duża + spacje między literami
for ($i=0; $i<strlen($txt); $i++) {
if ($i%2==0) $txt***91;$i***93; = strtoupper($txt***91;$i***93;);
else $txt***91;$i***93; = strtolower($txt***91;$i***93;);
}
$txt = trim(preg_replace("/(.{1})/","{while.result} ", $txt));
$wymiary = imagettfbbox($rozmiarczcionki,$pochylenie,$czcionka,$txt);
$szerokosc = $wymiary***91;2***93;-$wymiary***91;0***93;;
$wysokosc = $wymiary***91;1***93;-$wymiary***91;7***93;;
$im = imagecreatetruecolor($x, $y);
imagefill($im, 0,0, imagecolorallocate($im, 255, 128, 128)); // tło
$kolor = imageColorAllocate($im, 0, 0, 0); // czarne litery
imagettftext($im, $rozmiarczcionki, $pochylenie, ($x-$szerokosc)/2,
($y+$wysokosc)/2, $kolor, $czcionka, $txt);
// rozsianie kropek w przypadkowych kolorach i miejscach
srand((double)microtime()*1000000);
for($i=1;$i<100;$i++) {
$kolor = imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255));
imagesetpixel($im, rand(0,$x), rand(0,$y), $kolor);
}
header("Content-type: image/png");
imagepng($im);
imagedestroy($im);
?>
losowanie hasla wyglada tak:
Kod PHP:
srand((double)microtime()*1000000);
for($i=0;$i<5;$i++) {
$znak=chr(rand(48,122));
if (eregi("***91;0-9a-zA-Z***93;",$znak)) $haslo .= $znak;
else $i--;
}
$_SESSION***91;"kod"***93; = $haslo;
weryfikacja hasła:
Kod PHP:
if (strtolower($_POST***91;"weryfikacja"***93;)<>strtolower($_SESSION***91;"kod"***93;)
and isset($_POST***91;"weryfikacja"***93;)) $a++;
Chyba widać coś z tych kawałków
Czcionka bookosb.ttf jest zaraz obok tego pliku w tym samym katalogu.
Po wyświetleniu tego dostaję błąd:
"Fatal error: Call to undefined function: imagettfbbox() in /home/konto/katalog/obrazek.php on line 17"
Taki błąd pojawia się jeśli użyto funkcję, która nie jest zdefiniowana, tylko teraz czy ja jej nie zdefiniowałem czy co ? bo na serwerze biblioteka GD jest zainstalowana i wiem, że działa...
jakies pomysły do tego ? do imagettfbbox() ?