Bugün: 07/10/2008. Hoşgeldiniz!

Nisan, 2008

Php - 2 Boyutlu Dizi Transpozu (scripti, nasıl, nedir?)

Yazan: admin Tarih: Nisan - 15 - 2008

$a1=array(1,2,3);
$a2=array(4,5,6);
$a3=array(7,8,9);

$array = array(
$a1,
$a2,
$a3,
);

echo "<pre>";
print_r($array);

echo "
______________MY FUNCTIONS______________
";
$n=transpoze($array);
print_r($n);

echo "
______________ARRAY MAP______________
";
$d=array_map(null,$a1,$a2,$a3);
print_r($d);

echo "</pre>";

/**
* transpozes matrix with 2 dimesion
*
* @param byval array
* @return array transpoze of array
*/
function transpoze($array)
{
$column=count($array);
for ($i=0;$i<$column ;$i++ ) {
$row=count($array[0]);
for ($j=0;$j<$row ;$j++ ) {
$new[$j][$i]=$array[$i][$j];
}

}
return $new;
} // end func

kaynak: ordan burdan

Bu makalemizin konusu PHP ile dinamik olarak grafikler oluşturmak.Ama konuya başlamadan önce grafikler üretirken kullanacağımız kütüphaneyi GD kütüphanesini biraz inceleyelim.

GD kütüphanesi başta PHP,Perl,Tcl ve C/C++ olmak üzere birçok programlama dilini destekler.Grafik formatı olarak ise Jpeg(Joint Photographic Experts Group),Png(Portatable Network Graphics) ,Wbmp(Wireless Bitmap) formatlarını destekler.Gif(Graphics Interface Format) formatından ise Lisanslarından dolayı(Gif formatı UNISYS'nin LZW sıkıştırma algoritmasını kullanır. Gif formatında resimler üretebilen programlar LZW Lisansı almak zorundadır) sürüm 1.3'ten itibaren desteğini çekmiştir.Gif yerine daha az yer kaplayan ama animasyon desteği olmayan PNG geçmiştir.GD kütüphanesinin ne olduğunu öğrendiğimize göre nasıl kuracağımızı ve temel fonksiyonlarını öğrenebiliriz.

Aslında GD kütüphanesi PHP 4.0'dan itibaren PHP ile birlikte gelir.Fakat etkinleştirilmemiştir.Benim bilgisayarımda kurulu olan PHP 4.3.3 versiyonuyla birlikte GD 2.0.15 gelmektedir.Şimdi PHP eklentilerini nasıl kuracağımıza bakalım.

Eklentinin DLL dosyasını e:phpextension(PHP'yi E:php klasörüne açtığınızı varsayarak) klasörüne kopyalarız.
php.ini dosyasını herhangi bir metin editörüyle açıp(Windows'unuzun kurulu olduğu dizine bakın) extension_dir satırını bulup önündeki "./" yazısını silip "e:/php/extensions" yazın.
;extension=php_bz2.dll ile başlayan satırı bulup etkinleştireceğimiz eklentinin önündeki ';' işaretini kaldırın.(GD için extension=php_gd2.dll)
Web Sunucunuzu yeniden başlatın
Şimdi GD eklentisi çalışıyor mu bir bakalım.Notepad'i açalım ve <? Phpinfo(); ?> yazıp sunucu dizinimize test.php adıyla kaydedelim.Test.php sayfasını açtığımızda yüklü modüllerin arasında GD'yi görüyorsak işlem başarıyla tamamlanmış demektir

Resim oluşturmak için elimizde iki seçenek vardır

Sıfırdan bir grafik üretmek
Varolan bir grafiği şablon olarak kullanıp üzerine eklemeler yapmak
Şimdi 1. seçenek için en basit örneğimiz olan prizma efektini yapalım

<?
$en= 500;//Genişliği Ayarlıyoruz
$boy = 500;//Yüksekliği Ayarlıyoruz
$resim = imagecreate($en, $boy);//Resmimizi Oluştur
$yesil = imagecolorAllocate ($resim, 25, 215, 155);//Yeşil Rengi oluşturuyoruz
$siyah = imagecolorAllocate ($resim, 0, 0, 0);//Siyah Rengi oluşturuyoruz

imagefill($resim, 0, 0, $siyah);//Resmimizin Arka Planını boyuyoruz
for ($say=20;$say<=500;$say+=20)
{
imageline($resim, 0, 0, $boy, $say, $yesil);//Yeşil çizgimizi çiziyoruz
imageline($resim, 0, 0, $say, $en, $yesil);//Yeşil çizgimizi çiziyoruz
}
Header ("Content-type: image/png");//Üretilecek grafiğin png formatında oluşturmak için önbilgi veriyoruz
imagepng ($resim);//png formatında grafiği oluşturuyoruz
imagedestroy($resim);//Oluşturduğumuz resmi hafızadan siliyoruz
?>

Bu basit efekt için kullandığımız fonksiyonlara bir bakalım

imagecreate($en,$boy):Resmimizi oluşturduğumuz değişkenlerden anlayacağınız üzere grafiğimizin yüksekliğini ve genişliğini belirttik
imagecolorAllocate ($resim,$kirmizi,$yesil,$mavi):Resmimizde kullanacağımız renkleri ayarlıyoruz.Burda rengimizi ayarlamak için 3 temel rengin RGB değerlerini kullanarak tonlama yapıyoruz.

imagefill($resim, x, y, $renk):Resmimizdeki belirli bir bölümü boyamak için kullanıyoruz.Burdaki x ve y boyamaya başlayacağımız bölümün yerlerini $renk ise kullanacağımız rengi belirtir.

imageline($resim,$x1,$y1,$x2,$y2,$renk):Resmimize çizdiğimiz çizginin başlangıç($x1,y1),bitiş(x2,y2) ve rengini tanımlarız($renk).

Header("Content-type: image/png"):Resmimizin formatını tanımlıyoruz.Png yerine yazının başında bahsettiğim grafik türlerinden birini seçebilirsiniz.

imagepng($resim):Resmimizi tarayıcıda görüntülüyoruz.Diğer formatlar için imagejpeg gibi bir fonksiyon kullanabilirsiniz.Eğer oluşan grafiği kaydetmek isterseniz imagepng($resim,"resmim.png") gibi bir kod kullanabilirsiniz

imagedestroy($resim):Resmi ürettikten sonra hafızadan siliyoruz.

Resim üzerine çizgiler çizmeyi öğrendik.Peki düğme hazırlamak için üzerine nasıl yazı yazabiliriz.Basit bir örnek olarak üzerinde mutasyon.net yazan bir düğme yapalım

<?
$resim = imagecreate(120, 50);
$kirmizi = imageColorAllocate ($resim, 255, 0, 0);
$beyaz = imageColorAllocate ($resim, 255, 255, 255);
ImageFill($resim, 250, 250, $kirmizi);
imagestring($resim,4,10,15,"mutasyon.net",$beyaz);//Resmimize yazımızı ekliyoruz
Header ("Content-type: image/png");
ImagePng ($resim);
ImageDestroy($resim);
?>
Önceki örnekten farklı olarak burada imagestring fonksiyonunu kullandık.Bu fonksiyonu imagestring($resim,$yazi_boyutu,$x,$y,$renk) şeklinde kullanırız.

Şimdi 2. Seçeneğimiz olan varolan bir grafiği şablon olarak kullanıp üzerine eklemeler yapmayı öğrenelim.Ama ilk önce kendimize şablon olarak 100×100 pixel boyutlarında bir grafik hazırlayalım ve png formatında deneme ismiyle kaydedelim.(Eğer herhangi bir resim işleme programınız yoksa yukardaki örneği kaydedebilirsiniz)

<?
$resim=imagecreatefrompng("deneme.png");//Deneme.png resmini alıyoruz
$rboy=imagesx($resim);//Resmimizin boyunu ölçüyoruz
$ren=imagesy($resim);//Resmimizin enini ölçüyoruz
$siyah=imagecolorallocate($resim,0,0,0);//Siyah rengi ekliyoruz
imagestring($resim,5,10,45,'Sychorax',$white);//Resmimize Yazımızı Ekliyoruz
header("Content-type: image/png");//Resmin Png formatında olacağını belirtiyoruz
imagepng($resim);//Resmi tarayıcıya gönderiyoruz
imagedestroy($resim);//Resmimizi hafızadan siliyoruz
?>;

Burada farklı olarak 3 tane fonksiyon kullandık.Bunlar

imagecreatefrompng("deneme.png"):Şablonumuzun deneme.png olacağını belirttik.
imagesx($resim):Kullandığımız resmin boyunu ölçtük.
imagexy($resim):Kullandığımız resmin enini ölçtük.
GD Kütüphanesi ile ürettiğimiz resimleri img etiketinde tanımlayıp kullanabiliriz

Örneğin <img src=button.php> Gibi bir ifade kullanabiliriz

kaynak: ordan burdan

<?php
//php_pdf library desteğini kotrol edecek fonksiyon
function kaynak_ara($aranan) {
if (get_extension_funcs ("$aranan") == true) {
return true;
}
else {
return false;
}
}

if(kaynak_ara(pdf) == false) {
die ("Malesef Sunucunuzda pdf desteği yok..!");
}
//fonksiyona pdf desteğini sorduk
//bu farklı kütüphaneler içinde olabilir
//örnek:
//kaynak_ara(gd);

header( "Content-type: application/pdf" );
$f = fopen("deneme.pdf", "w");
//pdf dosyasını yazma amaçlı aç
$pdf = PDF_open($f);
PDF_set_info_author($pdf, "Savas TURK");
//Yazar ismi
PDF_set_info_title($pdf, "PDF document prova");
//Döküman başlığı
PDF_set_info_creator($pdf, "See Author");
PDF_set_info_subject($pdf, "PDF Denemesi");
//Döküman Konusu
PDF_begin_page($pdf, 595, 842);
//Sayfa boyutları genişlik, yükseklik
PDF_add_outline($pdf, "Item".$data[1]);
PDF_set_font($pdf, "Helvetica-Bold" , 20, winansi);
//Yazı stili
PDF_set_text_rendering($pdf, 0);
PDF_show_xy($pdf, "OMG Selam NASILSIN",50,780);
if (!isset($name)) {
$name = "Test isim";
}
if (!isset($age)) {
$age = "Test soyisim";
}
//eklenecek değişkenler
//bir form sayfası ile alınabilir
PDF_show_xy($pdf, "isminiz : $name" .$data[1], 100, 700); //Yazı ve konumu

PDF_show_xy($pdf, "Soy isminiz : $age" .$data[2], 100, 620);
//buraya benzer satırlar ekleyebilirsiniz

PDF_end_page($pdf);
//sayfa son
PDF_close($pdf);
fclose($f);
//dosyayı kapat

//Dosyayı yeniden şekillendirdik
//Aşşağıdaki bölüm ise Sayfaya döküyor.
header("Content-length: " . filesize("deneme.pdf"));
$f = fopen("deneme.pdf", "r");
fpassthru($f);
fclose($f);
?>

kaynak: ordan burdan

Php - Hesap Makinesi (scripti, nasıl, nedir?)

Yazan: admin Tarih: Nisan - 15 - 2008

<?php

// Ilk sayi

$sayi1 = (double)$_REQUEST['sayi1'];

// Matematiksel Islem

$islem = $_REQUEST['islem'];

// Ikinci Sayi

$sayi2 = (double)$_REQUEST['sayi2'];

// Ileriye donuk bir parametre, hesap makinesine islemi yapmasini

// ve sonucu ekrana yazdirmasini bildiriyor…

$komut = $_REQUEST['komut'];

// Formu,programin kendisi uzerine GET ile gonderiyoruz.

// Formda gizli bir 'komut' alani var degeri 'islemi_uygula'

// Boylece program islemi yapmasi gerektigini anliyor,

$ben = $PHP_SELF;

if ($komut == 'islemi_uygula') {

if ($islem == '+') {

$sonuc = (double)($sayi1 + $sayi2);

}

if ($islem == '-') {

$sonuc = (double)($sayi1 - $sayi2);

}

if ($islem == '*') {

$sonuc = (double)($sayi1 * $sayi2);

}

if ($islem == '/') {

if (0 != $sayi2){

$sonuc = (double)($sayi1 / $sayi2);

} else {

echo "<br>Bolunen sayi sifir olamaz!";

}

}

if ($islem == 'kalan') {

$sonuc = (double)($sayi1 % $sayi2);

}

}

?>

<html>

<body>

<?php

// Sonuc diye bir degisken varsa ekranda goster yoksa bos gec

if (isset($sonuc)) { echo "Sonuc:".$sonuc; }

?>

<BR>

<!– Formu Goster –>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="GET">

<input type="hidden" name="komut" value="islemi_uygula">

SAYI1:

<input type="text" name="sayi1">

ISLEM:

<SELECT name="islem">

<option value="+" selected="true">+</option>

<option value="-">-</option>

<option value="*">x</option>

<option value="/">/</option>

<option value="kalan">kalan (%)</option>

</select>

SAYI2:

<input type="text" name="sayi2">

<input type="submit" value="Islemi Gerceklestir">

</form>

</body>

</html>

kaynak: ordan burdan

Php - çarpım Tablosu (scripti, nasıl, nedir?)

Yazan: admin Tarih: Nisan - 15 - 2008

<?php

$i=1;

for ($i=1;$i<10;$i++) {

$j=1;

for ($j=1;$j<10;$j++) {

$t = $k[$j] = $i * $j;

echo "$i X $j = ".$t;

echo "<br>";

if (!($j<9)) {

echo "——-";

echo "<br>";

print "Toplam :". (array_sum($k))."<br>";

echo "——-";

echo "<br>";

}

}

}

?>

kaynak: ordan burdan

Php - Ksort () (scripti, nasıl, nedir?)

Yazan: admin Tarih: Nisan - 15 - 2008

Karekter dizisi kullanilarak yaratilmis diziler icin,"indexleri" kullanarak alfabetik olarak siralama yapar,

$EyaletBaskenti = array ("ga" => "Atlanta","il" => "Springfield","ca" => "Sacramento",
"wy" => "Cheyene");
ksort ($EyaletBaskenti);

kodumuzun sonunda dizimiz su sekilde siralanacaktir,

$EyaletBaskenti["ca"]= "Sacramento";
$EyaletBaskenti["ga"]= "Atlanta";
$EyaletBaskenti["il"]= "Springfield";
$EyaletBaskenti["wy"]= "Cheyene";

kaynak: ordan burdan

Bu iki fonksiyonda amac olarak sort () ve asort () fonksiyonlarina benzerdir.Tek farki dizi elementlerinin iceriklerini alfabenin tersi yonunde siralamalaridir.

$Yonetmen = array ("Orson Welles","Carol Reed","Fritz Lang","Jacques Tourner");
rsort ($Yonetmen);

ve ayni sekilde kareketer kullanilarak yaratilmis diziler icinde ,

$EyaletBaskenti = array ("ga" => "Atlanta","il" => "Springfield","ca" => "Sacramento",
"wy" => "Cheyene");
arsort ($EyaletBaskenti);

Ciktilari icin ornek vermek istemiyorum herhalde buaraya kadar olan bolumu okuduysaniz anlamissinizdir.

kaynak: ordan burdan

Php - Asort () (scripti, nasıl, nedir?)

Yazan: admin Tarih: Nisan - 15 - 2008

Karekterler ile indexlenmis dizileri elementlerinin iceriklerine gore siralamak icin kullanilir.Sunu sorabilirsiniz sort () fonksiyonuda ayni isi yapiyordu?Cevap icin asagidaki kod orneklerine ve aciklamalara bakin.

Simdi eyaletler dizimizi ele alalim,

$EyaletBaskenti = array ("ga" => "Atlanta","il" => "Springfield","ca" => "Sacramento",
"wy" => "Cheyene");

Dizimiz boyle bir kodun ardindan dogal olarak asagidaki gibi yaratilacaktir

$EyaletBaskenti["ga"]= "Atlanta";
$EyaletBaskenti["il"]= "Springfield";
$EyaletBaskenti["ca"]= "Sacramento";
$EyaletBaskenti["wy"]= "Cheyene";

eger sort () kullanarak siralamis olsaydik son durum soyle olacakti,

$EyaletBaskenti[0]= "Atlanta";
$EyaletBaskenti[1]= "Cheyene";
$EyaletBaskenti[2]= "Sacramento";
$EyaletBaskenti[3]= "Springfield";

diger bir deyisle harfler kullanarak indexledigimiz dizimizde,bu harfler numaralarla degistirilecekti.Bunu engellemek icin mutlaka asort () kullanilmalidir,

asort ($EyaletBaskenti);

komutunu verdikten sonra artik dizimiz asagidaki sekilde siralanacaktir.

$EyaletBaskenti["ga"]= "Atlanta";
$EyaletBaskenti["wy"]= "Cheyene";
$EyaletBaskenti["ca"]= "Sacramento";
$EyaletBaskenti["il"]= "Springfield";

ekranda siralamanin nasil degistgini gormek icin tabii ki list () ve each () fonksiyonlarini "while" dongusu ile su sekilde kullanabilirsiniz,

while (list($EyaletKisaltmasi,$EyaletIsmi) = each ($EyaletBaskenti))
{
echo "<BR>$EyaletKisaltmasi - $EyaletIsmi";
}

kaynak: ordan burdan

Php - Sort () (scripti, nasıl, nedir?)

Yazan: admin Tarih: Nisan - 15 - 2008

En temel siralama fonksiyonudur. Dizinin icerisindeki elementleri iceriklerine gore alfabetik olarak siralar.Argument olarak siralanacak dizi isminin verilmesi yeterlidir.

sort (DizininAdi)

Ornek vermek istersek ,

$Yonetmen = array ("Orson Welles","Carol Reed","Fritz Lang","Jacques Tourner");

Yonetmenlerimizin isimlerinin yer aldigi boyle bir diziyi siralamak istersek,

sort ($Yonetmen);

yazmamiz yeterli olacakti.

Bu islemin sonucunu ekranda gormek icin yine list () ve each () fonksiyonlarini kullanabiliriz.

$Yonetmen[0]= "Orson Welles"
$Yonetmen[1]= "Carol Reed"
$Yonetmen[2]= "Fritz Lang"
$Yonetmen[3]= "Jacques Tourner"

siralamadan sonra ,

$Yonetmen[0]= "Carol Reed"
$Yonetmen[1]= "Fritz Lang"
$Yonetmen[2]= "Jacques Tourner"
$Yonetmen[3]= "Orson Welles"

olacaktir.

kaynak: ordan burdan

Php - Next () Ve Prev () (scripti, nasıl, nedir?)

Yazan: admin Tarih: Nisan - 15 - 2008

Diziye eklenen yeni elemanlarin index degerini bulmak icin next () ve prev () fonksiyonlarini kullanabilirsiniz.Bu fonksiyonlar dizi boyunca elementler arasinda dolasmanizi saglarlar.(These functions allow you to navigate through arrays,by moving the pointer to the next or previous element in the array).Bu iki fonksiyonda,argument olarak dizi ismini alirlar.Yani hangi fonksiyonun elementleri arasinda gezinmek istiyorsaniz fonksiyonu,o dizinin adini vererek kullanmalisiniz.

Simdi bir onceki konuda yarattigimiz diziyi ele alalim ve bu fonksiyonlari uygulamali olarak gorelim,

$Yonetmen[4]="Yilmaz Guney";
$Yonetmen[1]="Clint Eastwood";
$Yonetmen[93]="Steven Spielberg";
$Yonetmen[24]="Al Pacino";
$Yonetmen[] = "Mel Gibson";

next () fonksiyonunu, current elementimizin,

Asagida YORUM ile belirtilmis yerlerin tamami yazara aittir ve dogrulugu konusunda garanti verilemez.Yanlizca konunun daha iyi anlasilmasi icin okuyabilirsiniz.Eger olayi anladiysaniz yaziya kaldiginiz yerden yorumlari okumadan devam ediniz.

—>YORUM : (yani yukaridaki dizide gordugunuz gibi dizinin ilk elementi.Bu ilk element 4 numarasiyla indexlenmis ve icerigi de Yilmaz Guney.Simdi dizideki islemleri gozunuzun onunde canlandirmak isterseniz bir kaset calar dusunun o sirada calmaya hazir sarki tabii ki kasedin ilk sarkisidir.Eger biz kasedi kullanir ve birinci sarkiyi dinlersek artik bir sonraki sarki calmaya hazirdir degilmi.Iste burada bahsedilen current element bizim o nda kullanilmaya hazir olan dizi elementimizdir. Guzel bir yaklasim simdi aklima geldigi icin yaziyorum.Biraz olsun sizi current'dan next'ten kurtarip olayi anlatabildiysem ne alaaa anlamadiysaniz lutfen mail atin )

ne oldugunu kontrol etmeden kullanalim ve sonuca bakalim,

—>YORUM : (dizi su anda hic kullanilmadigi icin ilk sarkimiz calmaya hazir.Yani dizinin ilk elementi current element.Eger bir dongu icerisinde islem gerceklistiriyor olsaydik ve dizinin elemanlari birer birer kullaniliyor olsaydi,islemin belirli asamlarinda dizinin hangi index numarali elementi current olacakti veya gercekten o asamada sizin istediginiz element mi kullaniliyor.Tum bu islemler icin dogal olarak iste burada verilen komutlari kullaniyoruz.)

next ($Yonetmen);
$IndexDegeri = key($Yonetmen);
echo ($IndexDegeri);

Bu kucuk programimizin ciktisi "1" olacaktir.Cunku next fonksiyonu cagrilmadan once current elementin index degeri "4" tu.Yani dizinin ilk elemaniydi.Biz next ($Yonetmen); diyerek dizi icerisindeki bir sonraki elementi kullanima hazir hale getirdik.Sonrasinda $IndexDegeri degiskeni icerisnde key($Yonetmen) fonksiyonu ile verdigimiz degerin saklanmasini sagladik.echo ($IndexDegeri) komutu ile de ekrana yazdirdik.

next ($Yonetmen);
next ($Yonetmen);
next ($Yonetmen);
next ($Yonetmen);
$IndexDegeri = key($Yonetmen);
echo ($IndexDegeri);

Gordugunuz gibi fonksiyonu uc defa daha kullandim simdi artik echo komutu ile ekrandan alacagimiz cikti "94" olacaktir.Eger bu index numarali elemnetin icerigini ekranda yazdirmak isteseydik,

$GecerliIcerik = current ($Yonetmen);
echo ($GecerliIcerik);

"Mel Gibson" ciktisini alacaktik.

prev () fonksiyonun kullanimida tamamen yukaridaki ile aynidir.Bu fonksiyonla dizi icerindeki elementler arasinda "geriye" dogru gezinmemizi sagliyoruz.

next ($Yonetmen);
next ($Yonetmen);
next ($Yonetmen);
next ($Yonetmen);
prev ($Yonetmen);
$IndexDegeri = key($Yonetmen);
echo ($IndexDegeri);

Kod grubunun ciktisi "24" olacaktir.Dizi icerisinde once dort element ileriye dogru gidip o elementin "current" olmasini sagladik.Sonra prev ($Yonetmen); satiri ile dizi icerisinde bir element geriye gittik.Diger satirlarda ise iste o elementin "index" degerini ekrana yazdirdik.

Simdi burada bir konuyu belirtelim.Eger dizimiz icerisnde mesela ikinci "next" satirinda dizimizin sonuna gelmis olsaydik ne olacakti.Ondan sonraki kodlar hata uyarisi verecekmiydi?Bu sorunun cevabi kesinlikle HAYIR'dir.Boyle bir durumda hic bir sey olmayacakti.Kodumuz hic bir hata vermeyecegi gibi hic bir degerde dondurmeyecekti.Yeterince centilmence degilmi :)

Baska programlama dillerinde bu durumdaki bir program mutlak hata dondurur.PHP ile calismak icin iste size bir baska neden.Gercekten de mukkemmel bir programlama dili.

prev ($Yonetmen);
next ($Yonetmen);
next ($Yonetmen);
$IndexDegeri = key($Yonetmen);
echo ($IndexDegeri);

Kod grubuda ayni sekilde hata dondurmeyecektir.Gordugunuz gibi daha dizinin basinda dizideki elementi bir geriye almak istedik.

kaynak: ordan burdan