Ünite 6: Sunucu Taraflı Uygulama Geliştirme

Giriş

Web teknolojilerinin zaman içindeki gelişimiyle ortaya çıkan web 2.0, oldukça esnek ve etkileşimli web sayfalarının sunulmasına olanak sağlamıştır. Web sunumu yapan bilgisayarların üzerine web sunucu yazılımının yanı sıra, kod derleyicilerinin de yüklenmesiyle oluşturulan bu teknoloji sayesinde web geliştiricileri, doğrudan web sayfası oluşturmak yerine web sayfasını oluşturacak kodları yazma olanağına kavuşmuştur. Bu yeni yaklaşım, web sunucularının sayfa içeriğini doğrudan istemciye göndermek yerine, yine web sunucu üzerindeki bir derleyiciye yönlendirmesi şeklindedir.

Güncel ihtiyaçları karşılayacak şekilde web hizmeti sağlayabilmesi için bu bilgisayara, üç önemli yazılım yüklenmiştir. Bu yazılımların ilki, üzerinde bulunduğu bilgisayardaki bir portu açıp, internet üzerinden gelecek talepleri dinler. Söz konusu port üzerinden talep gelmesi hâlinde ise, web klasörüne yerleştirilmiş olan sayfaların veya bu sayfaların oluşturduğu çıktıların istemciye iletilmesini sağlar. Web sunucu olarak sınıflandırılan bu yazılım, bir web sayfası istendiğinde, öncelikle talep edilen web sayfasının türünü kontrol eder. İstenen sayfa, türü itibariyle sunucu üzerinde derlenip çalıştırılacak bir içeriğe sahip değilse, sayfayı doğrudan istemciye gönderir. Talep edilen sayfanın türü derlenip çalıştırılmasını gerektiriyorsa, web sunucu yazılımı bu sayfayı doğrudan istemciye göndermek yerine sunucu taraflı derleyiciye yönlendirir. Sunucu bilgisayarda yüklü diğer bir yazılım olan derleyici, kendisine web sunucusu tarafından teslim edilen dosyayı alıp, içindeki kodları derler ve çalıştırır. Çalışma sürecinde oluşan çıktıları ise tekrar web sunucu yazılıma teslim eder. Bu çıktılar, web sunucu yazılım tarafından istemciye yönlendirilir. Bu noktada anlaşılması gereken şey, istenen sayfaların içerdiği kodların değil, bu kodların çalıştırılmasından sonra oluşan çıktıların istemciye gönderildiğidir.

Sunucu bilgisayarda yüklü diğer bir yazılım, derleyicinin veri yönetimi ihtiyaçlarını karşılama görevini yürüten veritabanı yönetim sistemidir. Derleyiciye gönderilen kodlar, gerektiğinde veritabanı yönetim sistemine bağlanarak, verilere ilişkin ekleme, silme, güncelleme ve edinme gibi süreçleri işe koşabilir.

Günümüzde hem web sunucu yazılımı, hem sunucu taraflı derleyici, hem de veritabanı yönetim sistemi ihtiyaçlarını karşılayacak oldukça fazla seçenek mevcuttur. Ancak ücretsiz ve açık kaynak kodlu olmalarının yanı sıra, yıllar boyunca kullanılarak etkinliklerini ispatlamış olmaları nedeniyle Apache adlı web sunucu yazılımı, PHP adlı derleyici ve MySQL adlı veritabanı yönetim sistemi oldukça yaygın kullanım bulmuştur.

Web Sunucu Yazılımlarının Kurulumu

Her biri ayrı gruplar tarafından geliştirilmiş olan Apache, PHP ve MySQL yazılımlarının birlikte kullanımı oldukça sık karşılaşılan bir durumdur. Bu nedenle, üç yazılımı birlikte sunan farklı özellikte çok sayıda kurulum paketi ortaya çıkmış ve yaygınlaşmıştır. Bu ünitede, sözü edilen paketlerden biri olan WampServer kullanılacaktır.

WampServer ile Web Sunucu Yazılımlarının Kurulumu

WampServer’in kurulum dosyasını çalıştırmak, sözü edilen üç yazılımın kolayca kurulup birbirlerine göre düzenlenlenmesini sağlayacaktır. Bu noktada, kurulum dosyasının yönetici yetkileriyle çalıştırılmasına dikkat edilmelidir. Aksi durumda yazılım paketinin gerekli sistem izinlerini elde edememesi olasıdır. Yazılım paketinin hangi klasöre kurulduğuna dikkat etmek, web dosyalarının tutulacağı klasörü bulmak açısından önemlidir. Kolaylıkla anlaşılacak birkaç adımda tamamlanacak olan kurulum sürecinde sunulan formlar, üzerlerinde herhangi bir değişiklik yapılmaksızın onaylanabilir.

WampServer kontrol panelini açacaktır. WampServer kontrol paneli üzerinden Apache, PHP ve MySQL servislerinin özelliklerine ilişkin bilgi alınabilir ve bu servislerin çalışma durumları değiştirilebilir.

WampServer yazılımının kurduğu Apache, PHP ve MySQL servislerinin üçünün birden çalıştırılması için, kontrol paneli üzerindeki “Start All Services” komutunun tıklanması yeterlidir. Bu işlemden sonra WampServer’in üzerinde çalıştığı bilgisayar, sunucu taraflı derleme yapabilmesinin yanı sıra veritabanı ihtiyaçlarını da karşılayabilecek bir web sunucusu rolüne kavuşmuş olur.

WampServer’in doğru bir şekilde çalışıp çalışmadığını test etmek için, bir web tarayıcı açılıp “localhost” ya da “127.0.0.1” adresi ziyaret edilebilir.

Yukarıda da değinildiği gibi, “localhost” ve “127.0.0.1” adresleri, üzerinde bulunulan bilgisayarı tanımlayan özel adreslerdir. Bir web sunucusuna aynı ağ üzerindeki başka bir bilgisayar üzerinden erişmek için, ağ üzerindeki IP numarası ya da alanadı kullanılmalıdır. Windows işletim sistemi kullanan bilgisayarlarda, başlat menüsündeki arama kutusuna “cmd” yazılarak ulaşılan komut satırı arayüzü ile ağ bilgilerinin öğrenilmesi mümkündür. Komut satırı arayüzüne “ipconfig” yazmak, bu noktada gereken bilgileri sağlayacaktır.

Ünitenin girişinde de söz edildiği gibi, Apache tarafından sunulması istenen web sayfaları, özel bir klasörde tutulur. WampServer’in yüklendiği bilgisayar için bu klasör, yazılımın kurulduğu klasörün altında yer alan “www” adlı klasördür.

Özel durumların dışında Apache, bu klasörün dışındaki herhangi bir yerde bulunan sayfaları veya dosyaları istemcilere göndermez. Yani oluşturulan web sayfalarının bu klasöre taşınması, web sunucuya yüklenmesi anlamına gelmektedir.

Bir web ziyareti sırasında iki farklı web dosyası türüne erişilmek istenebilir. Biri “html” uzantılı, diğeri “php” uzantılı olabilecek bu dosyalar, Apache tarafından ayrı süreçlerle sunulur. “html” uzantılı olan dosyalar, sunucu tarafında derlenecek kodlara sahip olmadığı için doğrudan web tarayıcısına gönderilir. Ancak “php” uzantılı dosyalar, derlenmesi gereken kodlara sahiptir. Bu nedenle PHP derleyicisine yönlendirilirler. Dosya isteminde bulunan web tarayıcısına ise PHP derleyicisi tarafından derlenen kodların ürettiği çıktılar gönderilir.

Hem HTML, hem de PHP içerikli sayfaların oluşturulması için basit bir metin editörü yeterlidir. Windows işletim sistemi ile birlikte gelen oldukça basit özelliklere sahip “Notepad” adlı editörle bile, HTML ve PHP içerikli sayfalar oluşturulabilir. Ancak çalışma kolaylığı sağlaması nedeniyle, tamamen ücretsiz bir yazılım olan “Notepad++” adlı yazılımın kullanılması önerilmektedir.

PHP’nin Kodlama Özellikleri

Aslında bir betik dili sayılabilecek PHP, yıllar boyunca sürdürdüğü gelişimi ile bir kodlama dilinde olması beklenen özelliklerin neredeyse tamamına sahip hale gelmiştir. Bu ünitede; söz konusu özelliklerin en önemlileri sayılabilecek değişken kullanımı, şart ifadelerinin oluşturulması, döngü yapılarının kurulması, fonksiyonların oluşturulması ve yerleşik fonksiyonların kullanımı konularına değinilecektir.

İlk PHP Sayfası: Merhaba Dünya!

PHP sayfalarının yapısı, basit bir PHP sayfası örneği üzerinden kolaylıkla anlaşılacaktır. Resim 6.8’de, “Merhaba Dunya!” içeriğini oluşturan bir PHP kodu sunulmuştur. Bu kodun ilk satırında yer alan “ ?php” işareti, derleyiciye PHP kodlarının başladığını bildirir. Derleyici için bu işaret ile “? ” işaretinin arasında kalan kısım PHP kodlarını içermektedir. Bu iki işaretin dışında kalan içerik derlenmeden doğrudan istemciye gönderilecektir. Resim 6.8’deki iki numaralı satırda ise, oluşturulmakta olan web sayfasına içerik ekleyen “echo” komutu görülmektedir. “Echo” komutu ile sayfaya eklenen içerik, web istemcisine gönderilmektedir. Bu noktada, PHP komut satırlarının özel durumların dışında “;” işareti ile bittiğine de dikkat edilmelidir.

Yukarıda sunulan kodda oluşturulan PHP kodu, tahmin edileceği üzere WampServer’in “www” adlı klasörüne kaydedilmelidir. Apache, web tarayıcı tarafından özellikle bir sayfa adı belirtilmemesi hâlinde “index”, “default” ve “main” adlı sayfaları işletecek şekilde düzenlenmiştir. Bu nedenle oluşturulan PHP sayfası, “index.php” adıyla kaydedilmiştir. Böylelikle web tarayıcı üzerinden “localhost” adresi ziyaret edildiğinde, bu sayfa tarafından oluşturulan içerik sunulacaktır.

Değişkenler

Programların işleyiş süreçleri, verilerin edinilmesini, işlenmesini ve yer değiştirmesini kapsar. Söz konusu verilerin saklanmasını sağlayan yapılar ise bellek hücreleridir. Veri tutabilen bellek hücrelerinin programlama dillerindeki karşılığı ise değişkenlerdir. Değişkenler, üzerlerinde çeşitli türlerde veri tutabilirler. Tamsayı, ondalıklı sayı ya da metinler, değişkenlere yüklenebilecek veri türlerinden yalnızca birkaçıdır.

PHP dilinde değişken kullanımı diğer dillere göre oldukça kolaydır. Birçok programlama dilinde değişken oluşturulurken, değişkenin ne tür veriyle yükleneceğinin de belirtilmesi gerekmektedir. Ayrıca işleyiş sürecinde, değişkene yüklenecek veri türünün değişmesi ya mümkün olmamakta ya da özel bir dönüştürme işlemi gerektirmektedir.

PHP dilinde “$” işareti ile başlayan sözcükler, doğrudan değişken olarak algılanır. Bu sırada herhangi bir tür tanımlaması yapmak da gerekmez. Ayrıca herhangi bir türde veri yüklenen PHP değişkenine sonradan farklı türde bir değer yüklemek de mümkündür. Ancak PHP değişken adlarında boşluk ve noktalama işareti kullanılmamalı, değişen adlandırmalarına sayı ile başlanmamalı ve değişken adları İngilizce karakterlerden oluşturulmalıdır.

Şart İfadeleri

Programların işleyişleri çoğu zaman, birtakım karar verme süreçlerini kapsar. Kullanıcıdan alınan, veritabanından okunan veya başka bir yazılım tarafından oluşturulan verilerin taşıdığı değere göre farklı süreçlerin işe koşulması gerekebilir. Oldukça sık karşılaşılan bu gibi durumları karşılamak için şart ifadeleri kullanılır. PHP’de şart ifadelerinin oluşturulması için, birçok programlama platformunda olduğu gibi “if” deyimi kullanılır.

Şart ifadelerinde kullanılabilecek karşılaştırma ifadeleri:

  • Büyüktür.
  • Küçüktür.
  • = Büyük ya da eşittir.
  • = Küçük ya da eşittir.
  • = = Eşittir.
  • ! = Eşit değildir.

Şart ifadeleri oluştururken, günlük hayatta kullandığımız “ve”, “veya” gibi bağlaçların kullanımı da mümkündür. Şart ifadesini oluşturan parantezin içinde “&&” ifadesinin kullanılması “ve” anlamına gelmektedir. “&&” bağlacının kullanıldığı ifadelerin olumlu sonuç üretmesi için, bu bağlaç aracılığı ile birbirine bağlanan şartların ikisinin de sağlanması gerekir. Şartların herhangi birinin sağlanmamış olması, genel ifadenin olumsuz olmasını sağlar.

Birçok durumda, şart ifadesine birden fazla sayıda kod satırının bağlanması gerekir. Bu gereksinim, şart ifadesine bağlanacak kod satırları “{“ ve “}” işaretleriyle bloklanarak karşılanabilir.

Belirli bir şart ifadesinin sağlanması durumunda çalıştırılacak kodlar tanımlanabildiği gibi, söz konusu şartın sağlanmaması durumunda çalışacak kodlar da ayrıca tanımlanabilir. Bu tanımlama “else” deyimiyle yapılır.

Şart ifadeleriyle ilgili olarak oluşabilecek diğer bir ihtiyaç ise, if ile belirtilen şartın sağlanmaması durumunda, yeni bir şartın daha sorgulanmasıdır. Bu ihtiyacı karşılamak üzere “else if” deyimi işe koşulabilir.

Döngüler

Benzer işlemlerin tekrar tekrar yapılması, insanlar için çoğu zaman sıkıcı olsa da, bilgisayarlar için kolaylıkla ve yüksek hızlarla yapılabilen şeylerdir. Bu nedenle tekrarlı işlerin tanımlandığı yapılar, programlama dilleri için vazgeçilmez olmuşlardır. Döngü adı verilen bu yapıların oluşturulması için her programlama dili çeşitli deyimler içerir. En yaygın kullanılan döngü deyiminin ise “for” olduğu söylenebilir.

Fonksiyon Yapıları

Programlama dillerinde oldukça yoğun bir kullanıma sahip olan fonksiyon yapıları, büyük ve karmaşık yazılım projelerinin hayata geçirilebilmesi için oldukça önemlidir. Fonksiyon yapıları, üzerine tanımlanmış olan kod parçalarının tekrar tekrar kullanılmasını sağlayarak, hem yazılımların daha hızlı oluşturulmasını, hem hata giderme süreçlerinin kısalmasını, hem de çok sayıda programcının aynı yazılım projesi üzerinde bağımsız olarak çalışabilmesini sağlamaktadır. PHP dilinde fonksiyonların oluşturulması ve kullanılması ise oldukça kolaydır.

Fonksiyonlar, hiç değer yüklenmeyecek veya birden fazla sayıda değer yüklenecek şekilde de oluşturulabilir. Fonksiyon herhangi bir değer almadan çalışacak ise, fonksiyon adından sonra gelen parantezin içi boş bırakılır. Birden fazla değer yüklenecek ise, fonksiyon içinde değerleri temsil edecek değişken adlarının arasına “,” işareti konulur.

Yerleşik Fonksiyonlar

PHP dilinde, program yazma sürecini kolaylaştırmak üzere önceden hazırlanmış binlerce yerleşik fonksiyon vardır. En sık kullanılan fonksiyonların ise, metinler üzerinde işlem yapmayı sağlayan fonksiyonlar olduğu söylenebilir.

Sıklıkla kullanılan metinsel PHP fonksiyonları:

  • strlen() Kendisine verilen metnin karakter sayısını sunar.
  • chr() Kendisine verilen ASCII kodunun karşılığı olan karakteri sunar.
  • ltrim() Kendisine verilen metni, sol tarafındaki boşlukları temizleyerek sunar.
  • rtrim() Kendisine verilen metni, sağ tarafındaki boşlukları temizleyerek sunar.
  • trim() Kendisine verilen metni, hem sağ hem de sol tarafındaki boşlukları temizleyerek sunar.
  • substr() Kendisine verilen metnin içindeki bir alt metni sunar.
  • strtolower() Kendisine verilen metni küçük harflerle yazılmış şekilde sunar.
  • strtoupper() Kendisine verilen metni büyük harflerle yazılmış şekilde sunar.
  • ucfirst() Kendisine verilen metni ilk karakterini büyük harfe dönüştürerek sunar
  • ucwords() Kendisine verilen metindeki kelimelerin ilk karakterlerini büyük harfe dönüştürerek sunar.
  • str_replace() Kendisine verilen metindeki belirli alt metinleri değiştirerek sunar.
  • md5() Kendisine verilen metni MD5 algoritmasıyla şifreleyerek sunar.

PHP’de metinsel fonksiyonların yanı sıra, matematiksel fonksiyonlar da sıklıkla kullanım bulmaktadır.

Sıklıkla kullanılan matematiksel PHP fonksiyonları:

  • abs() Kendisine verilen sayı değerinin mutlak değerini sunar.
  • ceil() Kendisine verilen ondalıklı sayıyı yukarı yuvarlayarak sunar.
  • floor() Kendisine verilen ondalıklı sayıyı aşağı yuvarlayarak sunar.
  • round() Kendisine verilen ondalıklı sayıyı yakın olduğu tamsayıya yuvarlayarak sunar.
  • max() Kendisine verilen sayıların en büyüğünü sunar.
  • min() Kendisine verilen sayıların en küçüğünü sunar.
  • pi() Pi sayısını yüksek ondalık hassasiyetiyle sunar.
  • pow() Üstel hesaplama yapar.
  • sqrt() Kendisine verilen sayının karekökünü sunar.
  • rand() Rastgele bir sayı oluşturup sunar.

PHP ile yapılan web projelerinde metinsel ve matematiksel işlemlerin yanı sıra, tarihsel işlemlerin de sıklıkla yer bulduğu söylenebilir. Bu ihtiyaçları karşılamak için en çok kullanılan fonksiyonların ise “time()” ve “date()” olduğu söylenebilir. “time()” adlı fonksiyon çalıştırıldığı zaman, “1 Ocak 1970 00:00:00 GMT” tarihinden itibaren kaç saniye geçmiş olduğunu döndürür. Bu fonksiyondan, “1451419045” gibi bir değer elde etmek mümkündür. “date()” adlı fonksiyon ise, geçerli zamanı sistem saati üzerinden okuyup, daha anlaşılabilir bir formatta sunabilmektedir. Ancak bu fonksiyondan doğru bir şekilde yararlanabilmek, tarihin formatlanmasında kullanılacak özel karakterleri ve bu karakterlerin işlevlerini bilmeyi gerektirir.

date() fonksiyonu ile birlikte kullanılabilecek özel karakterler:

  • d: Ay içindeki gün numarasını ifade eder.
  • D: Üç karaktere kısaltılmış bir şekilde gün adını ifade eder.
  • l: Gün adını ifade eder.
  • w: Haftanın kaç numaralı gününde bulunulduğunu ifade eder.
  • z: Yılın kaçıncı gününde bulunulduğunu ifade eder.
  • F: Ay adını ifade eder.
  • m: Yıl içindeki ay numarasını ifade eder.
  • Y: Yılı ifade eder.
  • y: Yılı son iki basamağı ile ifade eder.
  • h: 0-12 aralığında saati ifade eder.
  • H 0-24 aralığında saati ifade eder.
  • i: Dakikayı ifade eder.
  • s: Saniyeyi ifade eder.

Web 2.0 teknolojisinin oluşumunu ve yaygınlaşmasını sağlayan sunucu taraflı dillerden biri olan PHP, sağladığı güvenlik ve performans özelliklerinin yanı sıra ücretsiz olması nedeniyle yoğun bir şekilde tercih edilmektedir. Hemen her işletim sistemi üzerinde çalıştırılabilen bu dil, değişkenler, şart ifadeleri, döngü ve fonksiyon yapıları gibi, bir programlama dilinde bulunması gereken yapıların tamamını içermektedir.

PHP dilinde değişken kullanımı diğer birçok dile göre oldukça kolaydır. Ayrıca şart, döngü ve fonksiyon yapılarının oluşturuması, diğer dillerin çoğu ile benzerlik taşımaktadır. Bu nedenle hâlihazırda programlama deneyimi olanlar, PHP dilini son derece kolay bir şekilde öğrenebilmektedir. PHP’nin, yüzlerce yerleşik fonksiyon sunmasının da web projelerinin geliştirilme sürecini kolaylaştıran faktörlerden biri olduğu söylenebilir.

Güncel ihtiyaçlara cevap verecek bir web sunucunun oluşturulması, PHP gibi sunucu taraflı bir dilin yanı sıra, bir web sunucu yazılımı bir de veritabanı yönetim sistemi gerektirir. Bu noktada birçok geliştirici, ücretsiz olarak yıllardır kullanılıp geliştirilmekte olan Apache adlı web sunucu yazılımını ve MySQL adlı veritabanı yönetim sistemini kullanmaktadır. PHP, Apache ve MySQL’in birlikte kullanımı o kadar yaygınlaşmıştır ki, bu üç yazılımı birlikte içeren onlarca farklı kurulum paketi ortaya çıkmıştır.