PHP'ye Giriş
Önceki PHP ve MySQL ile Web Programlama Sonraki
PHP'ye Giriş
PHP sunucu taraflı (server side), HTML ile uyumlu bir betik dilidir. Daha önce kullandığım “programlama dili” ifadesi PHP için yüzde yüz açıklayıcı değildir. PHP, HTML de olduğu gibi bir derleyici tarafından derlenmez, sadece sunucudaki php programı tarafından yorumlanır. C bilen birisi için PHP öğrenmesi çok basit olan bir dildir, öyle ki dosya işlemleri gibi karışık konularda PHP, C’den çok daha basittir.
Yazdığınız PHP kodları hiçbir zaman sitenizin ziyaretçisine görüntülenmez. Ziyaretçi sayfanın kaynağını görüntülese bile göreceği sizin PHP kodlarınızın sunucu sistemdeki php programı tarafından HTML’ye çevrilmiş halidir. Aşağıdaki kod kümesini incelerseniz daha iyi anlayacağınızı sanıyorum (PHP’ye henüz bir giriş yapmadığım için kodları anlamayabilirsiniz, fakat yine de C’ye az da olsa aşina olanlar bir anlam çıkartacaktır).
<?php
  printf(“Bu bir PHP dosyasıdır.<br>\n”);
  print(“Bu bir PHP dosyasıdır.<br>\n”);
  echo (“Bu bir PHP dosyasıdır.<br>\n”);
  echo “Bu bir PHP dosyasıdır.<br>\n”;
?>
Yukarıdaki dört kod satırıda ekrana “Bu bir PHP dosyasıdır.” yazdıracaktır. Ve web istemcinizden sayfanın kaynağına baktığınız zaman sadece
Bu bir PHP dosyasıdır.<br>
Bu bir PHP dosyasıdır.<br>
Bu bir PHP dosyasıdır.<br>
Bu bir PHP dosyasıdır.<br>
gibi bir içerik görürsünüz. Yazdığınız kodlar sunucu sistemdeki php programı tarafından normal HTML kodlarına çevrilmiştir ve ziyaretçi bu kodlardan başka herhangi bir içerik göremez.
Dikkat ettiyseniz sayfamızın kaynağındaki kodlar dört satır halinde yazılmış, eğer PHP programımızda her metinden sonra gelen “\n” karakterini kaldırsaydık sayfamızın kaynağındaki komutlar tek satıra yerleşirdi.
Fakat bu sayfanın ziyaretçiye görünen kısmını değiştirmediği için üzerinde fazla durulması gereken bir konu değil.
Bir diğer husus da kodlarımızda kullandığımız <br> etiketi. Evet PHP içinde doğrudan doğruya HTML etiketleri kullanabilmemiz bize çok büyük kolaylıklar sağlayacak. PHP dosyaları sunucu sistemde .php ya da .php3 uzantısı ile saklanır (.php3, PHP’nin 3. Sürümü için kullanılmaktadır). Dosyamızda PHP kodlarını kullandığımız yeri göstermek için <?php ?> ya da <? ?> etiket aralıklarını kullanırız. Bu etiketlerin kullanıldığı yerden itibaren sunucu etiket aralığındaki komutları php yorumlayıcısına gönderir, php yorumlayıcısı da bu kodları düz HTML kodlarına çevirir.
Denemelerinizi bir UNIX ya da türevi işletim sistemi üzerinde yapmanızı tavsiye ederim, çünkü PHP ile birlikte kullanılan bir çok işlev Windows altında çalışmamakta ya da sorun yaratmaktadır.
Elinizin altında PHP+MySQL desteği bulunan bir sistem olduğunu varsayarak bölüme başlıyorum.
Öncelikle PHP’nin yazım kurallarından söz etmek istiyorum. Daha öncede belirttiğim gibi PHP kodları <?php ?> ya da <? ?> etiketleri arasında kullanılır. Yazdığımız her komuttan sonra ; işareti kullanırız (C’ye benziyor demiştim ;)). Bir web sayfasında veya formdan gelen değişkenleri adlarının başına $ işaret koyarak sembolize ederiz ve değişken adlarında Türkçe karakter kullanamayız.
PHP ile Ekrana Yazı Yazma
PHP konu başlığında verdiğim örnekte olduğu gibi ekrana yazı yazmak için dört değişik yol kullanırız (en azından ben o kadar biliyorum!)
  printf(“Bu bir PHP dosyasıdır.<br>”);
  print(“Bu bir PHP dosyasıdır.<br>”);
  echo (“Bu bir PHP dosyasıdır.<br>”);
  echo “Bu bir PHP dosyasıdır.<br>”;
Yukarıdaki dört satırda ekrana “Bu bir PHP dosyasıdır.” yazacaktır. Dikkat ederseniz her komuttan sonra bir ; işareti kullanılıyor. Bu işareti kullanmamamız halinde php programı hata verecektir. Şimdi içinizde “Bu yazıyı HTML ile daha kısa bir kod kümesi ile yazmak mümkün!” diye düşünenler olacaktır (bende ilk başta öyle düşünmüştüm :-), fakat ilerde ekrana değişken ile gelen bilginin yazdırılmasını gördükten sonra sizde bu yazım şeklinin gereksiz olmadığını anlayacaksınız.
Aşağıdaki örnekte $deger adlı değişkene değer atayıp ekrana yazdırıyorum.
<?php

/* Buralar yorum satırı*/
# Burası da tek satırlık yorum aralığı

$değer = "Bu değişkenin değeri";
echo $değer;

?>
Bu dosyayı yazıp ilk.php diye kaydettikten sonra web istemcinizin adres satırına http://localhost/ilk.php yazarsanız ekranda “Bu değişkenin değeri” yazısını göreceksiniz (Kullandığınız sunucunun ismi localhost ve ilk.php dosyasının da ana www dizininde olduğunu varsaydım).
PHP ile sadece metinsel işlemler değil, matematiksel işlemler de gerçekleştirebilirsiniz. Bunun için C programlama dilinde olduğu gibi toplama için +, çıkarma için -, çarpma için *, bölme için / ve kalan bulma için % sembolleri kullanılır.
İsterseniz birkaç örnek ile matematiksel işlemlere giriş yapalım.
<?php
###########################
#   Matematiksel İşlemler #
#         mat.php         #
###########################

# Değişkenler tanımlanıyor
$a = 10;
$b = 2;
$c = 3;

# Kullanılacak matematiksel işlevler tanımlanıyor
$toplam = ($a + $b + $c);
$carpim = ($a * $b * $c);
$bolum = ($a / $b);
$kalan = ($a % $c);

# Çıktılar ekrana yazdırılıyor
echo "Tanımlı değişkenlerin toplamı: <b>$toplam</b><br>\n";
echo "Tanımlı değişkenlerin çarpımı: <b>$carpim</b><br>\n";
echo "Birinci ve ikinci değişkenin bölmesi sonucu bölüm: <b>$bolum</b><br>\n";
echo "Birinci ve üçüncü değişkenin bölmesi sonucu kalan: <b>$kalan</b>";
?>
Yukarıdaki örnek, programlama ile daha önce uğraşmamış birisi için biraz karışık olabilir. Önce değişkenlere değer atanır ve belirli işlevler kullanılarak bu değerler istenilen işlemlerden geçirilerek farklı bir sonuç elde edilir. Tıpkı matematikte kullanılan işlevler gibi, belirli işlemler istenilen değişken değerine uygulanır.
Yani, y = f(x, w, z) = x + w + z gibi, bizde y yerine $toplam diye bir değişken ve x, w ve z yerine $a, $b ve $c gibi değişkenler kullandık. Matematikte kullanılan işlevlerden tek farkı kullanılan değişken tiplerinin farklı olması ve matematiksel işlemler dışında da işlemlerin yapılabiliyor olmasıdır.
Bizim örneğimizde bazı matematiksel değerlerin toplamı, çarpımı ve bölümü alındı. Bu matematiksel işlemleri istenilen amaç doğrultusunda uzatıp karmaşıklaştırmak mümkün.
Yazdığımız PHP dosyasının HTML kaynak kodu
Tanımlı değişkenlerin toplamı: <b>15</b><br>
Tanımlı değişkenlerin çarpımı: <b>60</b><br>
Birinci ve ikinci değişkenin bölmesi sonucu bölüm: <b>5</b><br>
Birinci ve üçüncü değişkenin bölmesi sonucu kalan: <b>1</b>
gibi düz HTML kodlarından ibaret olacaktır. Ziyaretçinin hiçbir şekilde bizim PHP kodlarımızı görme şansı yoktur. Kaynak kodundan kullandığımız \n karakteri HTML çıktımızda satırların tek bir satır gibi değil de alt alta yazılmış satırlar olarak oluşmasını sağladı. Bu gibi durumlarda kullanımı gerekli değilse de kullanımının gerekli olduğu durumlar kesinlikle vardır.
Birde bir önceki örneği dikkatli bir şekilde incelediyseniz orada değişkenin değerini verirken “ (tırnak işareti) kullanmama karşın son örnekte kullanmadım. Tırnak işareti kullanılmadığı zaman PHP değişkenimizin sayısal değer taşıyan bir değişken olduğunu anlayacaktır.
Diyelim ki elimizde iki tane metin bilgisi taşıyan değişken var. Bunlar $ad = "Fehmi Noyan" ve $soyad = "İSİ" olsun. Bu değişkenlerin değerlerini birleştirip tek bir değişkende saklamak mümkündür. Saklamak istediğimiz tek değişken $ad_soyad ise kullanmamız gereken komut kümesi
$ad_soyad = $ad . " " . $soyad;
gibi bir satırdır. Bu işlem için çok farklı birleştirme yolları olsa da bu kullanım birçok yerde işinizi görecektir.
Web Formundan Bilgi Almak
Buraya kadar anlattıklarım sadece bir giriş içindi (şimdiki aşama da daha işin başı, yani giriş bitmedi). Fakat sizinde bildiğiniz gibi dinamik bir sitede değişkenlerin değerleri kullanıcı tarafından sunucu sisteme yollanır. Bu iş için ya form yöntemi ya da adres satırından bilgi girişi yolu kullanılır. En yaygın ve kullanışlı olanı form yöntemidir.
<! --- ad_soyad.html --- >
<html>
<head><title>Ad ve Soyad Bilgisi</title></head>
<body bgcolor="#ffffff" text="#000000">
<form action="ad_soyad.php" method="get">
Adınız: <input type="text" name="ad"><br>
Soyadınız: <input type="text" name="soyad"><br>
<input type="submit" value="Gönder">
</form></body></html>
<?
################
# ad_soyad.php #
################
 echo "Adınız $ad ve soyadınız $soyad.";
?>
Yukarıdaki örnek dosyaları yorum satırlarında belirtilen adlar ile yazıp kaydettikten sonra, istemcinizin adres satırına http://localhost/ad_soyad.html yazıp karşınıza çıkacak formu doldurun. "Gönder" düğmesine bastıktan sonra PHP dosyamız çalışacak ve bize istenilen çıktıyı verecektir. Burada dikkat etmeniz gereken nokta istemcinizin adres satırındaki bilgidir. Eğer ben formda adım için “Fehmi Noyan” soyadım içinse “ISI” (Türkçe karakter kullanmamak için büyük i kullanmadım) bilgilerini girersem adres satırında
http://localhost/ad_soyad.php?ad=Fehmi+Noyan&soyad=ISI
gibi bir satır görünecektir. Dikkat ederseniz form ile gönderilen bilgilerin name="..." kısmının PHP dosyamızdaki değişken adlarını ve adres satırındaki PHP dosyası ve ? karakterinden sonraki kısımların PHP dosyamıza gidecek değişkenlerin değerini verdiğini fark edeceksiniz.
HTML dosyamızda oluşturduğumuz web formunda kullandığımız <input> etiketi içindeki name="..." kodu bize o etiket ile gelen bilginin action=”...” kodu ile belirtilen dosyada aynı isimli değişken olarak kullanılacağını belirtir. Web formunu doldurmadan da, sadece adres satırına yukarıdaki satırı girerek de formumuza bilgi yollayabiliriz. Satırda PHP dosyamızın isminden sonra bir ? karakteri kullanılır, daha sonra her değişkenin adı ve değeri birbirinden & karakteri ile ayrılır. Bu yol ile web formlarından bilgi göndermek mümkündür ama pek kullanışlı değildir.
Formumuzda get yöntemini kullandığımız için adres satırında girdiğimiz bilgiler görüntülendi. Aynı HTML dosyasını formun bilgileri gönderme metodunu post olacak şekilde ayarlayıp tekrar deneyin. Bu sefer adres satırında girilen hiçbir bilgi olmayacaktır. Yani sadece
http://localhost/ad_soyad.php
gibi bir satır olacaktır. Ben örneklerimde bundan sonra post yöntemini kullanacağım.
Diziler
Diziler bazen kullanılması kaçınılmaz olan ve her PHP programcısının kullanımını bilmesi gereken elemanlardır. Adından da anlaşılacağı üzere, diziler bir tek değişkenin değeri içerisinde birden çok değer saklar. Mesela içerisinde haftanın günlerini barındıran bir dizi değişken
  $hafta = array(“Pazartesi”, ”Salı”, ”Çarşamba”, ”Perşembe”, ”Cuma”, ”Cumartesi”);
şeklinde tanımlanabilir. Dikkat ederseniz haftanın son günü olan “Pazar” dizi içerisinde yer almıyor. Pazar’ı dizi içerisine dahil etmek için
  $hafta[] = ”Pazar”;
şeklinde bir ifade kullanabiliriz. Böylece son belirtilen “Pazar” elemanı dizinin son elemanı olmuş olur.
Dizi içerisindeki bir elemanı ekrana yazmak için, mesela dizinin 3. elemanı,
  echo $hafta[2];
komutu kullanılır. Dizinin 3. elemanı için neden “2” rakamını kullandık? Bunun sebebi dizilerin ilk elemanının 1. değil 0. eleman olmasıdır. Bir dizi değişkeninin eleman sayısı count() işlevi ile öğrenilebilir.
  echo count($hafta);
ifadesi ekrana 7 rakamını basacaktır. Dizi değişkenleri ve bunlar üzerinde işlem yapan işlevler ile ilgili bilgiyi PHP Manuel’in “Array Functions” kısmında bulabilirsiniz.
Mantıksal İşleçler
Bir PHP dosyasında en çok kullanacağınız ifadeleri oluşturan mantıksal işleçleri önceden programlama mantığı almamış bir kişi için ilk etapta anlaşılması biraz zor gelebilir fakat bu bölümü anlatırken bu durumu da göz önünde bulundurdum ve olabildiğimce sade ve anlaşılır bir dil kullanmaya gayret gösterdim.
Bu etapta tekrar hatırlatmak istiyorum, PHP ile kullanılan mantıksal işleçleri C dili ile kullanılanların tamamen aynısıdır ve kullanım şekilleri arasında hiçbir fark yoktur. İlk önce kullanılan işleçlerinin hangileri olduğunu ve daha sonra bunların kullanım şekillerini anlatmayı daha uygun gördüm.
 İşleç İsmi
&&Ve
||Veya
==Eşittir
!Değil
!=Eşit değil
>Büyüktür
<Küçüktür
>=Büyük ya da eşittir
<=Küçük ya da eşittir
Yukarıdaki işleçlerini mantıksal ifadelerde karşılaştırma ve verilen koşulun doğruluğunu sınama için kullanacağız. İlk iki işleç dışında, az çok matematik bilgisi olan birisi diğer işleçlerinin kullanım şeklini kestirmiştir. Aslında ilk ikisi de matematikte işlenmiş olan mantık konusunun bir parçasıdır.
Kullanacağımız ifadelere gelen bilgiler bilgisayar dilinde iki şekilde değerlendirilir. 0 ve 1, yani yanlış ve doğru. Kuracağımız tüm ifadeler bu iki değer çevresinde sınırlıdır.
&& İşleçi (Ve)|| İşleçi (Veya)
0 && 0 = 00 || 0 = 0
1 && 0 = 01 || 0 = 1
0 && 1 = 00 || 1 = 1
1 && 1 = 11 || 1 = 1
Yukarıda && ve || işleçlerinin aldıkları değerler doğrultusunda oluşturdukları değerleri yazdım. Bu karşılaştırma işleçlerini birazdan anlatacağım mantıksal ifadeler içerisinde kullanacağız.
PHP Komutları
if
if komutu bir ifadenin doğru olması halinde izleyen komut kümesini işletir. İngilizce anlamı “eğer” olan kelime üstlendiği görev bakımından da anlamı ile bir bütünlük içindedir.
<?
################
#    if.php    #
################

$a = 5;
$b = 3;
if ( $a > $b )
 {  echo “a sayısı b  sayısından büyüktür.”; }
?>
Yukarıdaki kod parçası $a değişkenindeki değerin sayısal olarak $b dekinden büyük olması halinde komut kümesinde belirtilen kodu yerine getirip ekrana “a sayısı b sayısından büyüktür.“ metnini basacaktır. Aksi taktirde (yani $a’nın sayısal değeri $b’ninkinden küçük ise) hiçbir işlem yapılmadan komut kümesindeki kod atlanır.
if... else ...
Bu komutta if komutunda olduğu gibi belirtilen ifadenin doğru olması halinde if ile belirtilen komut kümesini işletir, ifadenin yanlış olması halinde ise else ile belirtilen komut kümesi işletilecektir.
<?
###################
#   if_else.php   #
###################

$a = 2;
$b = 3;
 if ($a > $b) {
     echo “a sayısı b sayısından büyüktür.”;
 } else {
    echo “b sayısı a sayısından büyüktür.”;
 }
?>
Parantez içindeki mantıksal ifadenin doğruluğu halinde if komutunu izleyen komut kümesini (“{“ ve “}” işaretleri ile sınırlı bölge) işletilir. Yukarıda $a ile belirtilen değişkenin sayısal olarak değeri $b ile belirtilenden büyük olması halinde ekrana “a sayısı b sayısından büyüktür.” metni aksi taktirde, yani $a değişkeni sayısal olarak $b'den küçükse, ekrana “b sayısı a sayısından büyüktür.” metni basılacaktır. Komut kümesinde belirtilen kod sadece ekrana yazı yazma değil, her türlü işlem için düzenlenebilir.
while
Yine İngilizce anlamı “esnasında” olan kelime yaptığı görev itibari ile anlamına yakındır. Parantez içinde belirtilen koşul doğru olduğu sürece istenilen komut kümesini işletir. Aşağıdaki örnek ilk bakışta biraz karışık gelebilir fakat dikkatli ve adım adım takip ederseniz pek de karışık olmadığını anlayacaksınız.
<html>
<head><title>HTML içinde kullanılan PHP</title>
</head>
<body bgcolor="#ffffff" text="#000000">

<?
################
#  while.php   #
################

$a = 1;
while($a < 7):
 echo “<h$a>Bu h$a ile yazılmış bir başlık.</h$a><br>\n”;
 $a = $a + 1;
 endwhile;
?>

</body>
</html>
Yukarıdaki örnek hem while döngüsünün kullanımına hem de HTML içinde PHP kullanımına güzel bir örnek oluşturuyor. Kullandığım while döngüsünü aşağıdaki gibi de yazabilirdim.
<html>
<head><title>HTML içinde kullanılan PHP</title>
</head>
<body bgcolor="#ffffff" text="#000000">

<?
################
#  while.php   #
################

$a = 1;
while($a < 7)
{
 echo “<h$a>Bu h$a ile yazılmış bir başlık.</h$a><br>\n”;
 $a++;
}
?>

</body>
</html>
Sonuç yine aynı olacaktır. Kullanım açısından bir fark yoktur hangisinin kullanılacağı programcıya kalmıştır fakat ben örneklerimde hep ikinci kullanımı tercih ediyorum.
Yukarıdaki örnekte yabancı olduğunuz bir kullanım $a++ ifadesidir (Bu kullanımın aynısı C’de de vardır) Bu ifade $a = $a + 1 ifadesi ile aynıdır (Programcılıkta çok kullanılan bir ifadedir fakat deneyimi olmayanlar biraz zorlanacaktır). Bunun anlamı, ”$a’daki değeri bir arttır ve sonra bu değeri $a’nın yeni değeri olarak ata” dır. Yani $a = 1 ise $a++’dan sonra $a = 2 olacaktır. Aynı şekilde $a--'de, “$a’nın değerini bir azalt ve bu değeri $a’nın yeni değeri olarak ata” dır.
Yukarıdaki örnekte ilk olarak $a değişkenine 1 değeri atanıyor ve bu <h$a> ifadesi ile bir HTML etiketine çevriliyor. $a = 1 değeri için bu ifade <h1>, $a = 2 için bu ifade <h2> ... diye değerler alır. while döngüsü ile $a’nın alabileceği en son değerin 6 olduğu belirtilmiştir ($a < 7, yedi olduğu an döngü son bulur!). $a’nın 7 değerini alması ile belirtilen koşul yanlış olur (yani 0) ve döngü işletilmez. Eğer $a++ ifadesi kullanılmamış olsaydı, program sonsuz döngüye girecekti bu da ekrana sonsuz kere <h1> etiketi ile belirtilen metnin basılması demektir. (Aslında sunucu sistemdeki PHP ayar dosyasında öntanımlı olarak PHP dosyalarının maksimum çalışma süreleri 30 saniye olarak belirlendiği için sonsuz döngü sözcükleri tam olarak doğru değildir).
while döngüsünde koşul önce gözden geçirilir, daha sonra işlemler gerçekleştirilir.
do ... while
do...while döngüsü, while döngüsü ile aynı işleve sahiptir. Yalnız arada bir fark vardır. While döngüsünde koşul döngüye girilmeden kontrol edilir buna karşın do....while döngüsünde koşul döngünün sonunda kontrol edilir.
<?
$a = 0;
do {
  print $a;
} while($a > 0);
?>
Yukarıdaki kod normal while döngüsü ile yazılmış olsaydı, yani aağıdaki gibi
<?
$a = 0;
while($a > 0) {
  print $a;
}
?>
ekrana hiçbir çıktı vermeyecekti. Halbuki ilk örnekte ekrana “0” basılacaktır. Do....while ile oluturulan bir döngü while ile de oluşturulabilir ve benim şahsi görüşüm, while döngüsünün kullanımı daha kolaydır. Tabi ki bu döngünün de kendine has kullanım alanları vardır ama ben şu ana kadar kendi yazdığım betiklerde bu tür döngüler için hep while döngüsünü kullandım.
for
for döngüsü de hemen hemen aynı işlevi görür. Kullanım şeklini, while döngüsündeki örnek ile aynı çıktıyı verecek bir örnek ile açıklamak istiyorum.
<html>
<head><title>HTML içinde kullanılan PHP</title>
</head>
<body bgcolor="#ffffff" text="#000000">

<?
################
#   for.php    #
################

 for ($a = 1; $a < 7; $a++)
 {
  echo "<h$a>Bu h$a ile yazılmış bir başlıktır.</h$a><br>\n";
 }
?>
</body>
</html>
Yukarıdaki kod da while döngüsündeki ile aynı çıktıyı verir. for döngüsünde değişkenin başlangıç değeri ilk olarak yazılır, daha sonra koşul ve en sonunda ise değişken için işletilmesi gereken bölüm gelir. Yani kullanımın kalıbı
   for (ilk_değer;koşul;işlem)
şeklindedir.
Tabii benim kullandığım örnek tüm döngüler için geçerli, öyle durumlar ile karşılaşırsınız ki alternatifiniz olmaz yani sadece for ya da while döngüsünü kullanabilirsiniz. Nasıl olsa hepsi aynı işi yapıyor diye üstten bakıp geçmeyin, iyice kavrayın.
switch
switch döngüsü aslında iç içe geçmiş if döngüleridir. Fakat, kişisel deneyimlerime dayanarak söylüyorum, birçok if kullandığınız bir döngüde iş bazen gerçekten içinden çıkılmaz bir hal alıyor. Mesela bir web formu ile (drop-down menu ile) size bir değer gelecek. Siz bu değerin ne olduğunu anlamak istiyorsunuz. Bunun için menüde önceden tanımlı değerler arasında bir secim yapılır. İşte bu seçim için switch döngüsü kullanılır. Aşağıdaki dosyaları yorum kısımlarında belirtilen isimler ile kaydedin ve daha sonra istemcinizden menu.html dosyasını açın.
<!-- menu.html adı ile kaydedin -->
<html>
  <head>
    <title>Menu</title>
  </head>
  <body bgcolor="#ffffff" text="#000000">
    <form action="menu.php" method="post">
      <b>İşletim sisteminizi seçin</b><br>
      <select name=”os_type” size=”1”>
        <option value=”win”>Windows 9x</option>
        <option value=”winnt”>Windows NT</option>
        <option value=”linux”>Linux</option>
        <option value=”unix”>UNIX</option>
        <option value=”os2”>OS/2</option>
        <option value=”macos”>MacOS</option>
      </select>
      <input type="submit" value=”  Sorgula  “>
    </form>
  </body>
</html>
<?
// menu.php adı ile kaydedin

switch($os_type)
{
  case “win” :
     echo “Kullandığınız işletim sistemi Windows 9x”;
     break;
  case “winnt” :
     echo “Kullandığınız işletim sistemi Windows NT”;
     break;
  case “linux” :
     echo “Kullandığınız işletim sistemi Linux”;
     break;
  case “unix” :
     echo “Kullandığınız işletim sistemi UNIX”;
     break;
  case “os2” :
     echo “Kullandığınız işletim sistemi OS/2”;
     break;
  case “macos” :
     echo “Kullandığınız işletim sistemi MacOS”;
     break;
}
?>
Yukarıdaki örnek kullanıcıya kullandığı işletim sistemini soruyor ve gelen cevap doğrultusunda döngüde belirtilen kısmı işletiyor. Kullandığım break komutu programın o kısmının işletilmesi halinde döngüden çıkılmasını sağlar, yani kullanıcı işletim sistemin Linux olarak işaretlemişse Windows, WindowsNT ve en son Linux bölümü işletilir. Linux bölümündeki “Kullandığınız işletim sistemi Linux” metni ekrana basılır ve bir sonraki komut olan break işletilir, break komutunun işlemesi ile döngüden çıkılır ve böylece diğer değerler kontrol edilerek vakit kaybedilmez.
switch döngüsünde kullanılan ve benim şu örnekte kullanmadığım bir özelliği daha var: default seçeneği.
Bu seçenek diğer hiçbir seçim doğru olmadığı taktirde çalıştırılacak kısımdır. Bir örnek vermek gerekirse.
<?
// menu.php adı ile kaydedin

$i = 5;
switch($i)
{
  case “2”:
     echo “Değeri 2”;
     break;
  case “3”:
     echo “Değeri 3”;
     break;
  default:
     echo “Değeri bilinmiyor”;
}
?>
Bu kod ekrana “Değeri bilinmiyor” yazacaktır. Çünkü siz $i değişkenine tanımlı olan 2 ve 3 değerleri dışında ne değer verirseniz verin bu iki koşul dışında kalan bölüm yani default ile tanımlı bölüm işletilecektir.
Bazı PHP İşlevleri
Include() ve Require() işlevleri
include ve require işlevleri bir PHP programcısının hayatını kolaylaştıran başlıca işlevlerdendir. Bu iki işlevin görevleri birbirinin aynı olsa da işleyişlerinde ufak ama önemli bir fark vardır. Bu iki işlev parametre olarak aldıkları dosyayı sanki o dosyanın tüm içeriğini yazılmışçasına işler. Mesela
<?
#################
#  inc_req.php  #
#################

include (“./dosya.html”);
require (“./dosya.html”);

?>
Bu PHP kodu bulunduğu dizindeki dosya.html dosyasını iki kere ekrana basar. Yani sanki siz o dosyanın içeriğini elle yazmışsınız gibi çalışır. Bu iki işlev arasındaki fark, require() işlevi sadece gerektiği durumlarda dosyayı işler fakat include() işlevi dosya ekrana basılmayacak olsa bile (bir döngü içinde olabilir) dosyayı açıp hafıza kaybına sebep olur. Bunun için include() işlevini kullanmanızın zorunlu olmadığı durumlarda require() işlevini kullanmanız performansı arttıracaktır.
mail() işlevi
Adından da anlayacağınız üzere PHP’de e-posta göndermek için kullanılan işlevdir. Kullanımı çok basit ve zahmetsiz olmasına karşın eğer denemelerinizi evde bir Windows sistemi üzerinde gerçekleştiriyorsanız bu işlevi kullanmak için bilgisayarınıza bir de eposta sunucusu kurmanız gerekli (ne yazık ki PHP ile kullanılan birçok işlev Windows altında sorun çıkarıyor). Kurulu bir Linux sistemde böyle bir sorununuz yok, çünkü Linux ile birlikte kurulan sendmail programı e-posta gönderme işinizi hallediyor.
<?
######################
#   mail_gonder.php  #
######################

mail ($kime, $konu, $mesaj, ”From: $kimden\n”);

?>
Yukarıdaki tek satır $kimden değişkeni ile gelen kişinin adresi ile $kime adlı adrese $konu adlı ve içeriği $mesaj olan e-postayı gönderir. “From:” bölümü e-postanın kimden geldiğini belirtir. Tabi yukarıdaki PHP dosyasının çalışabilmesi için bu dosyaya gerekli bilgileri yollayacak HTML dosyasının da yazılması gerekli.
system() işlevi
Bu işlev PHP bir sistem modülü olarak kurulduğunda işletilebilir bir işlevdir. C programlama dilindeki system() işlevi ile aynı görevi yapar. Yani işleve parametre olarak girilen komutu işletim sistemi üzerinde işletir.
<?
##################
#   system.php   #
##################

$dizin_icerigi = system(“ls”);
echo $dizin_icerigi;
?>
Yukarıdaki örnek PHP dosyamızın bulunduğu dizinin içeriğini ekrana basar.
isset() ve unset() işlevleri
isset() işlevi bir değişkenin içersinde bir değer bulunup bulunmadığını kontrol eder. Bazen bir PHP programında değer atanmamış değişkenler de bulunabilir. Bu değişkenler boş yere bilgisayarın hafızasında yer işgal eder. Ayrıca bu işlevi bir formdan bilgi alırken bilginin gönderilip gönderilmediğini kontrol etmek için de kullanabiliriz.
unset() işlevi ise kendisine parametre olarak verilen değişkeni yok eder. Kullanımları isset($degisken) ve unset($degisken) şeklindedir.
PHP ile Dosya İşlemleri
Daha öncede belirttiğim gibi PHP, C programlama dili ile birçok benzerlik göstermesine rağmen dosya işlemleri gibi uğraştırıcı işlemlerde programcıya büyük kolaylıklar sağlar. PHP’de dosyalar ile kullanılabilecek birçok işlev olmasına rağmen (altmıştan fazla!) burada sadece dosya ve dizin açma, dosyadan ve dizinden okuma ve dosyaya bilgi yazma gibi konulara değineceğim.
fopen() işlevi
fopen() işlevi PHP’de dosyaları açmak için kullanılır. İşleve parametre olarak iki değer girilir. Birincisi, dosya adı ve ikinci de üzerinde işlem yapılacak dosyanın hangi işlem için kullanılacağıdır.
<? fopen(“dosya_adı”, ”amaç”); ?>
İşlevin kullanımı yukarıdaki kalıba göredir. “dosya_adı” ile belirtilen yere üzerinde işlem yapılacak dosya tam yolu ile yazılmalıdır, “amaç” kısmına ise dosyanın açılacağı kip yazılır.
KipKullanım Amacı
r Dosya sadece okuma için açılır. İmleç dosyanın başında konumlanır.
r+ Dosya hem yazma hem okuma için açılır. İmleç dosyanın başında konumlanır.
w Dosya yazma için açılır. Eğer aynı isimli dosya varsa silinir ve yeniden oluşturulur.
w+ Dosya hem yazma hem okuma için açılır. Eğer aynı isimli dosya varsa silinir ve yeniden oluşturulur.
a Dosya sadece yazma için açılır. İmleç dosyanın sonuna konumlandırılır. Dosya yoksa oluşturulur.
a+ Dosya hem yazma hem okuma için açılır. İmleç dosyanın sonuna konumlanır. Dosya yoksa oluşturulur.
Yukarıdaki tablo fopen() işlevi ile birlikte kullanabileceğimiz dosya açma kipi parametreleridir.
<?
#################
#  dosya_ac.php #
#################
$dosya_ac = (fopen(“./dosya.txt”, ”r”));
if ($dosya_ac)
{
  echo “Dosya başarı ile açıldı ”;
   if (fclose($dosya_ac))
    {
        echo “ve kapatıldı.”;
     }
      else
    {

      echo “fakat kapatırken hata oluştu!”;
   }
}
  else
{
  echo “Dosyayı açmaya çalışırken bir hata oluştu!”;
}
?>
Yukarıdaki PHP dosyası dosyanın açılıp açılamamasına göre ekrana bir mesaj verecektir. Açılan bir dosyayı kapatmak için fclose() işlevi kullanılır.
Yukarıdaki örnekte ilk if deyiminin içerisinde başka bir if deyimi kullandım. Bir dosyayı açıp tekrar kapatırken karşılaşabileceğimiz tüm ihtimalleri göz önünde bulundurmamız gerekmektedir. Mesela dosya açma işlemi başarılı bir şekilde gerçekleşmediyse PHP ekrana “Dosyayı açmaya çalışırken bir hata oluştu!” yazısını yazacaktır. Şayet dosya açma işlemi başarılı ise “Dosya başarı ile açıldı ” yazısını yazacak ve dosyanın doğru bir şekilde kapatılıp kapatılamaması durumuna göre “ve kapatıldı.” veya “fakat kapatırken hata oluştu!” ifadelerinde birisini ekrana basacaktır.
fgets() ve fread() işlevleri
Bu iki işlev yazma modunda açılmış bir dosyadan bilgi almak için kullanılır. Aralarında ufak bir fark vardır. fgets() işlevi metin dosyalarında kullanılır ve dosyayı satır satır okur. fread() işlevi ise dosyayı ikili kipte (bayt bayt) okur.
<?
####################
#  dosya_oku.php   #
####################

$dosya = fopen(“./dosya.txt”, ”r”);
while (!feof($dosya))
{
  $satir = fgets($dosya,1024);
  echo “$satir<br>”;
}
fclose($dosya);
?>
Yukarıdaki PHP programı bulunduğumuz dizindeki dosya.txt adlı dosyayı okuma kipinde açıp dosyanın sonuna kadar (!feof kalıbını birazdan anlatacağım) satır satır okuma gerçekleştirir ve ekrana yazar. Dosyayı okuma işlemi bitince de dosyayı kapatıp programı sonlandırır. fgets ile kullandığım “1024” rakamı okunacak bir satırdan kaç bayt alınacağını belirtir. Aslında yukarıdaki program require() işlevi ile hemen hemen aynı işi yapar.
fputs() ve fwrite() işlevleri
Tahmin edeceğiniz gibi bu iki işlevde dosyaya bilgi yazmak için kullanılır. İkisi arasında bir fark yoktur. Yazma kipinde açılmış bir dosyaya bilgi girişi için kullanılırlar.
<?
###################
#  dosya_yaz.php  #
###################
$metin = ”Burada herhangi bir metin olabilir.”;
$dosya = fopen(“./defter.txt”,”w”);
fwrite($dosya,$metin);
fclose($dosya);
?>
Yukarıdaki PHP dosyası $metin adlı değişkendeki bilgiyi $dosya ile belirtilen dosyaya yazacaktır. Bu işlem sırasında bulunduğumuz dizinde defter.txt adlı bir dosya varsa silinecek ve yeniden oluşturulacaktır. Eğer varolan dosyamıza ekleme yapmak istiyorsak kullanmamız gereken dosya açma komutu fopen(“./defter.txt”,”a”) şeklinde olmalıdır. Ekleme dosya sonunu yapılır.
feof
Bir dosyanın sonunun gelip gelmediğini kontrol eder. Daha önceki örneklerimden birinde kullanmıştım.
  while (!feof($dosya)) ......
Oradaki kullanım DEĞİL mantıksal işleçi ile olduğu için kullandığım while döngüsünde dosya sonu olmayana kadar koşul doğru kabul edilip döngü sürdürülecektir.
PHP ile Dizin İşlemleri
opendir() işlevi
Adında da anlaşılacağı gibi bu işlev kendine parametre olarak verilen dizini açmak için kullanılır. Bulunduğumuz dizindeki “resimler” alt dizinini açmak için
  opendir(”./resimler”);
gibi bir ifade kullanırız.
readdir() işlevi
Bu işlev ise açık olan bir dizinde okuma yapmamıza olanak sağlar. Yine bulunduğumuz dizindeki “resimler” altdizinini okumak için
  $dizi=opendir(“./resimler”);
  readdir(“$dizin”);
gibi bir komut kullanırız. İsterseniz dizinler ile ilgili iki işlevi bir örnek ile açıklayalım. Bu işlevin çalışabilmesi için bulunduğumuz dizinin içinde bir “abc” dizini olmalı ve kullanıcı yetkileri 705 yada 755 şeklinde (yani herkese okuma yetkisi) olmalıdır.
<?
##################
#   dizin.php    #
##################

$i = 1;
$dizin_ac = opendir(“./abc”);
while ($dosya = readdir($dizin_ac))
{
  echo “Bu abc dizinindeki $i. eleman : $dosya<br>”;
  $i++
}

?>
Yukarıdaki PHP programı bulunduğumuz dizindeki “abc” dizinini açıp, içeriğini sıra ile ekrana basmaktadır.
ereg() ve eregi() işlevleri
ereg() ve eregi() işlevleri bir metin içerisinde verilen bir kelimeyi arar. eregi() işlevi ereg() işlevinden farklı olarak arama sırasında büyük-küçük harf ayrımı yapmaz.
Hazırladığınız bir web formunda kullanıcının doğru bir e-posta adresi girip girmediğini kontrol etmek için aşağıdaki gibi bir kod kullanabilirsiniz.
<?
################
#   ereg.php   #
################
if(ereg(“@”,$eposta) && ereg(“.”,$eposta))
{
  echo “Kaydolduğunuz için teşekkürler!”;
}
  else
{
  echo “<font color="#f80000">Lütfen e-posta adresinizi doğru girin!</font>”;
  require(“uye_kayit.html”);
}

?>
ereg_replace() ve eregi_replace işlevleri
Bu işlevler de belirtilen metin içinde istenilen bir kelimeyi bulup değiştirmek için kullanılır. Yine eregi_replace() işlevinin ereg_replace() işlevinden farkı büyük-küçük harf ayrımı yapmamasıdır.
<?
######################
#  ereg_replace.php  #
######################
ereg_replace(“fni18444@gantep.edu.tr”, ”yeni_adresim@sunucu.com”, $metin);
?>
Diyelim ki 10-15 sayfalık bir yazı yazdım ve bu yazı içerisinde e-posta adresimi sıkça kullandım. Yazımı yazdıktan bir süre sonra e-posta adresim değişti. İşte yukarıdaki kod ile önceden yazdığım yazı içerisindeki eski adresimi yenisi ile değiştirebilirim.
md5() işlevi
md5() şifreleme için kullanılan bir işlevdir. İşleve parametre olarak verilen metnin uzunluğu ne kadar olursa olsun işlev bu metni 32bit ile şifreler ve geri dönüşümü yoktur. Yani md5 ile şifrelenmiş bir metni tekrar eski haline getirmek olanaksızdır (en azından şimdilik ;)). Peki bu ne işimize yarayacak? Karşılaştırma yaparken, mesela md5 ile şifrelenip veritabanına kaydedilmiş bir şifreyi kontrol etmek için, kullanıcıdan gelen şifreyi de md5 ile şifreleyip karşılaştırma yapmanız yeterli olacaktır. Md5 hakkında daha ayrıntılı bilgi için internette herhangi bir arama motorundan “RFC1321” aratmanız yeterli olacaktır.
unlink() işlevi
Bu işlev kendisine parametre olarak girilen dosyayı silmek için kullanılır. Kullanımı unlink(“dosya_adı”) şeklindedir.
mkdir() ve rmdir() işlevleri
Bu iki işlev de dizin oluşturma ve silme için kullanılır. mkdir() kendisine parametre olarak verilen bir dizini oluşturur ve rmdir() ise kendisine parametre olarak verilen dizini siler.
Tabii buraya kadar anlattığım dizin ve dosya işlemlerini gerçekleştirebilmeniz için o dosya ve dizin üzerinde kullanım hakkına sahip olmanız gerekmektedir. Aksi taktirde dosyaya ulaşımda sorun olduğuna dair bir hata mesajı ile karşılaşırsınız. İnternet'teki bir sunucudan istekte bulunan bir kullanıcı sunucu sistem tarafında “diğer” kullanıcı grubuna dahil edilir. Dosya erişim yetkileri bu özellik göz önünde bulundurularak ayarlanmalıdır.
PHP ile İşlevleri Yazmak
PHP ile hazır olan işlevlerin yanı sıra, hazır olarak gelen işlevlerden yararlanarak kendi işlevlerimizi de kullanabiliriz. Bu iş normal bir programlama dilindeki işlev tanımlama işleminden pek farklı değildir. İşlev tanımlama işini bir örnek üzerinde anlatırsam daha iyi anlaşılacağını düşünüyorum.
Ben hazırladığım sitelerde konu başlıklarını ve kategorileri vermek için çoğunlukla ana sayfamda oluşturduğum küçük tabloları kullanırım. Bu tablolar benim başlıklarım için bir çerçeve görevi görür.
<!-- Bu dosyayı fonk.php adı ile kaydedin -->
<html>
<head>
<title>PHP ile işlev tanımlama</title>
</head>
<body bgcolor="#ffffff" text="#000000" link="#000000" alink="#000000" vlink="#000000">
<center>
<?
 function tablo($baslik, $metin, $url)
 {
  echo "<table border='0' cellpadding='1' bgcolor='#000000' width='600'><tr><td>
<table border='0' cellpadding='0' cellspacing='0' bgcolor='#334455' width='600'>
<tr><td><font color='#ffffff'><b><li>$baslik</b></font></td></tr>
<tr><td bgcolor='#eaeaea'> $metin<br><a href='$url'>$url</a></td>
</tr></table></td></tr></table><br>\n";
 }

tablo("Linux İşletim Sistemi","Linux, Linus Torvalds adında Finlandiyalı
bir öğrenci tarafından geliştirildi. Daha ayrıntılı bilgi
için...","http://www.belgeler.org.tr/KiTAPLIK/archive-tlkg-lis.html");

tablo("PHP","Açık kaynak kodlu olarak dağıtılan PHP dinamik web sayfası tasarımı
konusunda bir ıır açtı! PHP konusunda her türlü yardımı bulabileceğiniz PHP
Manual gönüllüler tarafından birçok dile çevrildi.","http://www.php.org.tr");

?>

</body>
</html>
Yukarıdaki PHP dosyası ile tablo adlı bir işlev tanımladım. Tanımladığım bu işleve her seferinde $baslik, $metin ve $url değişkenlerini gireceğimi belirttim. PHP yorumlayıcım tablo() işlevini yorumlarken daha önceden yazılmış function tablo () { .... } bölümünden yaralanır. Bu bölümde değişkenlerin adları yerine işlev adı ile daha sonradan verilen değerleri kullanır. Bu kullanım işi tanımlama sırasına göredir. Bu gibi işlevler sayesinde sayfanızda çok kullandığınız kalıpları sürekli yazmak zorunda kalmazsınız. Örneği kaydedip çalıştırırsanız daha iyi anlayacağınızı sanıyorum.
Buraya kadar PHP’ye bir giriş yaptım. Buradan sonra MySQL’e de bir giriş yapmayı ve daha sonra örneklerimi ve anlatımımı PHP+MySQL üzerinde devam ettirmeyi düşünüyorum.
Önceki Üst Ana Başlık Sonraki
PHP ve MySQL ile Web Programlama Başlangıç MySQL’e Giriş
Bir Linux Kitaplığı Sayfası