Berker Peksağ.

"php" etiketine sahip yazılar:

13 Haziran 2010, Pazar

Kohana'ya katkıda bulunmak için geliştirme ortamının hazırlanması

Saat: 22:20:18

Kohana, geliştirilmesine CodeIgniter fork'u olarak başlanıp 3.x versiyonuyla beraber en baştan yazılan popüler bir PHP framework'üdür.

Bu yazıda, Kohana projesine katkıka bulunmak için bir geliştime ortamının hazırlanmasını anlatacağım.

Yazıyı, temel seviyede Git ve GNU/Linux bilginizin olduğunu varsayarak hazırladım.

Kohana, Github üzerinden geliştiriliyor. Bundan sonra sık sık kullanacağımız issue list ise Kohana'nın kendi web sitesinde görülebilir.

İlk iş olarak Kohana için bir klasör oluşturup, Git'i aktive edelim:

mkdir kohana/
git init

kohana/ klasörünü yazdığımız kodları uygulama üzerinde denemek/geliştirmek gibi amaçlar için kullanacağız.

Şimdi asıl geliştirme yapacağımız çekirdek kodları eklemeye geldi. Devam etmeden önce, Github hesabınızdan github.com/kohana/core projesini fork etmelisiniz.

Github üzerinde fork'unuzu oluşturduktan sonra, bu depoyu klonlayacağız:

git clone git@github.com:berkerpeksag/core.git system

Burada, göreceğiniz üzere sizin forkunuzunu klonladık. Şimdi, ana depodaki güncellemeleri çekip, bizim güncellemelerimizle birleştirmek, kısacası depoyu güncel tutmak için hayati öneme sahip remote ayarlarını yapacağız:

git remote add upstream git://github.com/kohana/core.git
git fetch upstream

Eğer her şey yolunda gittiyse, aşağıdaki gibi bir çıktıyla karşılaşmalısınız:

berkerpeksag@berkerpeksag:/var/www/kohana/system$ git fetch upstream
From git://github.com/kohana/core

* [new branch] inline_route_regex -> upstream/inline_route_regex
* [new branch] master -> upstream/master
* [new branch] testing -> upstream/testing
* [new branch] text_binary -> upstream/text_binary
* [new branch] text_number -> upstream/text_number
* [new branch] unstable -> upstream/unstable

Gördüğünüz gibi tüm branchler oluşturuldu. Şimdi Git index'ini güncelleyip değişiklikleri commit edebiliriz:

git add .
git commit -m “Cekirdek kodlari eklendi.”

Asıl işi yaptıktan sonra sırada varsayılan Kohana klasör yapısını oluşturacağız. Çoğu Kohana projesinin klasör yapısı aşağıdaki gibidir.

application/
application/cache
application/config
application/views
application/logs
application/classes
application/classes/model
application/classes/controller

Sırasıyla klasörlerimizi oluşturalım:

mkdir -p application/classes/{controller,model}
mkdir -p application/{config,views}

cache/ ve logs/ klasörlerine yazma izni verelim:

mkdir -m 0777 -p application/{cache,logs}

Yine herhangi bir hata almazsanız klasör yapısı aşağıdaki gibi olacaktır. Test etmek için:

berkerpeksag@berkerpeksag:/var/www/kohana$ find application/
application/
application/cache
application/config
application/views
application/logs
application/classes
application/classes/model
application/classes/controller

cache/ ve logs/ klasörleri aksi belirtilmediği sürece çalışma zamanında çeşitli dosyalar oluşturacaklardır. Geliştirme süresince bu dosyalara Git'in ihtiyacı olmayacağı için bunları gözmezlik gelmesini söylemeliyiz:

touch .gitignore
sudo gedit .gitignore

İçerik olarak aşağıdaki şekilde doldurup kaydedip, kapatalım:

application/cache/*
application/logs/*

Şimdi proje için gerekli diğer dosyaları indirelim:

wget http://github.com/kohana/kohana/raw/master/index.php
wget http://github.com/kohana/kohana/raw/master/application/bootstrap.php -O application/bootstrap.php
wget http://github.com/kohana/kohana/raw/master/application/classes/controller/welcome.php -O application/classes/controller/welcome.php
wget http://github.com/kohana/kohana/raw/master/example.htaccess -O .htaccess

Evet, işimiz bitti ve değişiklikleri Git'e bildirip commit edebiliriz:

git add .
git commit -m “Klasor yapisi olusturuldu.”

Artık, application/bootstrap dosyasından gerekli ayarları yapıp, projeye katkıda bulunmaya başlayabilirsiniz.

Eşleme

Geliştirme süresince, kendi kodunuzu ana proje ile sürekli eş tutmanız gerekecek. Bunun için aşağıdaki bash betiğini kullanabilirsiniz:

Kullanmak için:

sudo chmod +x sync.sh

komutunu uygulamanız yeterli.

 

1 yorum yapılmış.


08 Kasım 2009, Pazar

Yeni tasarım ve format üzerine

Saat: 02:47:43

Yine uzun süredir yazamasam da bu sefer zamanı iyi kullanamamın veya tembelliğimin arkasına sığınmıyorum :) Efendim, kısa süre içerisinde blogun tasarımı, altyapısı ve içeriğinde büyük değişiklikler olacak. En önemlisi, İngilizce yazılarımı da yayımlamaya başlayacağım. Aslında format konusunda hala kararsızım: Blog içerisinde Türkçe ve İngilizce yazıları kategorilere ayırmakla, yeni bir sub domain oluşturma arasında gidip geliyorum. Hatta, -eğer okuyan varsa- görüşlerinizi almak isterim.

Gelelim işin teknik kısmına: Ofisteki yoğunluğumun azalması ve zamanımı daha iyi kullanmaya başlamamla kişisel projelerime ayırdığım zaman da artmış oldu. Böylece sadece blogun tasarımını değil altyapısını da tekrardan kodlamaya başladım. Bu sefer kendi basit(ve yetersiz) framework'üm yerine Kohana'yı kullanıyorum. Aslında birçok projede CodeIgniter kullanıyordum ama arkasında bir şirket olması özellikle patch gönderiminde ve kabul ettirmede epey dezavantaja dönüşüyor. Kohana tercihimin en önemli sebeplerinden birisi de bu aslında - ki önümüzdeki günlerde birkaç şey yazmak istiyorum bu konuyla alakalı.

Şu ana kadar DOM(Document Object Model) başlıklı makalem -yeri gelmişken bu makaleyi de yeniden yazdığımı ve içeriğini genişlettiğimi de belirteyim :)- haricinde planladığım kadar detaylı döküman yazamadım ama bu aralar HTML5 ve CSS3 hakkında epey detaylı iki makale hazırlıyorum. Yeni konseptle beraber bu içeriği de ayrı bir bölüme alacağım. Böylece, mevcut yapıdaki en büyük sıkıntım olan içeriği sınıflandıramama sorununu da halletmiş olacağım. Lab bölümüne, projelere ek olarak küçük kod parçalarım için küçük bir bölüm eklemeyi planlıyorum. Böylece, günlük bölümünü biraz daha "günlük" formatına çevirmiş olacağım.

4 yorum yapılmış.


25 Ekim 2009, Pazar

Zend Framework Notları: Zend_Validate_Date

Saat: 23:03:47

Bazen Zend Framework'den nefret etsem de işe yarayan anları da yok değil. Diyelim ki veritabanından gelen veya herhangi bir dosyadan okumanız gereken verinin YYYY-MM-DD formatında olması gerekiyor. İşte bu noktada Zend_Validate_Date olaya dahil oluyor.

Biraz önce bahsettiğim yyyy-mm-dd örneğiyle devam edelim:

$date = '1988-02-24';

$validator = new Zend_Validate_Date('yyyy-MM-dd');

if($validator->isValid($date)) echo 'Tarih geçerli bir formata sahip.';

Yorum yapılmamış.


12 Ocak 2009, Pazartesi

Windows işletim sistemi üzerine APC(Alternative PHP Cache) kurulumu

Saat: 02:35:20

APC(Alternative PHP Cache), PHP tarafından PECL eklentisi olarak geliştirilen bir cache sistemidir. Kurulumunun ve kullanımının kolay olması nedeniyle memcached yerine tercih edilebilir.

APC'yi Windows işletim sistemi üzerinde kulanmak için birkaç seçenek mevcut.

Ben üçüncü ve en hızlı çözümü seçtim.

Kurulum

Herhangi bir hata almadıysanız APC kurulumunu başarıyla tamamladınız demektir. Bundan sonraki yazılarımda APC'nin nasıl kullanılabileceğini anlatacağım.

1 yorum yapılmış.


28 Aralık 2008, Pazar

Windows işletim sistemi üzerinde cURL kütüphanesini çalıştırma

Saat: 21:17:21

Eğer Windows işletim sistemi üzerinde PHP'yi cURL kütüphanesiyle beraber kullanmak istiyorsanız, php.ini dosyasında ;extension=php_curl.dll satırını bulup başındaki noktalı virgülü kaldırmak yetmiyor.

Sorunu çözümü basit: PHP'yi kurduğunuz dizindeki libeay32.dll ve ssleay32.dll dosyalarını c:\windows\system32 içine atıp apache ya da iis'i yeniden başlatarak cURL kütüphanesini kullanabilirsiniz.

5 yorum yapılmış.


06 Ağustos 2008, Çarşamba

PHP ile dosya uzantısını almak

Saat: 16:24:14

Fırsat buldukça küçük ipuçları eklemeye devam ediyorum. Özellikle dosya yükleme işlemleri yaparken, dosya uzantısını almak gerekebilir. Çok çeşitli yöntemleri olsa da ben uzun zamandır aşağıdaki kodu kullanıyorum.

function
dosyaUzantisi($strDosya) {
      return ".".array_pop(explode(".", $strDosya));
}

1 yorum yapılmış.


25 Mart 2008, Salı

PEAR versiyonunu güncellemek

Saat: 01:40:40

Bundan böyle bulmak için çok zaman harcadığım -evet, unutkan biriyim- küçük detayları burada yayımlayacağım.

İlk olarak, bulmak için son 20 dakikamı harcadığım -tamam, henüz Google'ı kullanmayı bilmiyor olabilirim- bir problemin çözümünü yazacağım.

pear upgrade PEAR

Evet, 20 dakika harcamaya değmeyecek kadar kısa bir çözüm :) Yukarıdaki komutu, komut satırında(Win + R | cmd) çalıştırınca PEAR versiyonumuzu güncellemeye başlıyorsunuz.

Bir şekilde bu yazıyı okuyor ve PEAR ile ilgileniyorsanız, benim gibi kurulu paketlerinizin örümcek ağı tutma ihtimali mevcut :) Ki bu da zaman zaman paketler arasında uyumsuzluk yaratabiliyor (bkz: ben bugün bunu gördüm). Bunun içinde tüm paketlerimizi aşağıdaki komut yardımıyla güncelleyebiliyoruz:

pear upgrade-all

Bu arada, son olarak içimi dökmek istediğim bir konu var: Resmi PEAR ve Smarty dökümantasyonundan nefret ediyorum!

Yorum yapılmamış.


17 Mart 2008, Pazartesi

strftime() fonksiyonuyla tarih formatlamak

Saat: 10:45:26

Bazen farklı bir formatta aldığımız tarih bilgisini, farklı bir formata çevirmemiz gerekir. Bunun için ya PHP'nin list() fonksiyonunu ya da data_parse() fonksiyonunu kullanıp çeşitli işlemler yapmışızdır(ki daha pek çok yöntemi de vardır).

Bu yazıda, strftime() fonksiyonunu kullanıp tarihimizi nasıl istediğimiz formata çevireceğimizi anlatmaya çalışacağım.

Sözdizimi

string strftime(string tarih_formatiniz [, int tarih ])

Sözdiziminde de görüldüğü gibi fonksiyonun ikinci parametresi kullanmak zorunda değiliz. Şayet kullanmazsak, belirtilen formata uyacak şekilde o anki tarihi döndürür. Ayrıca, opsiyonel olarak setlocale() fonksiyonunu kullanarak yerel ayarlara göre sonuç döndürmesini sağlayabilirsiniz(Örneğin ay ve/veya günü Türkçe olarak yazdırabiliriz). Ancak setlocale() fonksiyonu, IIS veya Windows işletim sistemi üzerinde Apache kullanıyorsanız çalışmayacaktır. setlocale() fonksiyonu bu yazının konusu olmadığından, PHP'nin çevrimiçi dökümantasyonundan konu hakkında ayrıntılı bilgi alabilirsiniz.

Kullanımı

Bu kadar konuştuktan sonra örneğimize geçelim :) Aşağıdaki örneğimizde, "Mon Mar 17 08:18:01 2008" formatındaki tarihimizi "2008-03-17 08:18:01" şeklinde yazdıracağız.


<?php

$formatlanacak_tarih = "Mon Mar 17 08:18:01 2008";

$yeni_tarih = strftime("%Y-%m-%d %H:%M:%S", strtotime($formatlanacak_tarih));

echo $yeni_tarih
;

?>

strtotime() fonksiyonu, karakter katarı(string) tipindeki değeri, UNIX Timestamp* tarih biçimine çevirir.

Yorum yapılmamış.


13 Mart 2008, Perşembe

Symfony Kurulumu

Saat: 05:52:37

Şu sıralar CodeIgniter'dan vazgeçip, Symfony'yi incelemeye başladım. Symfony, 2005 yılından beri geliştirilen, açık kaynaklı PHP MVC(Model-view-controller) framework'ü. Evet, başlangıç için gereğinden fazla basit bir açıklama olsa da Yahoo! geliştiricilerinin projeye destek verdiğini ve güzide sosyal imleme servisi del.icio.us'ın yeni versiyonunda Symfony'den yararlandıklarını söyleyerek projenin yeteneklerini bir nebze anlatabileceğini umuyorum.

Veritabanı işlemlerini, bir O/RM(Object/Relational Mapping, ORM, O/R mapping) frameworkü olan Propel yardımıyla gerçekleştiriyoruz. O/RM, ilişkisel veritabanlarında(RDBMS) bulunan tablolar ile uygulama tarafında bulunan nesnelerin biribiriyle ilişkilendirilmesine verilen bir terimdir. O/RM için, pek çok ihtimal göz önünde bulundurularak hazırlanmış frameworkler bulunmaktadır(Java platformu için Hibernate, .Net platformu için NHibernate ve LINQ) ancak megolamaninin sınırlarında gezen biriyseniz kendi frameworkünüzü de yazabilirsiniz. O/RM araçları, MVC hiyerarşisinde persistence layer(veri erişim katmanı) olarak adlandırılırlar. Fazla uzatmadan, O/RM araçlarının görevlerini(yani Symfony için Propel'in) şöyle açıklayabiliriz: Uygulama tarafında ilişkilendirdikleri(buna mapping diyorlar) nesneler arasında veri aktarımını, geliştiriciyi SQL sorgularıyla vs. uğraştırmadan sağlar.

Ayrıca, çok methedilen dökümantasyonunun pek okunabilir olduğunu söyleyemem. Bir süre sonra gözü epey yoruyor. Bunun yerine Symfony'yi yakından tanımak için hazırlanan örnek "My First Project"'i indirip incelemek daha faydalı olabilir.

Kurulum

PHP-XSL eklentisinin aktifleştirilmesi

PHP_XSL, yukarıda ayrıntısıyla anlatığımız O/RM aracı Propel'in çalışabilmesi için gereklidir. Eğer PHP kurulumunuzun ardından herhangi bir değişiklik yapmadıysanız, PHP-XSL eklentisi kapalı olarak gelecektir. Bu sorunu, php.ini içerisinde, ";extension=php_xsl.dll" satırının başındaki noktalı virgülü(;) kaldırarak çözebiliriz.

PEAR kurulumu

Bu yazıda, Windows XP SP2 ve IIS 6.0 üzerinde nasıl kurulacağını anlatacağım. Diğer platformlar için resmi kurulum sayfasına bakabilirsiniz.

Öncelikle PEAR(PHP Extension and Application Repository)'ı kurmalıyız. Herhangi bir dağıtım kullanmadıysanız PHP kök dizininizi C:\php olarak kabul edeceğim. Kök dizinini kendi kurulumunuza göre değiştirebilirsiniz.

İlk olarak,

- Başlat > Çalıştır'a cmd yazıp, cd DOS komutuyla PHP'nin kurulu olduğu kök dizine gidiyoruz.
- go-pear.bat dosyasını çalıştırıyoruz. Kuruluma göre c:\php\pear klasörü içerisinde de olabilir.
- php.ini dosyasını açıp, include_path değişkenini buluyoruz ve PEAR kök dizininin yolunu belirtiyoruz: ";c:\php/PEAR". Eğer satır başında noktalı virgül(;) varsa kaldırmayı unutmuyoruz.

Symfony kurulumu

Komut satırını açıp, aşağıdaki komuyu yazıyor ve "symfony" kanalını ekliyoruz:

pear channel-discover pear.symfony-project.com

Paketleri listeletiyoruz:

pear remote-list -c symfony

Güncel Symfony sürümünü kuruyoruz:

pear install symfony/symfony

Ufak bir hatırlatma: php.ini dosyasında, "register_globals" ve "magic_quotes_gpc" değerleri "off" olmalı.

IIS konfigrasyonu

Symfony'nin IIS üzerinde düzgün çalışabilmesi için birkaç ayar daha yapmamız gerekli. Başlamadan önce, PHP'nin ISAPI olarak kurulduğundan emin olun.

- ISAPI_Rewrite lite sürümünü indirin.
- İlk olarak Denetim Masası > Yönetimsel Araçlar > Internet Information Services (IIS) yolunu takip ederek IIS yönetim panelini açın.
- Symfony projenizin c:\wwwroot\symfony\web dizininde olduğunu varsayalım ve yeni bir sanal dizin oluşturalım.
- php.ini dosyasını açıp, dizinimizin yolunu belirtelim.
- httpd.ini dosyası oluşturup, aşağıdaki kodları ekledikten sonra dosyayı kaydedip IIS'i yeniden başlatalım.

RewriteRule (.*) /index.php [L,U]

# Block external access to the httpd.ini and httpd.parse.errors files
RewriteRule /httpd(?:\.ini|\.parse\.errors).* / [F,I,O]

# Defend your computer from some worm attacks
RewriteRule .*(?:global.asa|default\.ida|root\.exe|\.\.).* . [F,I,O]

# we skip all files with .something except .html
RewriteCond URL .*\..+$
RewriteCond URL (?!.*\.html$).*
RewriteRule (.*) $1 [L]

# we keep the .php files unchanged
RewriteRule (.*\.php)(.*) $1$2 [L]

# finally we redirect to our front web controller
RewriteRule (.*) /index.php [L]

# Defend your computer from some worm attacks
RewriteRule .*(?:global.asa|default\.ida|root\.exe|\.\.).* . [F,I,O]

# we skip all files with .something except .html
RewriteCond URL /myproject/.*\..+$
RewriteCond URL (?!/myproject/.*\.html$).*
RewriteRule /myproject/(.*) /myproject/$1 [L]

# we keep the .php files unchanged
RewriteRule /myproject/(.*\.php)(.*) /myproject/$1$2 [L]

# finally we redirect to our front web controller
RewriteRule /myproject/(.*) /myproject/index.php [L]

Pfff, ve -nihayet- son adımımıza geldik. c:\wwwroot kök dizininde belirttiğimiz Symfony proje dizininin içine girip config\setting.yml dosyasını buluyoruz ve aşağıdaki kodları ekleyerek IIS konfigrasyonumuzu bitiriyoruz :P

all:
.settings:
path_info_key: HTTP_X_REWRITE_URL

all:
.settings:
relative_url_root: /myproject
path_info_key: HTTP_X_REWRITE_URL

Her ihtimale karşın, konfigrasyonu test etmek için phpinfo() fonksiyonunu kullanabilirsiniz.

Ve Askeet dökümantasyonuna gözatıp Symfony'nin yeteneklerini keşfe çıkıyoruz :)

Yararlanılan kaynaklar

  1. http://www.symfony-project.org/doc/1_1/
  2. http://en.wikipedia.org/wiki/Model-view-controller
  3. http://en.wikipedia.org/wiki/Object-relational_mapping
  4. http://pear.php.net/manual/en/installation.php
  5. http://trac.symfony-project.com/wiki/symfonyOnIIS

Bu saatte dilim döndüğünce Symfony kurulumunu anlatmaya çalışsam da yazım hatalarım ya da bilgi eksikliklerim olabilir. Surç-i lisan ettiysek affola! :)

 

5 yorum yapılmış.


13 Şubat 2008, Çarşamba

Uzuuun bir aradan sonra tekrar merhaba!

Saat: 13:10:49

Bu yazıyı henüz blogumun altyapısı bitmeden yazıyorum. Büyük ihtimalle siz okuduğunuzda epey önce yazılmış olacak.

MPH'i kapatmamın üzerinden 3 yıla yakın bir süre geçti. Zaman zaman arkadaşlarımın bloglarında kısa süreli yazılar yazsam da aklımın bir köşesinde her zaman kişisel blogumu yeniden açmak vardı. Şimdiye kadar açılmamasına pek çok sebep gösterebilirim ama direkt olarak "uyuşuğum!" dersem yeterli olacağına inanıyorum :)

Gelelim blogun oluşum hikayesine: Tasarımın ilk taslağı neredeyse 2 sene öncesine dayanıyor. Küçük değişikliklerle bu hale geldi. Bu uzuuun gelişim sürecine sebep olarak, yukarıdaki paragrafı referans alabilirsiniz. Site içerisinde, çeşitli yerlerde göreceğiniz ikonların kaynağı ise FamFamFam. Neyse ki Smarty'nin nimetleri sayesinde bir sonraki tasarım değişikliği için blogu kapatmak ya da bu kadar uzun zaman beklemek zorunda kalmayacağım :) Smarty demişken, başka bir dala atlayıp blogun altyapısından bahsetmek istiyorum. Öncelikle, PHP ve MySQL ikilisi ana iskeleti oluşturuyor. Template sistemimiz Smarty, veritabanı sınıfımızsa ezSQL. JavaScript frameworkümüz ise tabii ki jQuery.

Efendim koskoca 2 seneyi anlatmaya çalışırsak, Türkiye standartlarında okunmayacak kadar uzun bir yazı olacağından -şimdilik- kısa kesiyorum. Bundan sonra dilim döndükçe CSS, PHP, Smarty, jQuery, JavaScript ve ActionScript hakkında bilgiler vermeye ve kendi çözümlerimi paylaşmaya çalışacağım. Tabii arada sırada günlük hayattan, futboldan, oyunlardan, sinemadan ve 2. Dünya Savaşı'ndan da bahsedeceğim.

Her türlü soru ve öneriniz için berker.peksag at gmail.com e-posta adresini kullanabilirsiniz.

Buraya kadar okuduğunuz için teşekkür ederim. Her zaman okunabilir olmak dileğiyle.

6 yorum yapılmış.



Ne yapıyorum? (twitter)

 

Son yorumlar


Sık kullanılanlar


Projeler


Takip ettiklerim


En son dinlediklerim (last.fm)

 

(c) Berker PEKSAĞ. 2004-2009

Yayımlanan yazılar, kaynak gösterildiği müddetçe kullanılabilir.
Yapılan yorumların sorumluluğu yazarına aittir.