PHP ile adım adım güvenlik için captcha yapımı(turkish tutorial)

in #utopian-io7 years ago (edited)

English
Hello to everyone my name is eresbos,

  • How to create step to step captcha with PHP?

Türkçe

Merhaba arkadaşlar ben eresbos.Bugün sizlere php ile gd kütüphanesini kullanarak adım adım güvenlik için captcha nasıl oluşturabiliriz ve ram'de yer kaplamaması için image destroy ile ram'den nasıl silinir konusunu anlatacağım.

Kodlarımız ;
1.png

<?php

header('Content-type:image/png');
$resim = ImageCreate (100, 50);

$arkaplan = ImageColorAllocate($resim, rand(0,125), rand(0,125), rand(0,125));
$yazi_rengi = ImageColorAllocate ($resim, rand(125, 255), rand(125, 255), rand(125, 255));

ImageFill($resim, 0, 0, $arkaplan);

$kod = rand(0, 999999);

ImageString ($resim, 5, 20, 15, $kod, $yazi_rengi);


ImagePng ($resim);

ImageDeetroy($resim);


?>

1- Değişkenlerimizi tanımlayalım, kullanacağımız ilk fonksiyon ImageCreate olacak, genişlik ve yüksekliği ayarlamak için iki adet değer belirteceğiz.İlk değerimiz genişlik (100) ikinci değerimiz yükseklik olacak (50).Bu satır bizim tuvalimiz olacak captchayı bu tuvalin üzerinde göstereceğiz.
$resim değişkeni.png

$resim = ImageCreate (100, 50);

2- Arka plan rengimizi tanımlayalım, bunun için ImageColorAllocate fonksiyonunu kullanacağız daha sonra resim değişkenini belirteceğiz($resim).Rengini belirleyeceğiz bunun için üç farklı rgb değeri girmemiz gerekiyor.Ben her yenilenme işleminde farklı renk olsun diye random değer belirledim rand(0,125).
$arka plan değişkeni.png

$arkaplan = ImageColorAllocate($resim, rand(0,125), rand(0,125), rand(0,125));

3- Yazı rengimizi tanımlayalım, bunun için ImageColorAllocate fonsiyonunu kullanacağız.Burada tuvalimizi belirtmek için $resim değişkenini kullanıyoruz.Her captcha'da farklı bir sayı vermesi için üç farklı değer belirteceğiz.Captcha'nın okunabilmesi için rand(125, 255) şeklinde değer belirtmemiz gerekecek eğer yukarıdakiyle aynı değeri yazarsak rand(0,125) captcha'da yazı ve tuvalin renginin aynı olup okunamama gibi bir durumu olabilir.
$yazi_rengi değişkeni.png

$yazi_rengi = ImageColorAllocate ($resim, rand(125, 255), rand(125, 255), rand(125, 255));

4- Arka planımızı oluşturduk, arka plan rengimizi oluşturduk ve yazı rengimizi oluşturduk.Şimdi sıra tuvalimize renk atamaya geldi.Bunun için ImageFill fonsiyonunu kullanacağız.Tuvalimizi belirtmek için $resim değişkenini yazıyoruz, $resim değişkeninin hangi kordinatlardan başlayarak rengi atayacağımızı $resim, 0, 0, olarak belirliyoruz.Sıra geldi hangi rendi atayacağımızı belirlemeye.Bunun için $arkaplan değişkenini kullanıyoruz.
imagefill.png

ImageFill($resim, 0, 0, $arkaplan);

5- Yazımızın iki sayı arasında ekrana basılması için $kod değişkenimizi kullanacağız.Sayının iki değer arasında random belirlenmesi için rand(0, 999999) kodunu yazıyoruz.
$kod değişkeni.png

$kod = rand(0, 999999);

6- Resmin üzerinde hangi yazının çıkmasını belirlemek için ImageString fonsiyonunu kullanacağız.Sonra tuvalimizi $resim değişkeni olarak belirtiyoruz.Yazı tipi değerini atamak için sayısal değer kullanıyoruz (5) ve yükseklik değerlerimizi belirtiyoruz (20,15).Resmin üzerinde yazacak olan yazıyı belirlemek için $kod değişkenini kullanıyoruz.Yazının rengini belirtmek için $yazi_rengi değişkenimizi kullanıyoruz.
imagestring.png

ImageString ($resim, 5, 20, 15, $kod, $yazi_rengi);

7- Sonucu ekrana bastırmak için ImagePng fonksiyonunu kullanacağız.Burada sadece tuval olarak belirlediğimiz $resim değişkenini kullanmamız yeterli.Bu şekilde resmi ram'e almış olduk.
imagepng.png

ImagePng ($resim);

8- Resmimizin ram'de yer kaplamaması için gösterdikten sonra ImageDestroy ile ram'den resmi siliyoruz.
imagedestroy.png

ImageDestroy($resim);

9- Son olarak şu anki haliyle sayfada göstermeye çalışırsak hata verecektir çünkü sayfayı resim olarak tanıtmamız gerekiyor bunun içinde header komutunu kullanacağız.

header('Content-type:image/png');

  • Sonuç ekranları;

1.png
3.png
2.png
4.png

Github link : https://github.com/php/php-src



Posted on Utopian.io - Rewarding Open Source Contributors

Sort:  

Hey @eresbos I am @utopian-io. I have just upvoted you!

Achievements

  • You have less than 500 followers. Just gave you a gift to help you succeed!
  • Seems like you contribute quite often. AMAZING!

Suggestions

  • Contribute more often to get higher and higher rewards. I wish to see you often!
  • Work on your followers to increase the votes/rewards. I follow what humans do and my vote is mainly based on that. Good luck!

Get Noticed!

  • Did you know project owners can manually vote with their own voting power or by voting power delegated to their projects? Ask the project owner to review your contributions!

Community-Driven Witness!

I am the first and only Steem Community-Driven Witness. Participate on Discord. Lets GROW TOGETHER!

mooncryption-utopian-witness-gif

Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x

Thank you for the contribution. It has been approved.

You can contact us on Discord.
[utopian-moderator]