• zgrlk iin Pardus...

PHP+PEAR Aplikasyonlarının Kullanımı ve Örnek bir Veritabanı Uygulaması

Merhaba Arkadaşlar
Php sürekli gelişmeye ve kendini yenilemeye devam ediyor.Php5 versiyonuyla birlikte OOP(Nesneye dayalı programlama) desteğide oldukça geliştirildi.Artık nesneye dayalı mimariler php kodlarımız içerisinde daha fazla kullanılmaya başlandı.Php diliyle birlikte kullanmamız için geliştirilen hazır kütüphaneler mevcut.Bu kütüphanelerin genel adı PEAR kütüphaneleri olarak adlandırılmış.İşte bu makalemizde PEAR kütüphanelerini işleyeceğiz.

Bu makalede öğreneceklerimiz.
1-PEAR kütüphaneleri nedir ve ne işe Yarar.
2-PEAR kütüphanelerinin kurulumu
3-Örnek bir Veritabanı işlemlerinin olduğu  uygulama yapacağız.

PEAR kütüphaneleri nedir ve ne işe Yarar.
Php5 versiyonu ile OOP mantığı kodlarımıza daha fazla girmeye başladı.Ayrıca da  OOP programcılığının tüm programlama dillerindeki  hakimiyetinin giderek artması PHP geliştiricilerinide buna kayıtsız  bırakmadı.

Bildiğiniz gibi php açık kaynak kodlu bir programlama dili olduğundan dünyanın her köşesindeki programcılar kendi ihtiyaçlarına göre  sınıf(Class) kütüphanelerini yazdılar.işte bu kütüphanelerin toplandığı alan  yada Havuza “PEAR (PHP Extension and Application Repository )“ adı verilmiştir.PEAR aplikasyonları belirli uygulamaları yapmak için hazırlanmış OOP kodlarıdır.PEAR aplikasyonları ile yapılabilecek belli başlı uygulamaları şu şekilde sıralayabiliriz.
CACHING
HTML
DATABASE
MAIL
NETWORK
TEMPLATE
Olarak belli başlı şekilde sıralayabiliriz.Yukarıdaki saydığımız ve daha pek çok işlemi yapan nesneye dayalı kodlar mevcuttur.Bu kodları bilgisayarınıza indirip web siteniz içinde çok rahat bir şekilde kullanabilirsiniz.Ayrıca arkadaşlar PEAR aplikasyonlarının şöyle de bir özelliği vardır.PEAR aplikasyonları profesyonel programcılar tarafından geliştirilir ki bu da Php de olmayan bazı kendine ait özel kodların olmasını sağlamıştır.Yani PHP de olmayan özel PEAR kodları mevcuttur.Bu makalede ayrıca onlarıda öğreneğiz.Yapacağımız örnek uygulamada da göreceksiniz ki PEAR kullanarak JAVA Prog. Dilinin yapısına benzer kodlar yazacağız.Şimdilik bu kadar bilgi yeter sanıyorum.Daha fazla bilgi almak isteyen arkadaşlarımız  http://pear.php.net adresine de bakabilirler.

PEAR Aplikasyonlarının kurulumu
Arkadaşlar iki şekilde kurulum yapılabilir.
1-Php prog. Dilini kurduğumuz  dizin içerisinde “go-pear.bat “ dosyası mevcut.o dosyayı çift tıklayalım.kurulum için sadece Enter tuşuna basalım.Gereken kurulumu kendisi yapıyor zaten.Daha sonra php klasörümüz içinde “Pear” adında bir klasör oluşacaktır.o klasörü birde php.ini dosyası içinde tanımlamamız gerekmektedir.Bu nedenle php.ini dosyasını açalım ve
aşağıdaki satırı  herhangi bir yere ekleyelim.

include_path=”.;C:\php\php5\pear”
yani pear aplikasyonlarının kurulduğu dizin.Bu şu nedenle önemli.Çünkü o dizindeki “pear.php” dosyasını kullanacağız da ondan. Daha sonra Apache ‘yi restart ediyoruz ve Pear kurulumu tamam.Şu ana kadar PEAR kurulumunu yaptık.Oysa daha işimiz bitmedi.Çünkü şimdi hangi PEAR kütüphanesini kullanacağımızı şeçmedik.Ben sizinle birlikte Database uygulaması yapacağım.Bu nedenle de  PEAR Aplikasyonlarının DATABASE http://pear.php.net/search.php?q=database  sınıflarını kullanacağım.Bu nedenle arkadaşlar DATABASE sınıflarından DB sınıfını kullanacağım.DB sınıfını indirmek için  http://pear.php.net/package/DB adresine gidin ve Download bölümünden bilgisayarınıza indirin.

Arkadaşlar DB sınıfı  DB-1.7.11.tgz  şeklindeki sıkıştırılmış dosya olarak gelecektir.O dosyayı açalım.Şimdilik burada keselim.Çünkü devamını örnek uygulama ile anlatacağım.

2-PEAR aplikasyonlarının kurulumunun diğer şekli ise bence hepimiz için önemli.Diyelim ki siz tüm sitenizi yaptınız localde çok iyi çalışıyo ama hosting firmanızda PEAR desteği yoksa ne olacak.Tüm çabanız heba olmuş olacak.Çünkü hosting firmanızdan PEAR desteği istesenizde size olumlu cevap vermeleri çok düşük bir ihtimal.Bu nedenle arkadaşlar indirdiğimiz DB sınıfının bize gerekli olan kısmını ve Burası önemli “PEAR.php” dosyasını hosting alanımıza aynı dizine atacağız.Şimdi bu anlattıklarımı bir örnek uygulamaya çevirelim.Böylece daha net anlayacaksınız.

Örnek bir Veritabanı işlemlerinin olduğu  Uygulama
Şimdi arkadaşlar
İndirdiğimiz  DB-1.7.11.tgz   dosyasını açtığımızda birkaç tane klasörün olduğunu görürüz.Burada bizim için önemli olan “DB” klasörü ve “DB.php” dosyasıdır.Bu dosyaları  sunucumuza gönderelim.

İşte Önemli NOT: Eğer  localde çalışıyorsak ve php.ini dosyası içinde gereken değişiklikleri  yapabildiysek herhangi bir değişikliğe ihtiyaç yok.Ama sitemiz hosting alanında ise ve hosting firması PEAR desteği vermiyorsa “DB” klasörü “DB.php” dosyası ve localde PEAR kurulumu yapılması sonucunda oluşan “PEAR.php” dosyasını hosting alanının aynı klasörüne taşımalıyız.Tekrarlarsak “DB” klasörü ,”DB.php” dosyası ve “PEAR.php” dosyası sunucumuzun aynı klasörü içinde olacak şekilde olmalı.Böylece PEAR desteği kazanmış oluruz.ve PEAR aplikasyonlarından DB sınıfını kullanabiliriz.

Şimdi arkadaşlar
PEAR Aplikasyonlarından DB sınıfıyla bir Veritabanı uygulaması yapalım.
PEAR Aplikayonlarının kendine özel kodları(fonksiyonları) olduğunu daha önce söylemiştik.DB sınıfınıda kullandığımıza göre DB sınıfıyla veritabanı erişimi yapalım.Bu şu şekildeki tek satırlık kod ile yapılıyor.

Sqladi://user:password@host:port/databaseadı

Dikkat ettiyseniz bu satır her veritabanı sunucusuna destek vermekte.yani yaptığımız bu uygulama için Mysql yerine PgSql yada MSSql,Access vs. kullanabilirsiniz.vede Sadece satırın başındaki  “Sqladi” bölümünü değiştirerek.Daha fazla bilgi için. http://pear.php.net/manual/en/package.database.db.php

Önce bir veritabanı oluşturalım ve içine deneme adında şu yapıda bir tablo oluşturalım.

CREATE TABLE `deneme` (
`userid` int(11) unsigned NOT NULL auto_increment,
`userad` varchar(20)  NOT NULL,
`usersoyad` varchar(30)  NOT NULL,
`usertakim` varchar(20)  NOT NULL,
PRIMARY KEY  (`userid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Aşağıdaki kodları deneme.php olarak diğer dosyalarımızın olduğu klasöre(DB.php,DB klasörü,PEAR.php yanına) kaydedelim.

<?php
// PEAR paketimizi sayfamıza ekliyoruz.
require_once(”DB.php”);

// Veritabanı Bilgilerimimizi Giriyoruz.
$host=”localhost”;
$user=”root”;
$psw=”123″;
$dbname=”dbpear”;//db adınız
$port=3306;//dilersek yazmayabiliriz.
$dbtype=”mysql”;

$con=”$dbtype://$user:$psw@$host:$port/$dbname”;

$db=DB::connect($con);

if(DB::isError($db))
{
die($db->getmessage().”<br />”);
}
else
{
echo “Pear kullanarak Mysql Sunucuma Bağlandım.”;
}
?>

Gördüğünüz gibi ilk olarak “DB.php” dosyamızı sayfamıza ekliyoruz.Daha sonra veritabanı sunucumuzun bilgilerini giriyoruz. Ve “$con“ değişkenimize bağlantı parametrelerimizi giriyoruz.Burada “DB::connect()” kodumuz ile aynı “mysql_connect” olduğu gibi gerekli bağlantıyı yapıyor.Buradaki önemli ayrıntı bu satırdaki “$dbtype” değişkenini “mssql,sqlite,odbc..” yaptığımız anda tüm sistemimiz o veritabanı sistemine uygun olarak davranıyor.yani tek satırlık değişiklikle tüm veritabanı sistemimiz değişiyor.Diğer kodları ise php bilen herkes ne yapmaya çalıştığımı anlamıştır.

Şimdi arkadaşlar deneme tablomuza veri ekleyelim.
<?
$sql=”insert into deneme(userad,usersoyad,usertakim) values(‘ceviz’,’net’,’Beşiktaş’)”;
$result=$db->query($sql);
?>
yukarıdaki kodlarıda arkadaşlar hemen anlamışsınızdır.mysql_query() ile yaptıklarımızın aynısı.
Şimdi de listeleme yapalım.
<?
$sql=”select * from deneme”;
$result=$db->query($sql);

if(DB::isError($result))
{
die($result->getmessage());
}
while($row=$result->fetchRow(DB_FETCHMODE_ASSOC))
{
echo “<pre>”;
echo $row[’userid’];
echo $row[’userad’];
echo $row[’usersoyad’];
echo $row[’usertakim’];
echo “</pre>”;
}
?>
Yukarıda ise listeleme yapmaktayız.Listeleme sırasında fetchRow ( http://pear.php.net/manual/en/package.database.db.db-result.fetchrow.php ) komutunu(fonksiyonunu) kullanmaktayız.Bu kod sayesinde mysql_fetch_Assoc biçiminde listeleme yapıyoruz.Eğer istersek “DB_FETCHMODE_ARRAY” yazarakta listeleme olur.O zamanda “echo $row[0]” şeklinde listeleme yapacağız.

Sıra geldi benim en fazla anlatmak istediğim kısma.PEAR ile OOP kodlama getirildi demiştik.Hatta JAVA benzerliğinden bahsetmiştik.işte şimdi JAVA prog. Dili ile benzer bir yapıyı Php de kullanacağız.
Aşağıdaki yapıyı dikkatle inceleyelim.
<?
$sql=”insert into deneme(userad,usersoyad,usertakim) values(?,?,?)”;
$sorgu=$db->prepare($sql);
if(DB::isError($sorgu))
{
die($sorgu->getmessage());
}

$arr=array(
array(’Ceviz’,'Net’,'Beşiktaş’),
array(’Özhan’,'Canaydın’,'Galatasaray’),
array(’Yıldırım’,'Demirören’,'Beşiktaş’),
array(’Aziz’,'Yıldırım’,'Fenerbahçe’));

?>
Burada “?” işaretlerini bir elemanmış gibi kullandık.ve “$db->prepare” kodunu kullanarak sorgunun çalışmasını beklettik.bir array yapımız var.yani birden fazla elemanı veritabanımıza girmeye çalışacağız.bunun için şu kodu kullanacağız.
<?
Foreach( $arr as $ar)
{
$db->execute($sorgu,$ar);
}
?>
biçiminde birden fazla veriyi veritabanımıza girmiş olduk.Ama daha kolayıda var.hiç Foreach ile uğraşmadan.

<?
$db->executeMultiple($sorgu,$arr);
<?
Tek satırlık kod ile her şeyi halletmiş olduk.İşte PEAR aplikasyonlarından DB sınıfını kullanarak bir veritabanı işlemi yapmış olduk.Eğer bilgisayarınızda başka veritabanı sunucularınız varsa onlarla da sadece en baştaki satırı değiştirerek  işlem yapabilirsiniz.yani
<?
$dbtype=”odbc”;//Access için
$dbtype=”mssql”;//MS SQL için
$dbtype=”sqlite”;//SQLite için
$dbtype=”pgsql”;//Pgsql için
?
ve destek verilen tüm veritabanı sunucuları için Bknz: http://pear.php.net/manual/en/package.database.db.intro-dsn.php

ve sonra bu tek satırlık kod.
<?
$con=”$dbtype://$user:$psw@$host:$port/$dbname”;
?>

işte bu kadar.
Evet arkadaşlar
Sizlere PEAR Aplikasyonlarını ve DB sınıfını anlattım.İnşaallah anlatabilmişim ve sizlere bir şeyler öğretebilmişimdir.Sorunlarınızı ve görüşlerinizi bekliyorum.

  • #1
    Posted by Can on February 17th, 2008 at 3:50 pm

    Merhaba,
    Bu iletiyi nereden yazdığımı biliyor musunuz bilmiyorum o yüzden linki de vereyim http://www.kglz.com/index.php/web-programlama/phppear-aplikasyonlarinin-kullanimi-ve-ornek-bir-veritabani-uygulamasi-36.html
    bu yazı için çok teşekkür ederim, çok faydalı oldu..
    Bir sorum var..
    işte önemli not: diye başlayan paragrafta pear desteği vermeyen sunucuda pear işlevinin nasıl kullanıldığını anlatmışsınız. Bana da bu lazım ama db değil başka bir extension için.. pear klasörünü sunucuya attım. soap klasörü var, onun içine.. sonra tarayıcı ekranında çıkan hatalara göre php dosyalarını açıp require yazan yerleri include ile doğru pathi vererek düğistirdim. pear.php içinde pear class ı var(bende line 103 ), orda hata veriyor. Nasıl çözebilirim acaba yardımcı olabilir misiniz?

  • #2
    Posted by kGlz on February 18th, 2008 at 10:22 am

    acaba hangi pear paketini kullanacağınızı bana belirtirmisiniz yada pear.php.net adresinden kullanacağınız pear paketinin linkini verebilirmisiniz?

    ama şöyleki pear.php ile kullanacağınız paketin ana dosyası ve ana klasörü aynı yerde olmalı.benim örneğimdeki gibi. yani pear.php ve DB.php be DB klasörü aynı dizinde olmalı.bide Soap demişssiniz.diğer yazdığınız soruda yani php + soap makalemdeki sorudaki cevap size yeterli geldimi?

    bu sorunuzdan benim anladığım soapla ilgili bir pear paketini kullanacaksınız sanırım.diğeer cevabımdada (php + soap makalemdeki sorunuza verdiğim cavap)söylemiştim.Nüfüs müdürlüğü tc kimlik hizmetini ücretli yaptı vede pear ‘in soap paketiyle nufus müdürlüğüne ulşamamanız normal.çümkü nüfüs müdürlüğü sadece ücretli kurumlara bu hizmeti veriyor.eğer doğru anladıysam sorunuzu tc nüfüs müdürlüğü ücretsiz sorgu göndermeye izin vermediği için soapClient nesnesi oluşturulamıyor ve hata veriyor.

    Yinede sorununuzu çözmek için elimden geleni yapmak isterim.
    Kolay gelsin.

Share your opinion! Post your thoughts.