Bir süredir PHP ile yazılmış eski bir uygulamayı güncellemeye ve ihtiyaçlarıma göre uyarlamaya çalışıyorum. Amacım özensiz bir şekilde yaptığım kodlamayı güvenlikli hale getirip (evet hiçbir güvenlik unsuruna yer vermemişim zamanında) kullanışlılığını artırmak.

PHP Logo

Başlangıçta sil baştan başlamakla mevcut kodları değiştirmek arasında kararsız kalsam da daha kolayıma geldiği için kodları değiştirmekle işe başladım. Üzerinde çalıştığım üye kaydını, üye giriş-çıkışlarını gibi üyelik sistemini destekleyen, üyelerin ve kullanıcıların çeşitli metinler girebilecekleri girişlerin ve bunların görüntülendiği alanlarının bulunduğu basit bir içerik yönetim uygulaması aslında. Uygulamada üyelik sisteminin bulunması ve kullanıcıların veritabanına veri girişi yapabilmeleri kod yazarken normalden daha fazla bir özeni gerektiriyor haliyle; çünkü uygulamaya olası saldırılar en çok bu alanlardan gelecek. Bu saldırılara karşı bir miktar dayanıklılık sağlamak için girdi alınan bölümlerde, veritabanı kayıtlarında çeşitli önlemler almak gerekiyor.

PHP Framework

Nasıl yaparım nasıl ederim diye ararken kodlama yapmak isteyenlere olağanüstü olanaklar sağlayan, geliştiricinin yükünü büyük ölçüde hafifleten PHP Framework’lere (PHP iskeletleri diye çevirebilirim Türkçe karşılığını bilmiyorum) rastladım. PHP Framework nedir dersek, kabaca PHP ile bir uygulama oluşturmak istiyorsunuz (bu bir blog da olabilir bir haber sitesi de ya da şirketinizin sitesi de olabilir) önünüzde birkaç seçenek var ya joomlawordpressdrupal gibi hazır kodları kullanacaksınız ve içeriğinizi, uygulamalarınızı bu kodlar üzerinde yeşerteceksiniz ya da oturup özgün uygulamanızı, sisteminizi yazacaksınız.

Pek tabi ki kolay olanı içerik yönetim sistemleri (CMS) ile çalışmak ancak her zaman bu hazır yazılımlar ihtiyaçlarınıza cevap veremeyebiliyor ya da siz özgün bir şeyler ortaya koymak isteyebiliyorsunuz. İşte böyle bir durumda PHP Framework’ler sizin için biçilmiş kaftan. Framework’ler uygulama geliştirirken ihtiyacınız olacak hemen hemen tüm alt yapıyı (seçtiğiniz Framework’e göre tabiî ki) size sunarak uygulama geliştirme sürecini kolaylaştırıp, hızlandırılar size de uygulamanızı geliştirmek için daha çok zaman kalır. Ayrıca bir çok kişi bu alt yapıları kullandığı için açıklar eksiklikler karşısında tek başınıza kalmazsınız. Yardım edecek, sizin görmediğinizi görecek birilerinin varlığı uygulama geliştirme sürecenizin daha sancısız geçmesine yardımcı olacaktır.

Model View Controller

Model - View - Controller

PHP Framework’lerin en tanınmışlarını CakePHPAkelosCodeIgniter ve PRADO olarak sıralayabiliriz. Bu PHP Framework’leri geliştiricileri birçok kodlama zahmetinden kurtarıp, geliştiricilerin hızlı, istikrarlı ve güvenli kodlama yapabilmelerine olanak sağlarlar. Birkaç örnek vermek gerekirse Mozilla Addons, Scratch by MIT, Yale Daily News gibi siteler CakePHP ile; Model Management, Vimity, Lingus.tv gibi siteler ise Akelos PHP Framework ile güçlendirilmiştir. Burada bir kısmına yer verebildiğim Framework’ler daha çok Model–View–Controller (MVC) mimari yapısına dayanırlar. Model–View–Controller (MVC) mimarisinin yabancısı olduğum için açıkçası beni çok cezp etmediler. Ancak araştırmalarım sırasında Flourish adında bir PHP Framework’e daha rastladım. Flourish yukarıda değindiğim Framework’lerden farklı olarak Model–View–Controller (MVC) mimarisi kullanmayan kendi halinde küçük ve benim için uygulanabilir bir Framework olarak diğerlerinin arasından sıyrıldı. Diğer PHP Framewok’ler hakkında daha detaylı bilgiyi buradan temin edebilirsiniz.

Flourish

Flourish Logo

Flourish

Flourish Model–View–Controller (MVC) mimarisine dayanmayan kendisine tüm sorunları çözmeyi amaç edinmemiş ancak güvenli, zahmetsiz kodlama olanakları vadeden minik bir PHP Framework. Kendileri PHP 5.1+ ile Linux/BSD, Solaris ve Windows ortamında her yerinde UTF-8 desteğiyle çalışıyor. MySQL, PostgreSQL, SQLite, Oracle ve Microsoft SQL Server veritabanlarına destek sunuyor. GD veya ImageMagick yüklü ise sunucunuzda görsellerinizi kolayca işlemenize yardımcı oluyor. Detaylara buradan ulaşabilirsiniz. Flourish bünyesinde 60 sınıf ve 473 metod bulunduruyor ve yaklaşık 20bin satırlık çalıştırılabilir koddan oluşuyor ve henüz beta aşamasında (bu değerler Flourish sürüm r615 için geçerlidir).

Flourish’e başlangıç

Belki denemek görmek isteyenler olur sitesinde ayrıntılı dokümantasyon bulunmasına rağmen kısaca değinmek isterim. Sitesinden indirdiğimiz .zip dosyasını sunucumuzda herhangi bir yere yolluyoruz, ben de sitesinde anlatıldığı gibi inc klasörüne kurulmuş gibi anlatacağım. .zip içindeki tüm dosyalar /inc/flourish/ klasörünün içerisine yüklendikten sonra Flourish kodlarını uygulamanıza dâhil etmek için /inc/init.php dosyasını; Flourish’i ayarlamak için de /inc/config.php dosyasını oluşturmamız tavsiye ediliyor. Bu aşamaları sitesindeki dokümantasyonda anlatıldığı gibi yaptıktan sonra

include_once($_SERVER['DOCUMENT_ROOT'] . '/../inc/init.php');

kodunu uygulamamızda Flourish’i kullanacağımız dosyaların başına ekleyerek Flourish’i kullanmaya başlayabiliriz.

Örnek 1

Küçük bir örnekle nasıl kullanıldığı hakkında bir fikir vermek isterim:

Üyelik sisteminiz için üye giriş paneli oluşturdunuz ve html’de input ile kullanıcı adı ve şifresini GET metoduyla alıyorsunuz ya da bir form göndereceksiniz yine GET metoduyla ancak formun aynı sayfadan defalarca gönderilmesini veya GET metodunu kullandığınız için URL yoluyla verilerin gönderilmesini istemiyorsunuz. Yapacağınız işleri Flourish çok basitleştiriyor.

Formunuza şöyle bir satır ekliyorsunuz

<input type="hidden" name="request_token" value="<?= fRequest::generateCSRFToken() ?>" />

Flourish sizin için formunuza rastgele üretilmiş tek kullanımlık bir Token ekleyecek ve kullanıcı formu yolladığında bu Token verisini de göndermesi gerekecek; gelen Token değerini de şu şekilde kontrol edeceksiniz:

    try {
        fRequest::validateCSRFToken(fRequest::get('request_token'));
        // Formla gönderilen Token değeri üretilenle uyuşuyorsa
    } catch (fExpectedException $e) {
        $e->printMessage();
        // Formla gönderilen Token değeri üretilenle uyuşMUyorsa
    }

Uzun kodlamalar yapmadan Cross-Site Request Forgery (CSRF) sorununuzu Flourish yardımıyla çözeceksiniz. Tabi burada GET yerine POST kullanmak daha uygun olacaktır.

kodda kullanılan fRequest::get(‘request_token’) gönderilen request_token verisini yakalamak için kullanılmıştır.

Örnek 2

Flourish PHP Framework ile oturumları yönetmek de çok kolay. fSession sınıfı yardımıyla oturumları kontrol edebiliyoruz bunu yaparken PHP’nin $_SESSION superglobal alt yapısı kullanılıyor.

Kodunuzun herhangi bir yerinde fSession::open() yazarak bir oturum başlatabiliyorsunuz. Başlattığınız bu oturuma fSession::set(‘uye_no’, 5) gibi bir kod yazarak oturum içinde uye_no anahtarına 5 değerini atayıp $uye_no = fSession::get(‘uye_no’) gibi bir ifade ile geri oturumun içinden uye_no anahtarının değerini çekebiliyorsunuz. Oturum bittiğinde örneğin üye çıkış yaptığında fSession::destroy() kodunu çağırıp kullanıcını tüm oturum bilgilerini yok edebiliyorsunuz.

Daha fazla örnek için Flourish’in how do I…? sayfalarına bir göz atabilirsiniz.

Bitirirken

Flourish detaylı bir dokümantasyonla birlikte sunuluyor, biraz İngilizceniz ve biraz PHP deneyiminiz varsa hiç sıkıntı çekmeden faydalanabileceğiniz basitlikte bir PHP Framework. Daha detaylı bilgi ve örnekler için dokümantasyon sayfalarını ziyaret edebilirsiniz. Unutmadan şunu da hatırlatmak gerekir Flourish her zorluğun altından kalkmayı hedefleyen bir PHP Framework değil ve henüz beta; beklentileri daha fazla olanların yukarıda değindiğim diğer PHP Frameworklerle ilgilenmeleri daha faydalı olacaktır.