PHP- Notlar ve Dersler

Frank Woods

Tecrübeli Üye
Konu Sahibi
Katılım
2 Nisan 2011
Mesajlar
8,075
Reaksiyon puanı
20
Puanı
259
Konum
Ankara
Bu başlık altında PHP konusunda bir takım makalelerimi ve notlarımı yayınlayacağım. Bunu yaparken, başlangıç seviyesindeki bir kullanıcınında faydalanabilmesi en basitinden başlayayım istiyorum. Bu sebeple basit konulardan başlamayı tercih ettim.

Makaleler ile ilgili sorularınızı buradan sorabilirsiniz, diğer phpBB vs. gibi abik gubik scriptler hakkındaki sorularınızı bu başlığa sokmazsanız sevineceğim. Ayrıca makalelerde yer alan şeyler haricinde de yeni başlık açıp sorunuzu ayrı bir başık altında tutarsanız sevirinim.

Ara sıra makalelere ara verebilirim, nihayetinde okulum sınavlarım ve sorumluluklarım var
smile.gif
Tüm zamanımı burada geçirecek halimde yok
wink.gif
Boş vakitlerimde yazıp yollayacağım. Şunu da belirteyim bu işin ne ustası ne de profesyoneli olduğumu iddia ediyorum, amacım sadece yardımcı olabilmek.

Şu ana kadar yazılan ders ve notların listesi:
PHP Programlama Dilinde Değişkenler ve Kullanımları // Yeni başlayanlar

Her programlama dilinin yapıtaşları olan değişkenler PHP dilinde de temel olarak kabul edilebilir. Değişkenler her an, her yerde kullanılabileceğinden, değişkenleri bilmeyen bir insan PHP dilinde daima zorlanacaktır. Şimdi kısaca bahsedelim.

PHP dilinde değişkenler "$" (dolar işareti) ile başlar. Hiçbir şekilde rakam ile başlayamaz. Genel olarak değişkenlerin yazım şekilleri şunlardır:


Kod:

$isim = "Birhan";$isim=Birhan;$isim = <<<RESTART<a href="hebelehubele.htm">hebele</a><a href='hebele.htm'>hebele</b>RESTART;

Genel olarak değişkenlerin tanımlanış biçimlerini gördük. Şimdi bunları tek tek inceleyelim:

İlk şekilde gördüğünüz tanımlama, genel olarak kullanılan şekildir. En yaygın şekil budur.

İkinci şekilde gördüğünüz tanımlama genelde rakamlar için kullanılır, bakmayın ben sırayı bozmasın diye isim değişkeni olarak tanımladım fakat genelde rakam ve tek kelimelik içerik içerir.

Üçüncü şekle yeni bir paragrafta değinmek istedim, çünkü bu pek yaygın olmayan fakat her zaman her için aranılan bir yazım türüdür. Bunun sebebini şöyle açıklayayım, Örneğin bir değişken tanımladınız fakat içerisinde tırnak işaret vs. gibi programın çalışmasına engel olacak, hata verdirecek birtakım karakterler var. Bu hatayı engellemek için demin bahsini ettiğim tırnak işareti gibi hata verdirici karakterlerin önüne "\" konulur. Yani;


Kod:

$degiskenadi = "<a href="hebele.htm">hebele</a>";

gibi bir değişken tanımlarsak bunu kullanmaya çalıştığımızda, hatta kullanmasak bile programa hata verdirir. Bunun sebebi tahmin edebileceğiniz gibi, tırnak işareti ile başlayan değişkenin, tırnak işareti ile bitmesini engelleyen ortadaki tırnak işaretleridir. Bu işaretlerden 2. tırnak işareti değişkeni sonlandırıyor, fakat geriye kalan değişken parçasının bağımsız olarak varlığına devam etmesi üzerine program hata veriyor. Bunu engellemek için en basit olarak değişken şu şekilde yazılabilir;


Kod:

$degiskenadi = "<a href=\"hebele.htm\">hebele</a>";

burada görüldüğü gibi değişkenin değerindeki tırnak işaretlerinin önüne "\" getirdik ve onları etkisizleştirdik. Bunları size uzun uzun anlattım, aslında boşuna okudunuz sayılır. Asıl amacım üçüncü şekildeki değişken kullanımının faydalarını yaşatarak anlatmaktı. Bir değişkeni o şekilde tanımlayarak bu gereksiz slash`lerden kurtulabilirsiniz. Hemen az önce verdiğimiz örneği bir de üçüncü şeklimizle deneyelim:


Kod:

$degiskenadi = <<<RESTART<a href="hebele.htm">hebele</a>RESTART;

Yukarıdaki tanımladığımız değişken hata vermeyecektir. Çünkü görüldüğü gibi tırnak ile başlamıyor. Bu bambaşka yazılış şekli ile çok rahat şekilde çalışmalarınızı sürdürebilirsiniz ve gereksiz slash`lerden de kolayca kurtulursunuz.

Bu arada unutmadan, her şeyde olduğu gibi değişkenleri de noktalı virgül yardımı ile sonlandırmayı unutmuyoruz. Yani değişkenin sonundaki, değişkenin bittiğini belirten noktalı virgül olmazsa hata almanız muhtemeldir.

Şimdi değişken tanımlamayı artık öğrendiğimize göre, artık değişkenleri kullanmaya sıra geldi. Hemen küçücük bir örnekle de bunu pekiştirelim;


Kod:

<?php$nick = "RestarT";$isim = "Birhan";echo("$nick`ın gerçek ismi $isim`dir.");?>

Bu kısa programımızın çıktısı: RestarT`ın gerçek ismi Birhan`dır. olacaktır. Şimdi siz büyük ihtimalle düşündünüz ki "e ben oraya değişken tanımlamakla uğraşacağıma direk nick ve ismi yazarım kurtulurum, neden uğraşayım ki?" işte bu yanılgıya düşmeniz en büyük hatanız olur. PHP dili öylesine geniş bir dil ki; değişkenleri siz gerek koşullarda, döngülerde, fonksiyonlarda, vs. her yerde kullanacaksınız. Bu yüzden şimdi neden ben bunları okudum gibi düşüncelere kapılmayın.

Yukarda okuduğunuz metin, size nasıl değişken oluşturacağınızı ve bunları nerede kullanacağını anlattı. Şimdi zaten hazırda var olan ve sabit olan birkaç Apache ve PHP değişkenini tanıyacağız. Bu değişkenleri birçok alanda kullanabileceğinizden emin olabilirsiniz.

Apache değişkenlerinden başlayalım;


Kod:

$REMOTE_ADDR; // Bu değişken web sayfasını gezmekte olan kullanıcının IP numarasını verir. 123.123.123.123 gibi bir çıktı verecektir.$SERVER_ADMIN; // Bu değişken sunucuda admin için verilen değeri içerir. admin@localhost gibi bir çıktı verecektir.$SERVER_PORT; // Bu değişken sunucunun kullandığı port`u verir. Genelde 80`dir.$SERVER_SIGNATURE; // Bu değişken sunucu sürümü, ismi gibi bilgiler verir. Apache/1.3.23 Server at localhost Port 80 gibi bir çıktı verecektir.$SCRIPT_NAME; // Bu değişken kullanılan scriptin dizinini verir. c:\\apache\\htdocs\\deneme.php gibi bir çıktı verecektir.$REQUEST_URI; // Bu değişken kullanılan scriptin ismini verecektir. /deneme.php gibi bir çıktı verir.$SERVER_NAME; // Bu değişken scriptin üzerinde çalıştığı sunucunun ismini verir. localhost gibi bir çıktı verecektir.$SERVER_SOFTWARE; // Bu değişken sunucu yazılımının ismini içerir. Apache/1.3.23 (Win32) gibi bir çıktı verecektir.$SERVER_PROTOCOL; // Bu değişken sayfanın kullandığı bilgi protokolü hakkında bilgi verir. HTTP/1.0 gibi bir çıktı verecektir.$REQUEST_METHOD; // Bu değişken sayfaya erişirken kullanılan metot bilgisini içerir. GET, POST vs. gibi çıktılar verecektir.$HTTP_ACCEPT_LANGUAGE; // Bu değişken sunucunun dilini verir. tr, eng vs. gibi çıktılar verecektir.$HTTP_ACCEPT_ENCODING; // Bu değişken talebe ait kodlama bilgisini verir. gzip, zip gibi çıktılar verecektir.

Bunların haricinde birkaç sabit apache değişkeni daha vardır. Fakat yazdıklarım genelde çok kullanılan değişkenler olduğu için size yetecektir.

PHP değişkenleri ise şöyledir,


Kod:

$HTTP_POST_VARS; // Bu değişken formdan post metodu ile gelen değerleri içerir.$HTTP_GET_VAR; // Bu değişken formdan get metodu ile gelen değerleri içerir.$HTTP_COOKIE_VARS; // Bu değişken cookie`lerden (çerezler) alınan değerleri içerir.$PHP_SELF; // Bu değişken o esnada çalışmakta olan scriptin dosya adını içerir.

Daha fazlasını görebilmek için aşağıdaki kodu kaydedip çalıştırın.


Kod:

<?php phpinfo(); ?>

PHP dilinde değişken ve kullanım alanları hakkında en azından bir ön bilginiz olmuştur. Bu dökümanda öğrendikleriniz PHP dilinin temel taşlarıdır. Değişkenleri her zaman kullanacağınız için bunları çok iyi bilmeniz gerekir.

Başarılar dilerim, kolay gelsin.

Hoşçakalın.

// gelecek konu: array (diziler)


PHP Programlama Dilinde Diziler (Array) // Yeni başlayanlar - Orta düzey

Diziler derken TV dizileri diye anlayanlarınız varsa hemen terk edin
smile.gif
Elbette bu işin şakası. Eğer basit olarak açıklamam gerekirse dizi değişkenleri dediğimiz değişken tanımlama yapısı işinize oldukça yarayabilir. Bundan önce değişkenler hakkında bilgi sahibi olduğunuzu göz önüne alarak ufak bir örnekle başlayalım.


Kod:

$isimler[1] = "Ali";$isimler[2] = "Veli";$isimler[3] = "Deli";echo $isimler[2];

Yukarıdaki kodu çalıştırdığımızda "Veli" çıktısını alırız. Bu dizi değişkenlerini her alanda kullanabileceğinizden ötürü bilmenizde fayda var. Daha gelişmiş bir örnek için aşağıdaki kodu inceleyin;


Kod:

$isimler["kiz"][1] = "Selen";$isimler["kiz"][2] = "Melis";$isimler["kiz"][3] = "Elmas";$isimler["erkek"][1] = "Birhan";$isimler["erkek"][2] = "Kerem";$isimler["erkek"][3] = "Yunus";$isimler["erkek"][4] = "Emre";echo $isimler["kiz"][3];

Bu kodu çalıştırdığımızda alacağımız çıktı "Elmas" olacaktır. Sanırım bunun sebebini zaten hemen anladınız
wink.gif
Şimdi bu öğrendiklerimizi basit bir array içerisinde kullanalım.


Kod:

$isimler = array( 1 => "Birhan", 2 => "Kerem", 3 => "Yunus", 4 => "Emre",);echo $isimler[3];

Artık tahmin edeceğiniz gibi çıktı olarak "Yunus" değerini verecektir. Merak etmeyin uyuzluk olsun diye değil, array kullanımını göstermek için verdim bu örneği
wink.gif
Şimdi daha karmaşık bir array yapısını inceleyelim.


Kod:

$isimler = array( "kiz" => array( 1 => "Selen", 2 => "Melis", 3 => "Elmas" &nbsp;), "erkek" => array( 1 => "Birhan", 2 => "Kerem", 3 => "Yunus" &nbsp;));echo $isimler["kiz"][3];

Yukarıdaki kod karmaşık gelmiş olabilir. Hak veriyorum
smile.gif
Öncelikle $isimler isimli değişkene bir array dizisi tanımladık. İlk array dış kabuk olsun. Bunun içine iki array daha yerleştirdik. İç dizilerdeki birinci dizimiz kız isimlerini sıralamak için kullanıldı. "kiz" dizisi bittiği zaman parantezi kapattıktan sonra virgüllendirdik. Eğer virgüllendirmeseydik hata verirdi. Ardından ikinci iç dizimiz olan ve erkek isimlerini sıraladığımız "erkek" dizisini hazırladık. Bu diziyi de bitirdik fakat bu artık son iç dizimiz olduğu için virgül koymadık. Eğer ardından başka bir benzer yapı gelecek olsaydı yine virgülümüzü koyup ilk dizinin sona erdiğini belirtmek durumunda kalacaktık. Son olarak dış kabuk dediğimiz dış dizimizi kapattık ve noktalı virgül ile $isimler değişkenine tanımladığımız array dizisinin bittiğini belirttik. Ekrana ise kız isimlerinden "3" ile eşleştirilmiş olan "Elmas" ismini ekrana bastırdık.

Dizi yapısını kısmen öğrendik fakat ne işimize yarayacak? Kafanıza takılmıştır elbette. Hemen bir örnekle de ne işe yarayacağını görelim;


Kod:

$gunler = array("Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi");echo $gunler[date("w")];

Öncelikle bu kodda size yabancı gelebilecek ibareleri açıklayayım. Görüldüğü gibi date(); fonksiyonunu kullandık. Bu fonksiyon PHP için tarih işlemlerinde kullanılır. İleri de tarih işlemlerini ayrı bir notta ele alacağız. Şimdilik sadece date("w") fonksiyonunun bize o günün hafta içindeki sıra sayısını verdiğini bilmemiz yeterli. "w" ibaresi ile gün sırasını alırız ve bu değer sıfırdan başlar. Bu yüzden karışıklık olmasın diye array dizisinde ilk sıraya "Pazar" değerini girdik. Oysa ki hafta pazartesi ile başlamalıydı. Amacımız sadece karışıklıklığı önlemek oldu. Ayrıca hemen dipnot düşelim ki array dizisinin bu tür kullanımında her içeriğe bir sayı değeri atanır ve bu sayı sıfır sayısından başlar. Yani yukarıdaki $gunler değişkenine tanımladığımız array dizisi için "Pazar" => 0 değerine eşittir. "Pazartesi" => 1 değerine eşittir. Gerisini zaten anlamış olmalısınız
wink.gif


Yukarıdaki örnekte görüldüğü gibi PHP ile ancak ingilizcesini alabileceğimiz gün isimlerini Türkçe`ye çevirdik. Artık sitemizde Türkçe olarak "Pazartesi" yazabileceğiz mesela
wink.gif


Kullanım alanı elbette bununla sınırlı değil, aklınıza bile gelmeyecek yerlerde bu dizi yapısını kullanacaksınız. Ama ben sadece yüzeysel olarak bu kadar açıklayabiliyorum.

Array ile kullanacağımız bir takım sıralama fonksiyonları da vardır. Sıralamalarda Türkçe karakterle başlayan kelimeler tanınmadığı için son kısımda yer alır. bu fonksiyonlar şunlardır;

sort(); - Dizi içeriğini alfabetik sıralama.
rsort(); - Dizi içeriğini ters alfabetik sıralama.
asort(); - Dizi elemanlarını değerine göre sıralar.
arsort(); - Dizi elemanlarını değerine göre tersten sıralar.
ksort(); - Dizi elemanlarını içeriğe göre sıralar.
krsort(); - Dizi elemanlarını içeriğe göre tersten sıralar.

Hemen örneklerle bu fonksiyonları açıklayalım.

Örnek - sort();


Kod:
$seviyeler = array( "Admin" => "100", "Yönetici" => "10", "Üye" => "1");sort($seviyeler);foreach($seviyeler as $x => $y) { echo("$x - $y<br>");}
Yukarıdaki kodda foreach döngüsünü kullandık. Kodu çalıştırdığımızda $seviyeler değişkenindeki içeriğin alfabetik bir şekilde sıralandığını görürüz. Eğer kullandığımız sort($seviyeler); yapısını rsort($seviyeler); yaparsak göreceğiz ki sıralama tersine dönecektir.

Örnek - asort();


Kod:

$seviyeler = array( "Admin" => "100", "Yönetici" => "10", "Üye" => "1");asort($seviyeler);foreach($seviyeler as $x => $y) { echo("$x - $y<br>");}

Bu kodu çalıştırdığımızda sonuç aşikardır. "Üye" başta olmak üzere sıralama yapılır. Çünkü "Üye" en düşük değere sahiptir. Değeri 1`dir. Eğer buradaki fonksiyonu arsort($seviyeler); yaparsak sıralamanın tam tersine döneceğini de görmüş oluruz.

Örnek - ksort();

Bu örnek için kod yazma ihtiyacı duymuyorum. Tek yapmanız gereken yukarıdaki örnekteki fonksiyonu ksort($seviyeler); veya tersi için krsort($seviyeler); olarak değiştirmek. Sonuçta göreceksiniz ki bu seferde sıralama, dizi elemanlarının alfabetik sıralaması şeklindedir. ksort(); kullanılırsa "Admin" başta, krsort(); kullanılırsa sonda yer alacaktır.

Oldu ki biz dizimizin içinden rastgele bir değer alıp bunu ekrana basmak istiyoruz. Bu durumda yardımımıza hemen suffle(); koşuyor
wink.gif
Hemen bir örnekle de bunu açıklayalım.


Kod:

$seviyeler = array( "Admin" => "100", "Yönetici" => "10", "Üye" => "1");shuffle($seviyeler);for ($x=0; $x<1; $x++) { echo("$seviyeler[$x]<br>");}

Bu kodu çalıştırdığımızda ekrana her seferinde başka bir değer gelecektir. Peki biz dizimizdeki elemanların toplam değerini bulmak için ne yapacağız? Burada da devreye array_sum(); fonksiyonu giriyor.

Örnek - array_sum();


Kod:

$sayilar = array(1,2,3,4,5,6,7,8);echo array_sum($sayilar);

Bu kodun çıktısı 36 olacaktır. Çünkü 1+2+3+4+5+6+7+8=36 eder. Bu fonksiyonda çeşitli alanlarda işinize elbet yarayacaktır.

Bizim iki adet dizimiz olsun ve bunları birleştirmek istiyor olalım. Ne yapmamız gerek? array_merge(); fonksiyonu bu iş için uygundur. Sadece iki diziyi değil, n sayıdaki diziyi bununla birleştirebilirsiniz. Hemen örneğimizi de verelim;

Örnek - array_merge();


Kod:

$x = array(1,2,3,4,5,6,7,8);$y = array(4,7,8,3);$birlestir = array_merge($x, $y); print_r($birlestir);

Örneğin en sonunda görüldüğü gibi ekrana yeni dizimizi bastırıyoruz. Eğer print_r yerine print kullansaydık ekranda sadece "Array" yazısını görecektik. Böylece print ve print_r arasındaki farkı da görmüş olduk
wink.gif


Dizilerimizde bazen bir değeri birden çok kullanabiliriz. Eğer ki hangi değerin kaç kez kullanıldığını öğrenmek istersek hemen yardımımıza array_count_values(); koşuyor. Aşağıda ki örneği inceleyin.

Örnek - array_count_values();


Kod:

$x = array(a,b,t,a,y,k,d,w,y,a,g,v,b,e,t);print_r(array_count_values($x));

Eğer bu kodu çalıştırırsak bize "Array ( [a] => 3 => 2 [t] => 2 [y] => 2 [k] => 1 [d] => 1 [w] => 1 [g] => 1 [v] => 1 [e] => 1 )" gibi bir çıktı verecektir. Burada da görüldüğü gibi a değerinin üç kez kullanıdığı, b değerinin 2 kez kullanıldığı gibi ifadeler yer almakta. Anladınız zannediyorum
wink.gif

Array fonksiyonu için yazılabilecek birkaç fonksiyon daha var ama şimdilik bu kadar yeterli diye düşünüyorum. İleride lazım olursa onları da yazarım.



PHPNuke kurmak kolay bir işlem. Yapmanız gerekenleri aşağıda
bulabilirsiniz.
Öncelikle PHPNuke'yi resmi sitesinden ****** edin. <http://phpnuke.org/modules.php?name=Downloads>. ****** ettiğiniz bu sıkıştırılmış paketi WinRAR veya WinZip ile açın. İki klasör göreceksiniz. Birincisi sql, ikincisi html. html klasöründe PHPNuke sisteminin dosyaları yer almakta.sql klasöründe ise veritabanı dosyası yer almakta. sql klasöründe yer alan nuke.sql dosyasını MySQL veritabanına PHPmyAdmin yazılımı ile yükleyip çalıştırın. Veritabanı tabloları oluşturulacaktır. Daha sonra html klasöründe yer alan config.php dosyasını herhangi bir editörle açın. Bizim bu konuda tavsiyemiz bir PHP editörü olan PHPed yazılımıdır. Bu yazılımı <http://www.inndir.com> adresinden ****** edebilirsiniz. config.php php dosyasınmda yer alan şu satırları değiştirin.
$dbhost = "localhost"; Bu satıra veritabanı sunucusunun adresini girmelisiniz. Bu adresi hosting hizmeti aldığınız hosting firmasından edinebilirsiniz.
$dbuname = "root"; Bu satıra veribanı kullanıcı adını girmelisiniz.
$dbpass = ""; Bu satıra ise veritabanı kullanıcısına ait olan parolayı girmelisiniz.
$dbname = "nuke"; Bu satıra sql sorgusunu çalıştırıp tabloları oluşturduğunuz veritabanı adını girmelisiniz.
$prefix = "nuke"; Bu satır sabit kalabilir.
$user_prefix = "nuke"; Bu satır yine sabit kalabilir.
$dbtype = "MySQL"; Bu satıra veritabanı sistemini girmelisiniz. PHPNuke MySQL, mSQL, PostgreSQL, PostgreSQL_local, ODBC, ODBC_Adabas, Interbase, Sybase veritabanları ile çalışabilir.
Bu ayarları yaptıktan sonra sitenize bağlanıp
http://www.siteismi.com/admin.php yazın. Burada kendinize bir Admin ID ve parola belirleyin ve admin alanına giriş yapın. Burada "Seçenekler" veya "Preference" şeklinde bir bağlantı bulacaksınız. Buradan sistenize uygun ayarları yapabilirsiniz. Ayarlarda site adresi, site ismi, site sloganı, haber sayısı, alt alanda yer alacak bilgiler, bannerların aktif olup olmayacağı gibi birçok özelliği ayarlayabilirsiniz.
Dosyaları servera yönlendirdikten sonra bütün klasörlerin
CHMOD yani erişim haklarını 777, ve bütün
dosyaları erişim haklarını 666 olarak değiştirin. Bu riskli
bir uygulama ama dikkat etmeniz gereken her klasörün içine boş
bir index.html dosyası koymanız
gerekli. Kurulum işlemi bu kadar. Bundan sonra yapmanız gereken
site içeriğinizi hazırlamak.




PHP Programlama Dilinde If Yapısı (Koşullandırma && Sınama) // Yeni başlayanlar

Her türlü programlama dilinde olduğu gibi PHP içinde koşullandırma ve denetleme organizması olan if yapısı olmazsa olmaz bir deyimdir. If kelimesinin Türkçe karşılığının "eğer" olduğunu söylersem herşeyi daha kolay anlayabileceksiniz. Örneğin;

Kod:

if ($isim == "") { echo("\$isim değişkeninin içi boş!");}

Yukarıdaki örnekte $isim değişkeninin içinin dolu olup olmadığını sorguladık. Değişkenin değeri boş olduğu için bu denetleme sonucunda çıktı olarak yukarıdaki echo komutunun içeriğini alacağız. Peki ya değişkenin içi dolu olsa idi? İşte bu noktada devreye if deyiminin "else" kısmı giriyor. Aşağıdaki örneği inceleyin:

Kod:
if (empty($isim)) { echo("\$isim değişkeninin içi boş!");}else { echo("\$isim değişkeninin içi dolu!");}
Hemen deyimimizin sonuna else kısmını ekledik. "Else" kelimesinin Türkçe karşılığı "değilse" gibi denebilir. Yani if kelimesinin tersi. Bu if deyimimizde empty(); fonksiyonunu kullandık. Bu ilk örnekteki sınama ile aynı işlevi gerçekleştirir. Yukarıdaki if yapısı "eğer $isim değişkeninin değeri yoksa şöyle böyle yap, varsa da şöyle şöyle yap" anlamı taşır. $isim değişkenine değer yüklersek else komutu çalışacaktır. Bu arada hemen dipnot olarak geçeyim ki empty(); fonksiyonunun tersi olarak isset(); kullanılabilir. Bu empty(); fonksiyonunun tam tersi olarak "eğer $isim değişkeninin değeri varsa .." gibi bir ifade ile açıklanabilir.

If deyiminin olmazsa olmazlarından biri de "elseif" yapısıdır. Bu yapı mutlaka if yapısından sonra bulunmalıdır. Şöyle bir örnekle açıklanabilir;

Kod:

if ( $x == 3 ) { echo("Değişkenin değeri: 3");} elseif ( $x == 5 ) { echo("Değişkenin değeri: 5"); }else { echo("Değişken 3 veya 5 değerlerinden birisine sahip değil.");}

Yukarıda önce $x değişkeninin değerinin 3 olup olmadığı, sonra 5 olup olmadığı sınandı. Eğer iki koşulda sağlanmadıysa else kısmı devreye girdi. If ve else arasına istediğimiz kadar elseif tanımlayabiliriz. Fakat bir if deyiminde else kısmı sadece bir kere yazılabilir. Ayrıca unutulmamalıdır ki bir if deyimi mutlaka if ile başlamalıdır, if olmadan elseif ya da else kısımları yazılamaz.

If ve else kalıbını uzun uzun yazıncaya kadar "?" operatörü ile de bir koşul sınama yapısı oluşturulabilir. Hemen aşağıdaki örneği inceleyin;

Kod:

$x = 3;empty($x)?print("x değeri boş"):print("x değeri boş değil");

Yukarıda ilk olarak $x değişkeninin boş olup olmadığını sınadık. Eğer boş ise ilk print komutu, boş değilse ikinci print komutu devreye girecektir. Bizim $x değişkenimizin değeri 3 olduğu için alacağımız çıktı 2. print komutudur. Tabi ilk defa bunları öğrenmeye çalışan birisinin ilk olarak genelde kullanılan yapıyı öğrenmesi daha mantıklıdır
wink.gif
Zaten genelde son örnek değil, ilk verdiğim şekillerde kullanım daha yaygındır. Tabi ki if deyimi için farklı yazım türleri de mevcuttur.

Süslü parantez kullanmadan kısa if deyimleri yazmak istiyorsanız aşağıdaki örneği inceleyin:

Kod:

if ( $HTTP_REFERER != "http://www.abc.com" ): echo("Bu sayfaya diğer sayfalardan erişim yasaklanmıştır!"); exit(); endif;

Bu örnekte öncelikle sitemize hangi siteden geçiş yapıldığını $HTTP_REFERER sabiti ile öğrendik. Sonra bunu kendi sitemizin anasayfası ile kıyasladık ve eğer bizim anasayfamız haricinde bir başka siteden sitemize giriş yapılmak isteniyorsa ekrana echo komutu ile bir uyarı yazısı yazdırdık. Sonra da exit(); komutu ile işlemi durdurup endif; ile if deyimimizi sonlandırdık.

exit(); fonksiyonu hakkında biraz daha açıklayıcı olayım. Bu fonksiyon kullanıldığı zaman scriptinizin PHP tarafından işlenişi durur. Yani bu fonksiyonu nereye koyarsanız PHP yorumlayıcısı scriptinizi oraya kadar okur ve bu fonksiyonu çalıştırdıktan sonra gerisini okumaz. Bu yapı üyelik sistemlerinde ve benzeri yapılarda çokça kullanılır. Bunun benzeri olarak die(); fonksiyonu da kullanılabilir.

PHP dilinde if yapısı bu kadar. Görüldüğü gibi aslında herşey gayet kolay
wink.gif


Hoşçakalın.








Switch Yapısı // Yeni başlayanlar

Bu yapı aslında if yapısı ile hemen hemen aynıdır. Ancak bazı durumlarda if kullanmak daha kompleks bir hal alırken switch kullanmak bize daha kolay ve kısa bir yöntem olarak görülebilir. Switch deyimi if deyimine ne kadar benzese de if deyiminin yaptığı herşeyi yapamaz. Yine de bize bazı durumlarda fazlasıyla yardımcı olabilir.

Peki ne işimize yarayacak bu deyim? Bu yapıyı if yapısı ile eşdeğer tutarak ne işe yarayabileceğini düşünebilirsiniz. Nihayetinde bu da bir if benzeri yapıdır ve vereceğiniz koşula göre sınama yapıp size sonucu verir. Yazının devamında örnekler ile ne işe yarayacağını biraz da olsa anlayabileceksiniz.

Switch deyiminin yazılışını ve dizilişini öğrenmek için aşağıdaki örneği inceleyin:

Kod:

switch ($tarih) { case "dmy"; echo date("d.m.Y"); break; case "dmygis"; echo date("d.m.Y G:i:s"); break; default: echo("Tarih türünü seçmediniz. Bu sebeple default tarih gösterimini görüyorsunuz:"); echo date("<b> d-m-Y G:i - l</b>");}

Yukarıdaki kodu ilk olarak şekil yapısı olarak inceleyelim. Dikkatinizi çekti ise her koşul case ile tanımlanıp break ile sona erdiriliyor. Bu iki eleman switch deyiminin olmazsa olmazları diyebiliriz. Örnekte ilk olarak $tarih değişkeninin değeri sınanıyor ve bu koşullara bağlanıyor. Switch deyiminde de, if deyimine benzer bir şekilde değişken tanımlanıyor, daha sonra süslü parantez "{ }" açılıyor ve koşullar sıralanıyor. Tüm koşullar sıralandıktan sonra, eğer hiçbir koşul sağlanmıyorsa devreye gidecek olan default kısmı yer alıyor. Unutmamalıdır ki bu kısmın switch deyiminin sonunda olması daha iyi olacaktır, eğer ortalarda ya da en başta olursa deyim hatalı çalışabilir. Ayrıca default bölümü case kısımlarında olduğu gibi noktalı virgül ile değil, iki nokta üstüste işareti ile yazılır. Eğer noktalı virgül koyarsanız yine hata alırsınız.

Şimdi örneğimizi inceleyelim. Örnekte $tarih değişkeninin alacağı değerleri sınıyoruz ve bu değerlere göre koşullar yaratıp işlem yaptırıyoruz. Bu kodu ornek.php ismi ile kaydedip
http://127.0.0.2/ornek.php?tarih=dmy olarak çalıştırırsanız ilk koşulumuz gerçekleşecek ve "09.03.2004" gibi bir çıktı alacaksınız. Aynı şekilde eğer ornek.php?tarih=dmygis olarak çalıştırırsanız "09.03.2004 20:12:17" gibi bir çıktı alırsınız. Eğer sadece http://127.0.0.2/ornek.php olarak çalıştırırsanız hiçbir koşul yerine gelmediğinden "Tarih türünü seçmediniz. Bu sebeple default tarih gösterimini görüyorsunuz: 09-03-2004 20:13 - Tuesday" çıktısını alırsınız. Yine eğer ornek.php?tarih=ffsafdasfdas gibi bir şekilde girmeye çalışırsanızda default kısmı devreye girer ve aynı çıktıyı alırsınız.

Dikkat etmeniz gereken şeyleri şu şekilde sıralayabiliriz:

  • Case ve default kısımlarının imla farklarına dikkat etmeliyiz. (Yukarıda anlatılan noktalı virgül ve iki nokta üstüste farkı.)
  • Case ile başlattığımız her koşulu mutlaka break ile sonlandırmalıyız. Eğer sonlandırmazsak ya hata verir ya da diğer break; komutuna kadar çalışmaya devam eder ve bozukluk yaratır.
  • Switch yapısına başlarken açtığımız süslü parantezi mutlaka deyimin sonunda kapatmalıyız.
Mesela bir site yapıyorsunuz ve bu sitenizin aynı diğer sitelerdeki gibi http://127.0.0.2/index.php?bolum=programlama gibi linkleri olsun istiyorsunuz. Bu durumda switch yapısı oldukça işlevseldir. Bunu if yapısı ile de yapabilirsiniz fakat switch if deyiminden bu durumlarda daha hızlı çalışacağı için ve daha işlevsel olacağı için önerilir. Yukarıdaki örneğe bakarak istediğiniz türden linkler yaratabilirsiniz.

Switch içerisine istenildiği kadar koşul tanımlanabilir, fakat ne kadar çok koşul olursa çalışma performansı o kadar düşecektir. Bu yüzden olabildiğince kısa tutmaya çalışmalıyız. Ayrıca switch deyiminin if deyiminden daha hızlı çalıştığı bilindiğinden, switch ile yapabileceğimiz işlemleri if ile yapmamalıyız. Yapsak bile sonuçta performans düşeceği için zararlı çıkan biz oluruz.

Hoşçakalın.

// gelecek konu: döngüler (for && while)





PHP Programlama Dilinde Döngü Yapısı // Yeni başlayanlar
  • While Döngüsü && Do-While Döngüsü
  • For Döngüsü
While Döngüsü

While döngüsü PHP dilinde en çok kullanılan döngülerden birisidir. Türkçe karşılığı "iken"`dir. Yani döngümüze bir koşul tanımladığımızda, bu koşul yerine getirilene kadar döngümüz sürer. Dikkat etmemiz gereken husus döngümüze vereceğimiz koşulun sonsuza dek sürecek bir koşul olmamasıdır. Eğer sonsuz bir döngü tanımlarsak programımız hata verir veya kilitlenir. Hemen basit bir örnek ile bu döngünün yazılışını inceleyelim.


Kod:

$sayi=1;while ($sayi <= 10) { echo("$sayi<br>");$sayi++;}

Bu döngümüzün yazılış biçimidir. Tanımladığımız değişkeni döngümüzde bir koşula bağladık ve bu koşula göre çıktısını aldık. Daha açık söylemek gerekirse $sayi değişkenine bir (1) değerini verdik ve döngümüzde "$sayi değişkeni küçük/eşit 10 sayısına ulaşana kadar..." şeklinde bir koşul bağladık. Daha sonra ise süslü parantezimizi açıp bu cümlenin devamını getirdik: "... ekrana $sayi değişkenini her seferinde bir (1) arttırarak bas." Buradaki her seferinde bir sayı arttırma olayını $sayi++ ile yaptık.

Bu döngünün bir başka yazılış şekli de şöyledir,


Kod:

while ($sayi <= 10): echo("$sayi<br>"); $sayi++; endwhile;

Bu döngüyü kullanacağımız alanlar oldukça geniştir. Elbette böyle sadece sayıları bir bir arttırarak bu döngünün kullanım alanını belirleyemeyiz. Örneğin bu döngü ile veritabanımızdan (ileri de bu konuyu işleyeceğiz.) veri çekip ekrana basabiliriz.

Bu döngü bu kadardır, temel olarak incelediğimizde bundan daha fazla birşey yazmanın yeri yoktur. Fakat dediğim gibi biz PHP dilinde ilerledikçe bu ve benzeri döngülerin nerelerde kullanılabileceğiniz daha iyi anlayacağız.

Bir de bu döngünün benzeri olarak do-while döngüsü vardır. Bu döngünün while döngüsüyle arasında küçücük fark vardır. Biz bazen bir döngü döndüreceğimiz zamanlar o döngünün mutlaka en az bir kere dönmesi gerektiği olur. Yani o döngüyü mutlaka bir kere döndürmemiz gerekir. İşte bu durumlarda do-while döngüsünü kullanıyoruz. Örneği inceleyin.


Kod:

$x=0;do { echo("$x<br>"); $x++;} while ($x <= 10);

Örnek aslında dediğim şeyle biraz ilgisiz oldu fakat sizinde görebildiğiniz gibi ilk olarak ekrana $x değişkeni mutlaka bir kez basılıyor. Sonra do deyiminin sonundaki while koşuluna bakılıp, eğer devam etmesi uygun ise program koşula bağlı olarak devam ediyor. Koşul sağlanana kadar döngümüz dönüyor ve koşul sonlandığında son buluyor. Eğer siz $x değişkeninin değerini 11 gibi bir sayı yaparsanız göreceksiniz ki yine de ekrana bir kez 11 sayısı basılacak ve koşul sağlanmadığı için döngü sona erecektir.

For Döngüsü

For kelimesinin İngilizce karşılığının "için" olduğu düşünülürse bu döngünün de amacını anlamış oluruz
smile.gif
Bu döngünün de işlev olarak while döngüsüne benzediğini belirtmekte fayda var. İlk bakışta karışık gibi görünse de yazılış şeklini öğrenmek için aşağıdaki örneği inceleyin.


Kod:
for ($x=1; $x <= 10; $x++) { echo("$x<br>");}
Döngüye başlarken ilk olarak $x=1 sabitimizi verdik. Daha sonra koşulumuzu tanımladık ve bu koşul her sağlandığında yapılacak işlemi belirttik. Kitap diliyle anlatmak gerekirse;


Kod:

for (ifade1; koşul; ifade2) { ifade3}

Gibi birşey yazılabilir. Bunları tek tek açıklayalım:
  • İfade1: Bu kısım daima bir veya birden çok sayaca atanan ilk değer olur.
  • İfade2: Döngüde her turdan sonra tekrar edilir.
  • İfade3: Koşul sağlandığı sürece her turda bir kez olmak üzere tekrar edilir. Bu kısım döngünün esas kısmı olup, bize çıktıyı verecek kısımdır.
  • Koşul: Tahmin edebileceğiniz gibi döngümüze verdiğimiz koşuldur.
For döngüsünde ifade1 olarak adlandırdığımız kısım sadece bir kez okunur, geri kalan kısımlar ise her turda tekrarlanır. Bu döngü genellikle web sayfalarında listeleme vs. türü işlemler yapılırken kullanılır. Aşağıdaki örneği inceleyin.


Kod:

echo("<h2>Liste</h2>");echo("<table border=0 width=500>");echo("<tr><td><b>Sıra</b></td><td><b>Açıklama</b></td></tr>");for ($x=1; $x <= 10; $x++) { echo("<tr><td>$x</td><td>$x sıralı programın açıklaması</td></tr>");}echo("</table>");

Bu örneği çalıştırdığınızda tablonun bir yanında sıra numarası, öteki yanında ise o sıraya ait açıklamanın olduğunu göreceksiniz. Bu tabi ki basit bir örnek fakat for döngüsünün kullanım alanları hakkında size fikir verebilir düşüncesiyle yazmayı uygun gördüm.

Başka bir örneği, for döngüsünün başka bir yazım şekli ile daha kısa olarak yazalım:


Kod:

for($x=0; $x <= 10; print $x, $x++);

For döngüsü üzerine yazılabilecek pek başka birşey kalmadı. Eğer eksik kalmış bilgiler varsa sonra tekrar eklerim.

Hoşçakalın.





HP Programlama Dilinde Operatörler // Yeni başlayanlar


  • Matematiksel Operatörler
  • Karşılaştırmalı Operatörler
  • Mantıksal Operatörler
  • Diğer Operatörler
Operatör diyince aklınıza gelen şeyleri yok edin, ve şimdi kendinizi makalenin akışına bırakın. Çünkü eminim ki, eğer PHP diline yeni başlamış biri iseniz aklınıza gelenler alakasız ve gereksiz şeylerdir. Yok edin onları..

İlk olarak operatör nedir onu izah edeyim. Operatörler PHP dilinde genelde değişkenler üzerinde işlemler yapmamıza yarayan kod parçalarıdır. Eğer ki biz $x ile $y değişkeninin eşit olup olmadığını sınamak, ya da $x + $y kaça eşittir, bunları bulmak istiyorsak operatörlerimize başvururuz. Sırayla gidelim ve "Matematiksel Operatörler" ile başlayalım.

Matematiksel Operatörler
  • Toplama İşlemi ( + ) Operatörü
  • Çıkarma İşlemi ( - ) Operatörü
  • Çarpma İşlemi ( * ) Operatörü
  • Bölme İşlemi ( / ) Operatörü
  • Bölme İşleminde Kalanı Bulmak İçin ( % ) Operatörü
Bunların hepsini tek tek örnekleyelim. Örneklerin içerisindeki açıklama satırlarını okursanız kolayca anlayabilirsiniz.

Kod:

<?php# Bize gerekli olacak iki adet sayıyı değişkenlere yüklüyoruz.$x = 10;$y = 3;# Örnek: Toplama ( + ) Sonuç: 13$sonuc = $x+$y;echo("Toplama Sonucu: <b>$sonuc</b><br>");# Örnek: Çıkarma ( + ) Sonuç: 7$sonuc = $x-$y;echo("Çıkarma Sonucu: <b>$sonuc</b><br>");# Örnek: Çarpma ( * ) Sonuç: 30$sonuc = $x*$y;echo("Çarpma Sonucu: <b>$sonuc</b><br>");# Örnek: Bölme ( / ) Sonuç: 3.333333..$sonuc = $x/$y;echo("Bölme Sonucu: <b>$sonuc</b><br>");# Örnek: Bölme işleminde kalan ( % ) Sonuç: 1$sonuc = $x%$y;echo("Kalan Sonucu: <b>$sonuc</b><br>");?>

Bunların haricinde kullanımlarda vardır. Örneğin genelde for döngüsünde kullanılan $x++ gibi kullanımlara da rastlarız. Bu tür bir kullanım ile $x değişkenine 1 ekleyebilir, ya da 1 azaltabiliriz. Ben bir 1 arttırma işlemini anlatacağım, zaten eksiltme işlemi de aynı şekilde yapıldığı için pek zorlanmazsınız.

Arttırma işlemini $x++ şeklinde veya ++$x şeklinde yapabiliriz. Peki fark nedir? Aşağıdaki örneği inceleyin.

Kod:

<?php# Değişkenleri tanımlayalım.$x = 10;$y = 3;# Örnek[1]: $x++ | İlk çıktı: 10, ikincisi 11 olacaktır.echo "\$x++ Şeklinde kullanım: <br>";echo $x++ ."<br>";echo $x ."<br><br>";# Örnek[2]: ++$y | İlk çıktı: 4, ikincisi 4 olacaktır.echo "++\$y Şeklinde kullanım: <br>";echo ++$y ."<br>";echo $y ."<br><br>";# Eğer scripti çalıştırırsanız aradaki farkı anlamış olacaksınız ;)?>

Anlattıklarımın haricinde += ve benzeri kullanım şekli de var. Fakat bunu anlatma gereği duymuyorum, bana gereksiz geliyor
smile.gif
Matematiksel Operatörler konusunu burada sonlandıralım.

Karşılaştırmalı Operatörler

Eğer $x ile $y değişkenlerinin eşit olup olmadıklarını, birbirlerine karşı büyüklük veya küçüklük durumlarını öğrenmek istiyorsak bu operatörlere başvurmalıyız. Aşağıdaki örnekte hepsini tek tek açıklayacağım. Açıklama satırlarını okursanız neyin ne olduğunu anlamanız daha da kolaylaşır.

Kod:

<?php# Değişkenleri tanımlayalım.$x = 10;$y = 3;# --------------------------------------------------------------------------# Örnek: Eşittir ( == ) Operatörü | Syntax: $x == $y# Açıklama: Karşılaştırılan iki değerin birbirine eşit olup olmadığı sınanır.# --------------------------------------------------------------------------if ($x == $y) { echo("iki değişken birbirine eşittir.<br>"); }else { echo("iki değişken birbirine eşit değildir.<br>"); }# --------------------------------------------------------------------------# Örnek: Denktir ( === ) Operatörü | Syntax: $x === $y# Açıklama: Karşılaştırılan iki değerin birbirine denk olup olmadığı sınanır.# --------------------------------------------------------------------------if ($x === $y) { echo("iki değişken birbirine denktir.<br>"); }else { echo("iki değişken birbirine denk değildir.<br>"); }# --------------------------------------------------------------------------# Örnek: Eşit Değildir ( != ) Operatörü | Syntax: $x != $y# Açıklama: Karşılaştırılan iki değerin birbirine eşit olup olmadığı sınanır.# --------------------------------------------------------------------------if ($x != $y) { echo("iki değişken birbirine eşit değildir.<br>"); }else { echo("iki değişken birbirine eşittir.<br>"); }# --------------------------------------------------------------------------# Örnek: Büyüktür ( > ) ve Küçüktür ( < ) Operatörleri | Syntax: $x > $y# Açıklama: Karşılaştırılan değerlerin birbirine büyük veya küçük oldukları bulunur.# --------------------------------------------------------------------------if ($x > $y) { echo("x değişkeni y değişkeninden büyüktür.<br>"); }else { echo("x değişkeni y değişkeninden büyük değildir.<br>"); }if ($x < $y) { echo("x değişkeni y değişkeninden küçüktür.<br>"); }else { echo("x değişkeni y değişkeninden küçük değildir.<br>"); }# --------------------------------------------------------------------------# Örnek: Büyük-Eşit ( >= ) ve Küçük-Eşit ( <= ) Operatörleri | Syntax: $x >= $y# Açıklama: Karşılaştırılan değerlerin birbirine büyük-eşit veya küçük-eşit oldukları bulunur.# --------------------------------------------------------------------------if ($x >= $y) { echo("x değişkeni y değişkeninden büyüktür veya eşittir.<br>"); }else { echo("x değişkeni y değişkeninden büyük veya eşit değildir.<br>"); }if ($x <= $y) { echo("x değişkeni y değişkeninden küçüktür veya eşittir.<br>"); }else { echo("x değişkeni y değişkeninden küçük veya eşit değildir.<br>"); }?>

Mantıksal Operatörler

Bu operatörler ile aynen Türkçe`de sık sık kullandığımız "veya" ve "ve" kelimelerini PHP içine entegre edeceğiz. Örneğin bir if deyimi içerisine bu tür cümlecikler yerleştirerek "Eğer x ve y şöyle ise, böyle yap" gibi bir cümleyi PHP içerisinde uygulayabileceğiz. Aşağıdaki bu operatörler hakkında bilgi bulabilirsiniz.
  • && Operatörü: AND olarakta kullanılabilir. Anlamış olduğunuz gibi Türkçedeki anlamı "ve" bağlacıdır. $x && $y örneğinde, iki değişkende doğru ise sonuç true (1), diğer durumlarda false (0) olarak döner. && kullanımı AND kullanımına göre önceliklidir. Sıralamada ilk olarak && işler.
  • || Operatörü: OR olarakta kullanılabilir. Türkçedeki anlamı "veya" bağlacıdır. $x || $y örneğinde, değişkenlerden birisinin yada ikisinin doğru olması durumunda sonuç true (1), diğer durumlarda false (0) olarak döner. || kullanımı OR kullanımına göre önceliklidir. Sıralamada ilk olarak || işler

    Aşağıdaki örneği inceleyin.
  • Kod:

    <?php# İfadelerimizi tanımlayalım.$x = 6;$y = 4;# Örneğimize geçiyoruz. Aşağıdaki örnekte verilen iki koşulunda doğru olması# durumunda sonuç 1, diğer durumlarda 0 olarak dönecektir. Örneğimizde iki# koşul da doğru olamayacağı için sonuç 0 olarak dönecek ve else komutu# işleyecektir. Eğer aradaki && operatörünü || ile değiştirirsek sonuç değişir.if ( ($x+$y)==10 && ($x+$y)==20 ) { echo("İkisi de doğru.");}else { echo("İkiside doğru değil.");}?>

    Diğer Operatörler
    • ! Operatörü
    • ? Operatörü
    • @ Operatörü
    ! Operatörü: Bu operatör, bir değişkenin vereceği true veya false sonucuna göre işlem yapar. Daha açık söylemek gerekirse, örneğin bir formumuz olsun. Bu formun işlenip işlenmediğini

    Kod:

    <?php if ($form) { echo("Form işlendi."); } ?>

    gibi bir kod ile bulabiliriz. Bunun tersini yapmak istediğinizde, değişkenimizin başına ! getirir ve kodumuzu şu şekle sokarız:

    Kod:
    <?php if (!$form) { echo("Form işlenmedi."); } ?>
    Bu kodun açıklaması "Eğer form işlenmediyse ekrana 'form işlenmedi' yazısını bas" şeklindedir. Anlamış olduğunuz üzere ! Operatörü değişkenin vereceği true veya false değerinin tersini sınar ve ona göre işlem yapar.

    ? Operatörü: Bir nevi if yapısıdır. Aşağıdaki örneği inceleyin.

    Kod:

    <?php $x=0?print("x değişkeninin değeri sıfırdır"):print("x değişkeninin değeri sıfır değildir."); ?>

    @ Operatörü: Script`imizin çalışması esnasında oluşabilecek hataları ziyaretçilerimize göstermek istemiyorsak, hata çıkarabileceğini düşündüğümüz ifadenin başına @ operatörünü ekleriz. Örneğin kendi local makinamızda mail(); fonksiyonu ile bir mail yollatmaya çalışalım, eğer local sunucumuzda smtp server kurulu değilse hata verecektir. Eğer biz bu hatayı görmek istemiyorsak @mail(); şeklinde bir kullanım ile hatamızı saklayabiliriz. Aşağıdaki örneği inceleyin.

    Kod:

    <?php @mail("$kime, $konu, $mesaj"); ?>

    Operatörlerin kullanım alanları oldukça geniş olduğu için, tıpkı değişkenleri iyice bildiğimiz gibi bunlarında anlam ve kullanım şekillerini bilmemiz bize yarar sağlayacaktır. Veritabanı sorgularından tutunda envai çeşit döngülerde, deyimlerde ya da fonksiyonlarımızda kullanacağımız bu operatörleri iyi bilmek gerekir.

    PHP dilinde operatör kavramını burada bırakabiliriz. Atladığım, belirtmediğim bir takım operatörlerde vardır. Bunlar pek işimize yaramayacağı için şimdilik yok saydım ve atladım, ilerde lazım olursa bunları da ekleyebilirim.

    Hoşçakalın.





    Tarih İşlemleri // Yeni başlayanlar
    • date(); Fonksiyonu
    • checkdate(); Fonksiyonu
    • mktime(); Fonksiyonu
    • getdate(); Fonksiyonu
    • time(); Fonksiyonu
    • gettimeofday(); Fonksiyonu
    Bu makalede PHP dilinde tarih ve zaman ile ilgili genel kavramları ele alacağız. Sırasıyla yukarıda yazan tüm fonksiyonları işleyeceğiz.

    date(); Fonksiyonu

    Bu fonksiyonla PHP`den saat ve tarih bilgilerini alırız. İçerisine oldukça fazla parametre alabilmektedir. Tüm parametreleri ve açıklamalarını aşağıda görebilirsiniz.
    • a [Küçük A]: am veya pm şeklinde çıktı verir.
    • A [Büyük a]: AM veya PM şeklinde çıktı verir.
    • d [Küçük D]: Ayın içinde hangi günde olduğunuzu başta sıfır olmak üzere 01 gibi bir formatta verir.
    • D [Büyük d]: Üç harfli gün adını verir.
    • F [Büyük f]: Ayın tam adını ingilizce olarak verir. June gibi bir çıktı verecektir.
    • g [Küçük G]: Başta sıfır olmamak üzere 12 saat formatında saati verir. 1-12 arasında çıktı verir.
    • G [Büyük g]: Başta sıfır olmamak üzere 24 saat formatında saati verir. 1-23 arasında çıktı verir.
    • h [Küçük H]: Başta sıfır olmak üzere 12 saat formatında saati verir. 01-12 arasında çıktı verir.
    • H [Büyük h]: Başta sıfır olmak üzere 24 saat formatında saati verir. 01-23 arasında çıktı verir.
    • i [Küçük I]: Dakika bilgisini 00 ve 59 arasında verir.
    • j [Küçük J]: Başta sıfır olmadan ayın içinde hangi günde olduğunuzu verir. 1-31 arasında çıktı verir.
    • l [Küçük L]: Günün tam adını ingilizce olarak verir. Sunday gibi bir çıktı verir.
    • L [Büyük l]: Artık yıl için kullanılır. Eğer tarih artık yıl içerisinde ise true, değilse false olarak işler.
    • m [Küçük M]: Başta sıfır olmak üzere 01-12 arasında yılın içerisindeki ayın sayısını verir.
    • M [Büyük m]: Üç harfli ay adını verir.
    • n [Küçük N]: Başta sıfır olmamak üzere 1-12 arasında yılın içerisindeki ayın sayısını verir.
    • s [Küçük S]: Başta sıfır olmak üzere 0-59 arasında saniye değerini verir.
    • S [Büyük s]: İngilizce`de �nci� anlamına gelen st, nd, rd, th değerlerinin çıktısını, ardından geldiği sayının değerine göre verir.
    • t [Küçük T]: Belirtilen ayın kaç gün olduğunu verir. 28-31 arası çıktı verir.
    • T [Büyük t]: Üç harfli sunucunun saat dilimi ayarını verir. EST, MDT gibi çıktılar verir.
    • U [Büyük u]: UNIX zaman mührüdür. 01.01.1970 tarihinden günümüze kaç saniye geçtiğini verir.
    • w [Küçük W]: Başta sıfır olmamak üzere haftanının gününü sayısal değerde verir. 0-6 değerleri arasında çıktı verir.
    • y [Küçük Y]: İki rakamlı yıl çıktısı verir. Örneğin 2004 yılının bu formattaki çıktısı 04 olacaktır.
    • Y [Büyük y]: Dört rakamlı yıl çıktısını verir. 2004 gibi bir çıktı verecektir.
    • z [Küçük Z]: Yılın hangi gününde olduğumuzu verir. 0-365 arasında bir çıktı verecektir.
    Şimdi bu fonksiyonun yukarıdaki parametreleri alarak nasıl kullanıldığına ilişkin bir örnek yapıp geçelim.

    Kod:

    <?phpecho date(�d.m.Y�);?>
    Yukarıdaki örneğin çıktısı bugün için "03.04.2004" olacaktır. Zaten tüm parametreleri yukarıdaki örneğe
    uyarlayıp kullanabileceğiniz için uzun uzun her birine örnek vermenin anlamı yok.

    checkdate(); Fonksiyonu

    Bu fonksiyon ile verilen tarihin geçerliliği tespit edilir. Eğer verilen şekilde bir tarih varsa sonuç true (1), yoksa false (0) olarak döner. Yazılışı;

    checkdate(ay, gün, yıl);

    Ay numarası yazarken 01, 02 gibi kullanım yerine 1, 2 gibi başta sıfır olmadan yazmalısınız.

    Kod:

    <?php# Çıktısı: 1 olacaktır. Çünkü böyle bir tarih mevcuttur.echo checkdate(8, 22, 1988);?>
    mktime(); Fonksiyonu

    Genellikle takvim ve benzeri uygulamalarda geçmiş bir tarihi, yahut ileri bir tarihi hesaplamamız ve tespit etmemiz gerekebilir. PHP içerisinde bunu yapmak için mktime(); kullanılır. Bu fonksiyon ile geçmiş yahut gelecek bir tarihin hangi güne denk geldiği vs. bulunabilir.

    Yazım şekli;

    mktime(saat, dakika, saniye, ay, gün, yıl);

    Aşağıdaki örneği incelerseniz kullanımı hakkında bilgi edinebilirsiniz. Aşağıda, girilen tarihin hangi güne denk geldiğini buluyoruz.

    Kod:

    <?php# Zaman belirtiyoruz.$x = mktime(0, 0, 0, 8, 22, 1988);# Ekrana belirtilen zamana ait gün adını basıyoruz.echo date("l", $x);?>
    Örnekte, 00:00:00 saatinde 22 Ağustos 1988 tarihinin hangi güne geldiğini bulduk. Bu fonksiyon demin de dediğim gibi takvim uygulamaları ve benzeri uygulamalarda çok işe yaramaktadır. Tarih hesaplamalarında genel olarak işe yaramakta demek daha doğru olur.

    getdate(); Fonksiyonu

    Bu fonksiyon bir dizi (array) yaratarak alacağı parametrelere göre çıktı verir. Fonksiyonun alabileceği parametreler şunlardır;
    • seconds (Saniyeler)
    • minutes (Dakikalar)
    • hours (Saatler)
    • mday (Ay içerisindeki gün sıra sayısı)
    • wday (Hafta içerisindeki gün sıra sayısıdır. 0-6 arasında değer alır.)
    • mon (Yıl içerisindeki ayın sıra sayısı)
    • year (Yıl)
    • yday (Yıl içerisindeki günün sıra sayısı)
    • weekday (Gün)
    • month (Ay)
    • 0 (Sıfır rakamı. 01.01.1970 tarihinden günümüze kaç saniye geçtiğini verir (UNIX zaman mührü).
    Aşağıdaki şekilde, getdate(); fonksiyonunun oluşturduğu dizinin (array`in) tüm elemanlarını listeleyebilirsiniz. Hepsinin çıktısını alabilirsiniz;

    Kod:

    <?php# Şu andaki tarihi al$x = getdate(); # Diziyi ekrana bas.print_r($x);?>
    Örnek bir kullanım ise;

    Kod:
    <?php# Şu andaki tarihi al$x = getdate(); # Gün-Ay-Yıl olarak tarihi bas.echo $x[weekday] ."-". $x[month] ."-". $x[year];?>
    Bu örneğin çıktısı Tuesday-April-2004 gibi bir şey olacaktır. Çıktıyı Türkçe alabilmek için siz de bir array yapısı yaratın ve Türkçe çıktı almayı deneyin. Böylece hem array üzerine örnek yapmış olur, hem de basit bir script hazırlamış olursunuz
    wink.gif


    time(); Fonksiyonu

    01.01.1970 tarihinden bu yana geçen zamanı saniye cinsinden verir. Yazılışı şöyledir;

    Kod:

    <?phpecho time();?>
    Bu fonksiyon tarih bazlı hesaplamalarınızda işinize yarayabilir. Örneğin sitenizin ziyaretçilerinin bir takım işlemlerine zaman sınırlaması koymak istiyorsanız, bu fonksiyon ile hesap yapabilirsiniz.

    gettimeofday(); Fonksiyonu

    Bu fonksiyon getdate(); fonksiyonuna benzer. Aynı o fonksiyonda yaptığımız gibi print_r(); ile bu fonksiyonun oluşturduğu dizinin (array`in) elemanlarını ve değerlerini görebilirsiniz. Alabileceği parametrelerde zaten o dizinin elemanlarıdır. Kısaca bahsetmek gerekirse;
    • sec (saniyeler)
    • usec (mikrosaniyeler)
    • minuteswest (Greenwich`e göre batıdaki dakikalar)
    • dsttime (Alacağı değerler aşağıdadır.)
    DST Değerleri
    • 0 => DST dışında.
    • 1 => Amerika
    • 2 => Avustralya
    • 3 => Batı Avrupa
    • 4 => Orta Avrupa
    • 5 => Doğu Avrupa
    • 6 => Kanada
    • 7 => Büyük Britanya
    • 8 => Romanya
    • 9 => Türkiye
    • 10 => Avustralya (1986 sonrası)
    Kullanımı tıpkı getdate(); gibi olup, zaman hesaplarında kullanılabilir.

    Tarih ve zaman işlemleri ile ilgili yazacak pek fazla bir şey kalmadı. Bunlar haricinde bir takım fonksiyonlar elbette mevcut fakat pek işlevsel olduğu söylenemez. Eğer gerek duyulursa onları da yazarız.

    Hoşçakalın.







    PHP Dilinde Fonksiyonlar // Orta düzey

    Fonksiyonlar PHP diline oldukça işlevsellik katan elemanlardır. Genel bir önbilgi vermek gerekirse fonksiyonlar kullanıcı tarafından tanımlananlar ve hal-i hazırda bulunanlar olmak üzere iki ana bölümde incelenebilir. Örneğin fopen(); ve include(); gibi fonksiyonlar hazırda olan ve önceden tanımlanmış fonksiyonlardır. Bu ve benzeri fonksiyonlar elbette işimize yaramaktadırlar ama bizim bazen de kendi fonksiyonlarımızı tanımlama ihtiyacımız doğabilir. İşte bu makalede bunu öğreneceğiz.

    Fonksiyonların genel yazım şekli şöyledir;


    Kod:

    function fonksiyon_adi (değişken1,değişken2, ..., değişkenN) { // Yapılacak işlemler, komutlar vs.}
    Fonksiyonlara isim seçerken kullanacağımız kurallar aynen değişkenlere isim verme kurallarıyla aynıdır. PHP dilinde fonksiyonları tıpkı matematikteki f(x)=4+2x tarzı fonksiyonlar gibi düşünebiliriz. Yapılan işlem fonksiyona gönderilecek değişken değerine göre yön bulur. Fakat biz öncelikle sade bir fonksiyon örneğini inceleyelim.


    Kod:

    function ilkfonksiyonum() { echo("deneme 1 2 3");}# Çıktısını alalım.echo ilkfonksiyonum();
    Görüldüğü gibi ilk başta sadece echo komutunu icra eden bir fonksiyon tanımladık ve fonksiyonumuzu bitirdikten sonra çıktısını almak için yine echo komutunu kullandık. Eğer biz fonksiyonumuzu tanımladıktan sonra öylece bıraksaydık, yani çıktısını almak istemeseydik bile script icra edildiği taktirde bu fonksiyon işlenecek ve yorumlanacaktı. Yani PHP script içerisindeki bütün fonksiyonları kullanılsın veya kullanılmasın mutlaka yorumlar ve çalıştırır.

    Şimdi biraz daha gelişmiş bir örneği inceleyelim.


    Kod:

    # x.(y+z) işlemini yapan bir fonksiyon tanımlayalım.function islem ($x, $y, $z) { echo $x*($y+$z);}# Fonksiyonumuzu kullanalım. (28 çıktısı verecektir)echo islem(4,2,5);
    Yukarıdaki örnekte daha gelişmiş bir fonksiyon örneği görüyorsunuz. İşin içine argümanlarımızı, yani $x, $y ve $z değişkenlerimizi soktuk. Fonksiyonumuzu tanımlarken bu değişkenleri x(y+z) şeklinde işleme tabî tutmasını istedik ve bunu son olarak echo islem(4,2,5); şeklinde kullandık. Sanırım argüman içeren fonksiyonların kullanım şekillerini biraz da olsa kavradınız. Elbette bu örnekte gördüğünüz gibi fonksiyonları sadece matematik işlemleri için kullanmayacağız.

    Ayrıca şunu da unutmamak gerekir ki, fonksiyonun argümanlarına fonksiyonumuzu tanımlarken default değerler atayabiliriz. Yukarıdaki örneği dikkate alarak şöyle bir fonksiyon yazımı yapılabilir;


    Kod:

    function islem ($x, $y, $z=3) { echo $x*($y+$z);}
    Görüldüğü gibi bu örnekte $z değişkenini 3 olarak atadık. Eğer ki bu fonksiyonu çağırmak istediğimiz zaman islem(4,2) gibi sadece iki değer girersek, üçüncü değer bizim atadığımız default değer olan 3 sayısı olacaktır. Fakat yine fonksiyonu çağırırken islem(4,2,5) gibi üç argümanı birden tanımlamak istersekte $z argümanı 5 olarak kullanılacaktır.

    Fonksiyonlarımızı derlerken dikkat etmemiz gereken bir diğer nokta da, fonksiyonun dışında bulunan bir değişkeni fonksiyona dahil sayamayacağımızdır. Örneğin;


    Kod:

    $isim = "birhan";function yaz() { echo $isim;}echo yaz();
    Yukarıdaki kod örneğinde görüldüğü gibi "$isim" değişkeni yaz(); fonksiyonunun dışarısındadır ve dolayısıyla bu kod örneğini çalıştırdığımız vakit ekrana hiçbir yazı gelmeyecektir. Çünkü fonksiyonumuz "$isim" değişkenini okumayacaktır. Eğer ki fonksiyonun dışındaki bir değişkeni fonksiyonumuza dahil etmek istersek imdadımıza global deyimi yetişecektir. Global deyimi sayesinde fonksiyonumuzun dışında kalan bir değişkeni içeriye alabiliriz. Yukarıdaki örneği tekrar derleyelim;


    Kod:

    $isim = "birhan";function yaz() { global $isim; echo $isim;}echo yaz();
    Bu fonksiyonun çıktısı tahmin edebildiğiniz üzere "birhan" olacaktır. Çünkü global kullanarak "$isim" değişkenini fonksiyonumuza dahil ettik.

    Bazı zamanlarda da (pek lazım olmasa bile) bir değişkeni fonksiyonumuzdan çıkarmak isteriz. Bunun için de static deyimini kullanmalıyız. Onun kullanım şekli de global deyimi ile aynı olduğu için değinmiyorum. Zaten pek işinize yarayacak bir şey olduğunu da söyleyemem.

    Eğer daha önce fonksiyon yapılarını inceleme fırsatınız olduysa return deyimine mutlaka gözünüz takılmıştır. Evet, bu noktaya kadar bu deyimden hiç söz etmedim fakat return deyimi fonksiyonlardan bilgi almamız için gerekli olan yegane deyimdir. Bir script`imiz olsun, biz bu script`imizde HangisiBuyuk(); fonksiyonunu kullanalım ve bu fonksiyondan bir değer almak isteyelim. Aşağıdaki örneği inceleyin.


    Kod:
    function HangisiBuyuk($a, $b) { if ($a > $b) return $a; else return $b;}echo HangisiBuyuk(3,2);
    Bu örnekte görüldüğü gibi bir if sınaması ile hangi değişkenin daha büyük olduğunu belirledik ve bunu return deyimi yardımıyla scriptimize gönderdik. Bu kodları çalıştırdığımız zaman 3 sayısı daha büyük olduğu için ekrana 3 sayısı basılacaktır.

    Ayrıca unutulmamalı ki, return deyimi kullanıldığı zaman fonksiyon durur. Yani return deyimi icra edildiyse kendisinden sonra gelen işlemler göze alınmaz. Yukarıda yazdığımız örnekte bir if yapısı kullandığımız için, iki return deyiminden birisi if koşuluna bağlı olarak işletilecektir. Eğer ki fonksiyon bize $b değişkeni olarak dönecekse $a değişkenine ait return deyimi dikkate alınmayacaktır çünkü if sınaması sonucunda o değişken atlanmış olacaktır. Anlatmak istediğim nokta, return deyimi yazıldığı zaman değil çalıştırıldığı zaman fonksiyon durur.

    Fonksiyonlar tanımlayarak kod tekrarı yapmaktan kendimizi kurtarabiliriz. Örneğin sayfamızın üst ve alt kısmını ekrana basacak iki fonksiyon tanımlarız. Bunlar ingilizcede yaygın olarak kullanılan ismiyle header(); ve footer(); fonksiyonları olsun. Bu iki fonksiyonu her sayfamızın üst ve alt kısımlarında çalıştırarak her sayfamızı benzer sayfalar haline getirebiliriz. Oysa bu fonksiyonları tanımlamamış olsaydık biliyorsunuz ki devamlı kod tekrarı yaparak her sayfanın alt ve üst kısımlarına aynı şeyleri yazmak durumunda olacaktık. Üstelik bir de bunları değiştirmek istediğimizi düşünün.. Sizce de onca sayfayı tek tek değiştirmek zor olmaz mıydı? Evet oldukça zor olurdu. İşte bu zorluklardan kurtulmak için fonksiyon kullanmalıyız.

    Son bir örnek vererek konuyu sonlandıralım.


    Kod:

    $yazi = "gülüyorum :) üzülüyorum :( ama yine de {b}kopuyorum{/b} :D :D :D";function sekillendir($x) { $x = str_replace(':)', '<img src=gulenyuz.gif>', $x); $x = str_replace(':(', '<img src=uzulmus.gif>', $x); $x = str_replace(':D', '<img src=kopmus.gif>', $x); $x = str_replace('{b}', '<b>', $x); $x = str_replace('{/b}', '</b>', $x); return $x;}echo sekillendir($yazi);
    Hani Forumlarda falan gülen yüzler kendiliğinden çıkıverir. Eğer ki bunu kendi sayfamızda yaptırmak istersek bu tür bir fonksiyon kullanabiliriz. Sanırım bunca şeyi okuduktan sonra aklınızda bu fonksiyonun nasıl işlediği hakkında pek bir soru kalmamıştır. Dolayısıyla fazlaca ayrıntısına inerek açıklamak istemiyorum, siz zaten nasılsa yukarıdaki fonksiyonun işleyiş ve yazım tarzını anlamış olmalısınız.

    Yukarıdaki fonksiyonun çıktısı HTML kaynak kodu olarak şöyle olacaktır;


    Kod:

    gülüyorum <img src=gulenyuz.gif> üzülüyorum <img src=uzulmus.gif> ama yine de <b>kopuyorum!</b> <img src=kopmus.gif> <img src=kopmus.gif> <img src=kopmus.gif>
    Fonksiyonlar konusu bu kadar. Ama tanımlayabileceğiniz fonksiyonlar asla bu kadar değil. Akla hayale gelmeyen fonksiyonlar tanımlayabilirsiniz, mutlaka kendinizi fonksiyon kullanmaya alıştırın. Emin olun ki işleriniz eskisinden daha kolaylaşacaktır.

    Hoşçakalın.




    PHP Dilinde Dosya İşlemleri - 1 // Yeni başlayanlar

    PHP ile bir dosya üzerinde işlem yapmak her zaman bize lazım olabilecek bir olaydır. Özellikle MySQL ve benzeri veritabanı sistemlerinin desteklenmediği sunucularda ya da sayaç, maillist ve benzeri uygulamalarda verileri bir dosya üzerine yazıp bir dosya üzerinden okumak daha akıllıca ve işlevseldir. Bu makalede dosyaları açmayı, kapatmayı, dosya üzerine yazmayı, dosyaları okumayı, yeni dosyalar yaratmayı, silmeyi ve dosya yönetimi ile ilgili daha nice yararlı bilgileri anlatmaya çalışacağım.

    Giriş olayını fazla abartmadan hemen konuya girmekte sanırım yarar var. Çünkü bana oldukça uzun sürecek bir konuymuş gibi geliyor..

    Dosyayı Açmak

    Bir dosya üzerine yazmak ya da bir dosyayı okumak için öncelikle o dosyayı açmamız gerekir. Dosyamızı açabilmemiz için gereken fonksiyon fopen(); fonksiyonudur. Aşağıda bu fonksiyonun yazım kuralını görüyorsunuz.


    Kod:

    fopen("dizin\dosya", dosya_modu);
    Fonksiyonun ilk argümanı açacağınız dosyanın tam yolunu belirteceğiniz bölümdür. Eğer script`iniz açacağınız dosya ile aynı dizinde ise ekstradan dizin belirtmenize ihtiyaç yoktur. İkinci argüman ise dosya modudur. Buraya yazacağınız değer, dosyayı ne amaçla açtığınızı simgeleyecektir. Dosya modları şu şekildedir;
    • r: Dosyayı başından itibaren okumak için aç.
    • r+: Dosyayı başından itibaren hem okumak hem de yazmak için aç.
    • w: Dosyayı başından itibaren yazmak için aç. Eğer dosya mevcut değilse yeni bir dosya yarat, mevcutsa tüm içeriği sil.
    • w+: Dosyayı başından itibaren hem okumak hem de yazmak için aç. Eğer dosya mecvut değilse yeni bir dosya yarat, mevcutsa tüm içeriği sil.
    • a: Dosyayı başından itibaren yazmak için aç. Eğer dosya mevcut değilse yeni bir dosya yarat, mevcutsa dosyanın sonundan itibaren ekleme yap.
    • a+: Dosyayı başından itibaren okumak ve yazmak için aç. Eğer dosya mevcut değilse yeni bir dosya yarat, mevcutsa dosyanın sonundan itibaren ekleme yap.
    Bir dosyayı açarken kullanacağımız dosya moduna dikkat etmeliyiz. Script`in işlevine göre uygun bir mod ile dosyayı açmalıyız. Aşağıdaki örnekten yararlanarak fopen(); fonksiyonunun kullanımı hakkında bilgi edinebilirsiniz.


    Kod:

    if (fopen("kayitlar.txt", "a+")) echo("Dosya açıldı.");else echo("Dosya açılamadı.");
    Ayrıca yine fopen(); fonksiyonu sayesinde uzak sunucudaki ftp yahut http protokolünü kullanan belgeleri de açabiliriz. Fonksiyonun içine adres yazarken uymamız gereken mutlak kural adresi http://www.ornek.com/ şeklinde yazmaktır. Eğer sondaki yatık çizgiyi koymazsak fonksiyon görevini yerine getirmez. Genelde uzaktaki belgelere sadece okuma moduyla erişebiliriz. Diğer modlara izin verilmesi durumunda güvenlik tehlikesi yaratabileceğinden genelde sadece okuma izni verilir. Bununla ilgili bir örnek yazalım;


    Kod:

    fopen("http://www.ornek.com/", "r");
    Bu fonksiyonu kullanırken alabileceğiniz muhtemel bir hata vardır ki, o da "Permission Denied" yani bu işlemi yapmaya izninizin olmadığını belirten bir hatadır. Bu durumda chmod ayarlarına göz atmanız sorunu çözmek için yeterli olabilir.

    Dosyaya Yazmak ve Dosyayı Kapatmak

    PHP ile bir dosyaya yazmak için öncelikle o dosyayı açmamız gerekir. Bunu fopen(); ile nasıl yapacağımızı sanırım öğrendik. Dosyaya yazmak için PHP dilinde fputs(); ve fwrite(); fonksiyonları kullanılır. İkisinin de yazım şekli aynıdır. Aşağıdaki örneği inceleyin.


    Kod:

    <?php$yazi1 = date("d.m.Y")."\t".date("G:i:s")."\t"."ve ben ilk yazımı yazıyorum!\n";$yazi2 = date("d.m.Y")."\t".date("G:i:s")."\t"."ve ben ikinci yazımı yazıyorum!\n";$ac = fopen("kayitlar.txt", "w+");fputs($ac, $yazi1);fputs($ac, $yazi2);fclose($ac);?>
    Bu örnekte görüldüğü gibi ilk olarak yazacağımız metinleri belirledik, sonra dosyamızı açtık. Buraya kadar herşey bildiğimiz şeylerdi. Sonra yazı yazmak için fputs(); fonksiyonundan yararlandık. Son olarakta açtığımız dosyayı kapattık. fputs(); ve fwrite(); fonksiyonlarının genel yazım kuralı yukarıdaki örnekte kullandığımız gibidir. Yukarıdaki örnekte fonksiyonumuza sadece iki argüman girdik. Bunlar haricinde tercihe bağlı olarak kullanılan bir üçüncü argüman daha vardır. Bu argüman sayesinde dosyaya yazılacak olan maksimum byte sayısı belirtilir ve bu sayıya ulaşana dek yazım işlemi devam eder. Örneğimizde fputs($ac, $yazi1, 5); gibi bir değişiklik yaparsak, $yazi1 için sadece 5 byte`lık veri yazılacak ve fonksiyon sonlandırılacaktır.

    Dikkat ettiyseniz yazacağımız metinlerin arasında \t \n gibi karakterler bulunuyor. Bunların ne anlama geldiğini de yeri gelmişken izah edeyim. PHP ile çıktı aldığımız zaman kaynak kodlar genelde bitişik olarak ve düzensiz bir şekilde gelir. Bu elbette sayfa tasarımına yansımaz fakat kaynak kodları incelemeye çalıştığımızda bizi zor durumda bırakabilir. İşte bu karakter gruplarının kimisi burada devreye giriyor. Kimisi ise PHP tarafından kullanılan dolar işareti ($) ve ters bölme işareti (\) gibi işaretleri etkisizleştirmeye ve kullanabilmemize yarar. Kısaca bunların işlevlerini açıklamak gerekirse şunlar yazılabilir:
    • \\: Ters bölü işareti.
    • \': Tek tırnak işareti.
    • \": Çift tırnak işareti.
    • \$: Dolar işareti.
    • \r: Kaynak kod içinde satır başı yapmak için kullanılır.
    • \t: Kaynak kod içinde sekme (tab) yapmak için kullanılır.
    • \n: Kaynak kod içinde yeni satıra geçer.
    Konuyu fazla dağıtmadan dosya işlemlerine geri dönelim. Örneğimizde bilmediğimiz bir başka fonksiyon ise dosyayı kapatmaya yarayan fclose(); fonsiyonudur. Bu fonksiyonun yazım kuralı örnekte görüldüğü gibidir, yani bağlantıyı yüklediğimiz değişkeni fonksiyon içerisine yazarak kolayca bağlantıyı kapatabiliriz.

    Dosyayı Okumak
    • feof(); Fonksiyonu
    • fgets(); ve fgetss(); Fonksiyonları
    • fgetc(); Fonksiyonu
    • readfile(); Fonksiyonu
    • file(); Fonksiyonu
    • fread(); Fonksiyonu
    Dosya açmayı, yazmayı ve kapatmayı öğrendikten sonra bunları nasıl okuyacağımızı öğrenme vakti de geldi. Öncelikle dosya okuma işlemleri için kullanacağımız fonksiyonları ve bunların işlevlerini belirtelim.

    feof(); Fonksiyonu: Bir dosyanın sonuna kadar okunup okunamadığını belirtir. Başka bir deyişle bir dosyayı baştan sona okumak için kullanılır. Zaten fonksiyonun ismi "File End Of File" anlamına gelir. Okunmaya çalışılan dosyanın sonuna erişilmesi durumunda sonuç true (1) olarak dönecek, aksi durumda ise false (0) olarak dönecektir. Genel olarak bir while döngüsü eşliğinde kullanılır. Yazım kuralı aşağıdaki gibidir;


    Kod:

    feof($ac);
    Görüldüğü gibi bu fonksiyon tek bir parametre içerir ve içerdiği parametrede bir dosyayı açmak için kullandığımız değişkenin ismidir.

    fgets(); ve fgetss(); Fonksiyonları: Bir dosyadan satır satır veri okumak için fgets(); fonksiyonu kullanılır. Yazım kuralı şöyledir;


    Kod:

    fgets($ac, 256);
    Burada $ac değişkeni fopen(); ile dosyayı açan değişkendir. 256 rakamı ise maksimum okunacak byte miktarıdır. Fonksiyon yukarıdaki haliyle 255 byte okuyup sonlandırılacaktır.

    Bir de benzer olarak fgetss(); fonksiyonu vardır. Bu fonksiyonun benzerinden tek farkı, okunan dosya içerisindeki HTML tag`lerini yok ediyor olmasıdır. Yazım kuralı şöyledir;


    Kod:

    fgetss($ac, 100, "<b><u>");
    Yukarıda görüldüğü gibi ilk olarak dosyayı açmak için kullandığımız $ac değişkenini yazdık, sonra maksimum okunacak veriyi yazdık. En son yazdığımız argüman ise yok edilmemesini istediğimiz HTML tag`leridir. Fonksiyon belirtilenler haricindeki tüm tag`leri yok edecektir. Son bölüm isteğe bağlı olarak yazılabilir, hiçbir şey yazılmaması halinde tüm tag`ler yok edilecektir. Bu fonksiyonu kullanabileceğiniz alanlar genel olarak üyelerin üzerinde işlem yapabildiği dosyalar denilebilir. Örneğin üye bilgilerinin tutulduğu bir kayıt dosyamız var ve biz üye bilgilerini bu dosyadan alıyor olalım. Üye eğer kötü niyetli bir kişiyse herhangi bir bilgisini HTML kodu olarak girip sayfa düzenimizi bozabilir, hatta bir nevi hackleyebilir. Yazacağı bir JavaScript kodu ile kendi sayfasına yönlendirebilir. Kısacası sitenizi kötü emellerine alet edebilir. Bunları engellemek için PHP`ye dosyadan veri okuturken HTML tag`lerini yok etmek isteyebiliriz. İşte bu noktada bu fonksiyon işimize çok yarayacaktır.

    fgetc(); Fonksiyonu: Bir dosyadan tek bir karakter okumak için fgetc(); fonksiyonu kullanılır. Fonksiyon her çağrıldığında bir karakter okuyacaktır. İçerisine tek bir parametre alır, bu da makalemizde $ac olarak gösterdiğimiz dosyayı açmamıza yarayan argümandır. Yazım kuralı şöyledir;


    Kod:
    fgetc($ac);
    Bir örnekle pekiştirelim;


    Kod:

    $ac = fopen("kayitlar.txt", "r");echo fgetc($ac);fclose($ac);
    Görüldüğü gibi öncelikle dosyamızı açtık, sonra tek bir karakter okutmak için fgetc(); fonksiyonunu kullandık ve en son olarak dosyamızı kapattık.

    readfile(); Fonksiyonu: Bir seferde tüm dosyayı okumak için bu fonksiyonu kullanırız. Fonksiyon icra edilirken öncelikle dosya açılır, sonra okunur ve çıktı verilir. Dosyayı kendiliğinden açtığı için ekstadan bir fopen(); kullanmamıza gerek kalmaz. Genel yazım kuralını gösteren bir örnekle bu fonksiyonu geçelim;


    Kod:

    readfile("kayitlar.txt"); // Evet sadece bu kadar..
    file(); Fonksiyonu: Bu fonksiyon ile dosya açılır, okunur ve her satırı bir diziye (array) kaydedilir. readfile(); fonksiyonu ile oldukça benzerdir fakat tek farkı çıktıyı bir dizi değişkenine atıyor olmasıdır. Aşağıdaki örneği inceleyin;


    Kod:

    $dizi = file("kayitlar.txt");print_r($dizi);echo "<br>".$dizi[3];
    Burada dosya öncelikle açıldı, okundu ve her satırı $dizi dizisine birer eleman olarak kaydedildi. Sizin oluşturduğunuz kayitlar.txt belgesinin 4 satıra eşit ya da 4 satırdan fazla olduğunu düşünürsek yukarıdaki örnek gayet başarılı çalışacaktır. file(); fonksiyonu içerisine sadece kullanılacak olan dosyanın adresini alır. Başka bir parametre almaz.

    fread(); Fonksiyonu: Bir dosyanın istediğimiz kadar kısmını okumak için bu fonksiyonu kullanırız. Dosyadan çekeceğimiz veri miktarını byte değerinden yazarız. Yazım kuralı aşağıdaki gibidir.


    Kod:

    fread($ac, veri_miktari);
    Bunu bir örnekle pekiştirelim;


    Kod:

    $ac = fopen("kayitlar.txt", "r");echo fread($ac, 6); // Toplam 6 byte miktarında veri okuyoruz.fclose($ac);
    Dosyayı Silmek && Yeni Bir Dosya Yaratmak

    Dosya silmek için unlink(); fonksiyonunu kullanırız. Yazım kuralı aşağıdaki gibidir. İçerisine sadece silinecek olan dosyanın adresini alır.


    Kod:

    unlink("kayitlar.txt");
    Yeni bir dosya yaratmak için ise touch(); fonksiyonu kullanılır. Tek bir parametre alır, bu parametre de dosya adını belirtir. Yazım kuralı aşağıdaki gibidir.


    Kod:

    touch("kayitlar.txt");
    Dosya işlemlerinin birinci bölümü burada bitti. Makalede bir dosya üzerinde okuma ve yazma işlemlerini ve ayrıca dosya silme ve yaratma işlemlerini öğrendik. Bunları öğrenirken pek örnek veremedim, gelecek makalede zaten gerekli örnekleri bulacaksınız.

    Hoşçakalın.





    [Örnek Uygulama][Dosya İşlemleri - 1] Basit Ziyaretçi Defteri Yapımı

    Önceki makalede (Dosya İşlemleri - 1) adı geçen birkaç fonksiyonun kullanımı hakkında bilgi vermek amacıyla bu örneği hazırladım. Örneğin hemen hemen bütün kısımları zaten açıklama metinleri ile izah edildiği için, ekstradan açıklamalara girmek sanıyorum ki pek gerekmiyor.
    • mesajlar.txt: Mesajların yazıldığı dosya.
    • mesajlar.php: Mesajlar ziyaretçilere bu script aracılığı ile gösteriliyor.
    • yeni.php: Yeni mesaj eklemek için bu script kullanılıyor.
    Lafı kısa tutup hemen örnek uygulamanın kodlarını vereyim;

    mesajlar.php

    Kod:

    <?php# Dosyamızı açalım.$dosya = "mesajlar.txt";$ac = fopen($dosya, "r");# Tablo başlasın.echo("<table border=0>");# Mesajları ekrana basalım.while (!feof($ac)) { if ($x%2) $renk = "#f2f2f2"; // Gri else $renk = "#FFFFFF"; // Beyaz // Döngü her tekrar ettiğinde mesajımızı $mesaj değişkenine alıyoruz. $mesaj = fgets($ac); // Mesajı ekrana bastırıyoruz. echo(" <tr><td bgcolor=$renk><font face=verdana size=2><b>$mesaj</b></font></td></tr> "); $x++;}# Tablo Bitsinecho("</table>");?>
    yeni.php

    Kod:

    <?php# Verilerin yazılacağı dosya$dosya = "mesajlar.txt";$ac = fopen($dosya,"a"); // Deftere devamlı eklemeler yapılacağı için "a" modunda açtık.# If kontrolü: mesaj post edilmiş mi edilmemiş mi?if (!$_POST[gonder]) { # Mesaj gönderilmemişse form gösterilsin. echo(" <html> <body> <form action=$PHP_SELF method=post> <table> <tr><td>Adınız:</td><td><input name=adi type=text></td></tr> <tr><td>Mesaj:</td><td><input name=mesaj type=text></td></tr> <tr><td></td><td><input name=gonder type=submit value='Yolla'></td></tr> </table> </form> </body> </html> ");}else { # Mesaj gönderilmişse $dosya içerisine yazılsın. // Her mesaj $dosya içerisinde ayrı bir satıra kaydedilsin diye "\n" kullandık. $yazilacak_metin = "$adi -> $mesaj"."\n"; fputs($ac, $yazilacak_metin); fclose($ac); echo(" <html> <body> <meta http-equiv=refresh content=\"5; URL=mesajlar.php\"> <p>Mesajınız deftere eklendi. Yönlendiriliyorsunuz..</p> <blockquote>Eğer 5 saniye içinde yönlendirme başlamadıysa <a href=mesajlar.php>burayı</a> tıklayın.</blockquote> </body> </html> ");}?>
    Scripti çalıştırmak için bir de "mesajlar.txt" dosyası oluşturmanız gerekecek. Bu üç dosyayı (mesajlar.txt dahil) aynı dizine koyup çalıştırdığınızda hiçbir ayar gerekmeksizin kullanmaya başlayabilirsiniz. Script üzerinde hiçbir kontrol vs. olmadığı için, bu script`i bu haliyle kendi sitenizde kullanmamanız önerilir. Bu haliyle kullanmanız durumunda kötü niyetli insanlar tarafından ziyaretçi defteriniz amacından saptırılabilir, bir nevi "hacklenebilir."

    Örnek zannediyorum ki yeterince açıklayıcı oldu, ekstra birşey yazma ihtiyacı -dediğim gibi- duymuyorum.

    Hoşçakalın.




    Sayfa Üzerinden Veri Gönderip Okuma: (yeni başlayanlar)
    öncelikle bu güzel dersleri bizlerle paylaştıkları için Restart ve Felix arkadaşlarımıza teşekkür
    ederim...
    aslında size göstereceğim örnek Restart ve Felix arkadaşlarımızın gönderdikleri örneklerin yanında uyduruk kalacağını biliyorum ama aranızda olayı kavrayamamış arkadaşlarımız için bu örneği hazırlamakta uygun gördüm...
    1. ilk önce gonder.php ve al.php adında iki sayfa hazırlıyoruz,
    eğer sayfa hazırlamaya üşenirseniz diye sizler için rapide upload ettim sayfaları:
    http://rapidshare.de/files/4431038/veri.zip.html
    gonder.php 'nin içeriği:
    Kod:
    <div align="center"><?phpecho ("<form action=./al.php method=post><table><tr><td>Isminiz:</td><td><input name=ad type=text></td></tr><tr><td>Soyadiniz:</td><td><input name=soyad type=text></td></tr><tr><td>Mailiniz:</td><td><input name=mail type=text></td></tr><tr><td></td><td><input name=gonder type=submit value='Yolla'></td></tr></table></form></body></html>");?></div>
    al.php 'nin içeriği:
    Kod:
    <?phpecho ("<form action=./gonder.php method=get>adiniz: $ad<p>soyadiniz: $soyad</p> <p>mailiniz: $mail</p></form>")?>
    gördüğünüz gibi gönder.php'deki sizden istenilen bilgileri giriyorsunuz sonra "method=post" yani bilgileri başka bir sayfaya aktarıyorsunuz...
    al.php'de ise göndermiş olduğumuz bilgileri alıyoruz ve ekrana yazdırıyoruz.
    umarım sizlere açık ve net bir şekilde anlatabilmişimdir.. herkese iyi çalışmalar.
 
Son düzenleme: