kurtkuzu
10-11-2007, 23:26 PM
Bütün programlama dilerinde başlangıçtaki program her zaman ekrana HELLO WORLD yazdıran bir progr*****la başlar fakat burada zaten PHP ye giriş yapmış olduğumuzu göz önüne alarak farklı bir örnek vereceğim.
Örnek uygulamamızın hedefi veri olarak verilen bir servisin hangi porttan hizmet verdiğini göstermektir. Örneğin POP3 yazdığımızda karşımıza 110 değeri gelecektir.
<?php
/**
* PHP-GTK örnek uygulaması
* @author Ersin DOĞAN [xewn] < xewn@gmx.net >
*
*/
/*
* İlk önce GTK kütüphanesini yüklememiz gerekiyor.
* Bunu için PHP nin dl fonksiyonunu kullanacağız.
* dl fonksiyonu PHP-GTK için gerekli olan kütüphaneyi
* (windowsta php_gtk.dll Linuxta php_gtk.so) yükleyecektir.
* PHP_SHLIB_SUFFIX sabiti işletim sistemine göre gerekli olan
* kütüphane uzantısını barındırır.
*/
if(!dl("php_gtk.".PHP_SHLIB_SUFFIX))
{
die("GTK yuklenemedi");
}
// penceremizi oluşturuyoruz
$pencere=&new GtkWindow();
//pencere başlığımızı ayarlıyoruz
$pencere->set_title("PHP-GTK ORNEK UYGULAMA-I");
/*
* PHP-GTK ile yeni tanışacağımız bir terim SİGNAL e kısaca
* değinmek istiyorum. SİGNAL ler widget(parçacıklar) tarafından gönderilen
* bildirilerdir. GUI programlama yaparken kullanıcı tarafından ya da
* programın kendi içerisinde başlattığı aksiyonlara cevap vermek
* gerekmektedir.GNOME ve GTK+ bunu SİGNAL leri kullanarak yapmaktadır.
* SİGNAL, kullanıcının bir düğmeye tıklaması, pencerenin kapatılması
* vb işlemler sonucunda, üzerinde işlem yapılmış widget(parçacık)
* tarafından gerçekleşmiş olan olaya karşılık gönderilen bir bildirimdir.
* Gönderilen bu SİGNAL programcı tarafından kontrol edilerek bu SİGNALE
* karşılık bir callback (bir olay sonucunda gerçekleşecek fonksiyon)
* çalıştırılmasını sağlar.Aşağıdaki satırda GtkWindow widgetine bağlanarak
* pencere kapatıldığında programdan çıkılmasını sağlayacak bir callback
* atadık buradaki callback bizim oluşturduğumuz bir fonksiyon değil
* GTK nın kendi içerisinde bulunan gtk::main_quit() biçiminde kullanılan
* ve programı sonlandırmamızı sağlayan GTK sınıfına ait bir metotdur.Ve
* Penceremize bu callback i atamadığımız takdirde pencereyi
* kapadığımızda PHP arka planda çalışmaya devam edecektir. Bu durum
* her zaman göz önünde bulundurulmalıdır.
* Bir widget tarafından gönderilecek SİGNAL i almak için yapı şu şekildedir:
* connect_object(string signal,mixed callback,[parametreler])
* ayrıca bir signal e bağlanmak için connect(string signal,mixed
* callback,[parametreler]) biçiminde de kullanabiliriz
* burada “array()” kullanmamızın sebebi calbackin bir sınıfa ait olması bir
* sınıfa ait metedou kullanmak için bu yapıyı kullanmamız gerekmektedir.
* connect_object(string signal,array(string obje,string metod,[parametreler]))
* biçiminde kullanılır.
*/
$pencere->connect_object("destroy",array("gtk","main_quit"));
/**
* GtkEntry webden tanıdığımız textfield gibi veri girişini
* sağlayan bir widgettir.
*/
$protokol=&new GtkEntry();
/*
* GtkLabel bir etikettir. Kendisine verilen veriyi barındırarak
* eklendiği yerde bu yazıyı görüntüleyen bir widgettir.
*
* kullanım şekli GtkLabel(string etiketDegeri)
*/
$protokolEtiket=&new GtkLabel("Protokol Adı:");
/*
* GtkButton düğme oluşturan bir widgettir.
*
* kullanım şekli GtkButton([string dügmeUstundekiYazı])
*/
$dugme=&new GtkButton("KONTROL ET");
/*
* Aşağıdaki satır yukarıda değinmiş olduğumuz SIGNAL e iyi bir örnektir.
*
* Kullanıcının bu düğmeye tıklamasıyla bir fonksiyon çalıştırmak istiyoruz
* bunun içinde GtkButton objesinin clicked signaline bağlanarak bir callback
* atıyoruz.
* böylece clicked signali alındığında callbackimiz çalışacaktır.
* GtkButton için farklı sinyaller de vardır fakat şimdilik onlara
* değinmeyeceğiz.
*/
$dugme->connect("clicked","protokolKontrol");
/*
* GtkText yazı görüntülemeye yarayan bir widgettir. Bunu web ortamındaki
* TextArea ya benzetebiliriz.
*
*/
$sonuc=&new GtkText();
/*
* Aşağıda kullanacağımız GtkHBox GtkVBox widgetleri birer taşıyıcıdırlar.
* Bu widgetler yatay (Horizontal) veya dikey (Vertical) olarak
* ayrılmaktadırlar. Taşıyıcılar(container)widget barındırabilen widgetlerdir.
* GtkWindow(pencere) widgeti de bir taşıyıcıdır fakat sadece bir widget
* barındırabilir. Bu yüzden ekleyeceğimiz diğer widgetleri bir arada tutup
* pencereye ekleyebilmek için taşıyıcıları kullanırız. Bu aynı zamanda
* tasarımın bir gerekliliğidir. Ekleyeceğimiz parçacıkların (widgetlerin)
* nasıl yerleşeceğini belirlemeli ve buna uygun taşıyıcıları kullanarak
* tasarımı gerçekleştirmeliyiz. Burada bir düğme,veri girişi sağlayacak bir
* GtkEntry parçacığı ve sonucu görüntüleyebilmek için bir yazı alanımız var.
* Bunları birleştirip ana taşıyıcıya ekleyebilmek için bir GtkVBox ve iki
* tanede GtkHBox kullanacağız.
*/
$yatayKutu=&new GtkHBox();
$yatayKutu2=&new GtkHBox();
$dikeyKutu=&new GtkVBox();
/*
* Hem GtkHBox hem de GtkVBox GtkBox sınıfının alt sınıflarıdırlar ve
* bu yüzden GtkBox sınıfının metotlarını kullanırlar. Bu metotlardan
* ikisi şunlardır:
* pack_start(
* GtkWidget child,
* [bool expand=true,
* [bool fill=true,
* [int padding=0]]]
* )
* birinci parametre eklenecek olan widget (parçacık) tır
* ikinci parametre ana taşıyıcı genişlediğinde taşıyıcının beraberinde
* genişleyip genişlemeyeceğini belirler.
* üçüncü parametre taşıyıcının var olan bütün boşluğa yayılıp
* yayılmayacağını belirler.
* son parametre kenarlık boşluğunu belirler.
* bu metot verilen widgetin baştan başlanarak taşıyıcıya eklemesini sağlar.
* İstenildiği kadar widget eklenebilir.
*
* Bir diğer metot olan pack_end aynı parametreleri alır ve aynı işlevi görür.
* Tek farkı eklemeyi sondan başlayarak yapması.
*/
$yatayKutu->pack_start($protokolEtiket,false,false,1);
$yatayKutu->pack_start($protokol,false,false,1);
$yatayKutu->pack_start($dugme,false,false,1);
$yatayKutu2->pack_start($sonuc,false,false,1);
$dikeyKutu->pack_start($yatayKutu,false,false,1);
$dikeyKutu->pack_start($yatayKutu2,false,false,1);
$pencere->add($dikeyKutu,false,false,1);
/*
* Daha önceki dokümanları okuduysanız bir Gtk nesnesinin oluşturulmasından
* yaşam süresi boyunca 5 aşamaya sahip olduğunu hatırlarsınız.
* Oluşturma, yerleştirme, sinyal bağlama, görüntüleme, yok etme.
* Burada değinmek istediğim kısmı görüntüleme.
* her widgeti tek tek show() metodu ile görüntüleyebileceğimiz gibi
* bütün widgetleri eklediğimiz pencerenin show_all() metodunu kullanarak da
* yapabiliriz. Bu tamamen uygulamalarınızdaki gereksinimlerinize göre
* değişiklik gösterecektir. Burada şimdilik bütün widgetlerin eklenmiş
* olduğu pencerenin fonksiyonunu kullanarak widgetlerin görüntülenmesini
* sağlayacağız. Widgetleri oluşturduktan sonra görüntülemezseniz
* oluşturduğunuz widgetler görüntülenmeyecektir.
*/
$pencere->show_all();
/**
* protokolKontrol
*
* Yukarıda düğmeye tıklanmasıyla çalışacak olan callbackimiz. Bu callbackin
* tetiklenebilmesi için düğmenin clicked sinyaline bağlandık. Kullanıcı veri
* alanına bir servis ismi girmişise o servisin hangi porttan verildiğini
* kontrol ederek sonucu kullanıcıya gösterir. Eğer verilen servis ismi yanlış
* veya eksik ise sonuç alanında daha önceden var olan bir sonuç varsa bunu
* silecektir ve herhangi bir hata iletisi vermeyecektir.
*
* @return void
*/
function protokolKontrol()
{
global $protokol,$sonuc;
// get_text() metodu GtkEntry widgeti aracılığıyla
// girilen veriyi almamızı sağlar
$protoAd=$protokol->get_text();
if(isset($protoAd))
{
$servis=getservbyname($protoAd, "tcp");
// delete_text() metodu sonucu göstereceğimiz
// yazı alnında veri varsa silmemizi sağlar
// kullanım şekli: delete_text(int baslangic,int son)
// burada baslangıca 0 vererek en baştan başlayacağımızı
// son olarakta -1 değeri vererek tüm veriyi seçeceğimizi belirttik
// delete_text(0,10) şeklideki bir kullanım baştan başlayarak ilk 10
// karakteri silmeyi sağlar.
$sonuc->delete_text(0,-1);
// insert_text() metodu yazı alanına (GtkText) veri girişi
// yapmamızı sağlar. Kullanım şekli:
// insert_text(string veri,int pozisyon)
// verilen pozisyona veriyi girer. Örneğimizde pozisyon değeri olarak
// 0 verdik. Bu verinin en başa ekleneceğini belirtir.
// Önceki verileri silme işlemini yapmamış olsaydık eklenen her veri
// başa eklenecek ve kendisinden sonra gelen satırı aşağı kaydıracaktı.
$sonuc->insert_text($servis,0);
}
}
// ve son olarak gtk::main metodunu kullanacağız.
// Bu metod Gtk döngüsünü (loop) oluşturarak uygulamamızın
// çalışmasını sağlar. Bu satırı eklemezseniz uygulama sorunsuz
// bir şekilde başlayacaktır, fakat pencere görüntülendikten hemen
// sonra kaybolacak ve uygulamamız sonuçlanacaktır.
// PHP-GTK uygulamalarında web ortamındaki gibi çalışma zamanı
// sınırlaması bulunmamaktadır. Bu yüzden uygulamanız php.ini dosyasında
// herhangi bir ayarlama yapmanıza gerek kalmadan kullanıcı uygulamayı
// sonlandırana kadar çalışmaya devam edecektir.
gtk::main();
?>
uşkusuz PHP, Internet omurgasına bağlı sinir hücrelerinin en önemlilerinden biridir. Bugün milyonlarca web sitesi PHP aracılığıyla ziyaretçileriyle etkileşimli bir çatı altında çalışabilmektedir. PHP, Microsoft gibi bir yazılım devini, betik dilleri yarışında bir çok açıdan geride bırakmış, Perl'den doğmasına rağmen onu da geride bırakmış ve sanal dünyaya en hakim betik dili olmuştur.
.NET'in, Microsoft tarafından J2EE'ye karşı hamle olarak ileri sürülmesi, özgür yazılımcıları da heyecanlandırmış ve yeni arayışlara itmiştir. İşte PHP-GTK bu yeni arayışın ilk ürünlerinden biridir. Tanım: PHP-GTK, GTK+ fonksiyonlarını kullanıp, tek başına çalışan, platform bağımsız, kendilerine ait GUI'lere sahip uygulamalar geliştirebilmemiz için ortaya çıkarılmış yeni bir programlama teknolojisidir. Her ne kadar bir PHP Eklentisi olarak adlandırılsa da yüklendiği görev üst düzeydir.
Bu teknoloji ile C++ içinde GTK fonksiyonlarını kullanmak ile PHP içinde GTK fonksiyonlarını kullanmak artık çıktı üretimi açısından fark etmemektedir.
Bununla beraber PHP-GTK istemci taraflı çalışması için tasarlanmıştır. Web ortamında kullanılmaz. Yukarıda ayrıntılandırdığımız gibi PHP-GTK'nın ortaya çıkış amacı masaüstünde, tarayıcıdan bağımsız, 'standalone' programlar oluşturmaktır.
Bu da nereden çıktı? Güzel güzel Delphi, Visual Basic kullanıyorduk Windows için program yazarken.
Linux'ta gcc C derleyicisi neyimize yetmiyordu ki? C 'de yıllardır var olan süper bir dil... Hele bir de Ansi C standartlarında yazarsak tam bir çoklu platform programcığına sahip oluruz, değil mi?
Tam olarak değil, hepimiz farkındayız ki Ansi C ile yazdığımız progr*****lar bile bazen (benim gibi acemi programcıların bilgisayarında çoğunlukla..) iki sistemde çalışmamazlık edebiliyor. Bunda işlemci mimarisinden, bağlı kütüphanelerdeki bir virgülün farklılığına kadar bir çok etken söz konusu. Bununla beraber Windows için C++ ile geliştirilen bir uygulamanın da ne kadar zor yazıldığını, ne kadar uğraş gerektirdiğini bu işle uğraşan her programcı az çok bilmektedir.
PHP geliştiricileri, biz PHP programcıları gibi Windows ve Linux'ta birlikte çalışabilecek bir program yazmak için alt yapının tam olarak oturmadığının farkındaydılar. Her ne kadar Ansi C gibi bir standart ile ya da Java gibi çoklu platform teknolojisi ile bunun altından kalkılmaya çalışılıyorsa da eminiz ki Ansi C standartlarında kod yazmak, ya da C++'a göre daha kolay olan fakat geliştirilen uygulamaların hantal çalıştığı Java teknolojisi Ömer Balyalı gibi bir lise öğrencisinin PHP kodlarken yaşadığı rahatlığı ona sunmayacaktı.
Andrei Zmievski bunların farkında bir programcı olarak PHP'yi standartlaşan bir betik dili olmaktan çıkarıp tarayıcı bağımsız kullanıcı arabirimi bulunan bir dil haline getirmek için PHP-GTK'yı programlamaya başladı.
Çok değil bir kaç yıl önce, Linux popülaritesinin zirvesine ulaşırken, kullanıcılar bir şeylerin eksik olduğunun farkına varmışlardı. Penguenin sevimli görünüşü grafik ve kullanıcı arabirimindeki eksiklikler nedeniyle kullanıcıya bir soğukluk veriyordu. Fanatikler -ki sisteme yararlıdırlar bence- dışında ki herkes bu gerçeğin farkındaydı.
Bunun farkına varan linux topluluğu o sıralarda sisteme bir fotoğraf stüdyosunun dahil edilmesini düşünüyordu. GIMP adı verilen projede herşey çok güzel başladı fakat işler düşünüldüğü kadar hızlı ilerlemeyecekti. Bir süre aynı yolda devam eden topluluk bir standartlar kütüphanesinin GIMP'in araç kutusu için kesin bir gereklilik olduğu kanısına ulaştılar: GTK+ ( G IMP T ool K it)
GTK+ sadece GIMP ( G NU I mage M anipulation P rogram ) için oluşturulan bir standartlar kütüphanesiydi. Fakat bu kütüphane, yazılım dünyasını şaşırtacak biçimde oldukça hızlı ilerledi ve linux dağıtımlarının en önemli iki kabuğundan GNOME'un merkezi bir parçası haline geldi.
GTK+'nın hedefe yönelmiş olarak hareket ettiği, yukarıdaki gelişmelerin hemen ardından Windows ve BeOS sürümlerinin çıkması ile gayet anlaşılır hale geldi. Bu hamlelerin ardından, Zmievski , PHP ile GTK'yı bir PHP eklentisinde toplayarak geleceğin çoklu platform teknolojisini oluşturmak için kolları sıvadı.
ve Bugün.. Artık elimizde platform bağımsız, kullanıcı arabirimine sahip ve tek başına çalışabilen uygulamaları, Linux, Windows ve BeOS sistemlerinde çalıştıran bir programlama teknolojisinin ilk kararlı sürümü var: PHP-GTK 1.0.0
Bu teknolojiyi şu an bilgisayarınıza indirme ve deneme şansına sahipsiniz. Benim bilgisayarımda PHP-GTK 1.0 kararlı sürümü yüklü şu an. PHP-GTK şu aşamada GTK+ Sürüm 2.x'i desteklemiyor. Fakat PHP 5'in çıkmasının ardından bu alanda büyük bir atılım olacak ve PHP-GTK'nın çalışması için gerekli olan bütün teknolojiler birbirlerine entegre olarak aynı anda duyurulacak.
>> PHP-GTK Sürüm 1.0.0 |
http://gtk.php.net/download.php
Örnek uygulamamızın hedefi veri olarak verilen bir servisin hangi porttan hizmet verdiğini göstermektir. Örneğin POP3 yazdığımızda karşımıza 110 değeri gelecektir.
<?php
/**
* PHP-GTK örnek uygulaması
* @author Ersin DOĞAN [xewn] < xewn@gmx.net >
*
*/
/*
* İlk önce GTK kütüphanesini yüklememiz gerekiyor.
* Bunu için PHP nin dl fonksiyonunu kullanacağız.
* dl fonksiyonu PHP-GTK için gerekli olan kütüphaneyi
* (windowsta php_gtk.dll Linuxta php_gtk.so) yükleyecektir.
* PHP_SHLIB_SUFFIX sabiti işletim sistemine göre gerekli olan
* kütüphane uzantısını barındırır.
*/
if(!dl("php_gtk.".PHP_SHLIB_SUFFIX))
{
die("GTK yuklenemedi");
}
// penceremizi oluşturuyoruz
$pencere=&new GtkWindow();
//pencere başlığımızı ayarlıyoruz
$pencere->set_title("PHP-GTK ORNEK UYGULAMA-I");
/*
* PHP-GTK ile yeni tanışacağımız bir terim SİGNAL e kısaca
* değinmek istiyorum. SİGNAL ler widget(parçacıklar) tarafından gönderilen
* bildirilerdir. GUI programlama yaparken kullanıcı tarafından ya da
* programın kendi içerisinde başlattığı aksiyonlara cevap vermek
* gerekmektedir.GNOME ve GTK+ bunu SİGNAL leri kullanarak yapmaktadır.
* SİGNAL, kullanıcının bir düğmeye tıklaması, pencerenin kapatılması
* vb işlemler sonucunda, üzerinde işlem yapılmış widget(parçacık)
* tarafından gerçekleşmiş olan olaya karşılık gönderilen bir bildirimdir.
* Gönderilen bu SİGNAL programcı tarafından kontrol edilerek bu SİGNALE
* karşılık bir callback (bir olay sonucunda gerçekleşecek fonksiyon)
* çalıştırılmasını sağlar.Aşağıdaki satırda GtkWindow widgetine bağlanarak
* pencere kapatıldığında programdan çıkılmasını sağlayacak bir callback
* atadık buradaki callback bizim oluşturduğumuz bir fonksiyon değil
* GTK nın kendi içerisinde bulunan gtk::main_quit() biçiminde kullanılan
* ve programı sonlandırmamızı sağlayan GTK sınıfına ait bir metotdur.Ve
* Penceremize bu callback i atamadığımız takdirde pencereyi
* kapadığımızda PHP arka planda çalışmaya devam edecektir. Bu durum
* her zaman göz önünde bulundurulmalıdır.
* Bir widget tarafından gönderilecek SİGNAL i almak için yapı şu şekildedir:
* connect_object(string signal,mixed callback,[parametreler])
* ayrıca bir signal e bağlanmak için connect(string signal,mixed
* callback,[parametreler]) biçiminde de kullanabiliriz
* burada “array()” kullanmamızın sebebi calbackin bir sınıfa ait olması bir
* sınıfa ait metedou kullanmak için bu yapıyı kullanmamız gerekmektedir.
* connect_object(string signal,array(string obje,string metod,[parametreler]))
* biçiminde kullanılır.
*/
$pencere->connect_object("destroy",array("gtk","main_quit"));
/**
* GtkEntry webden tanıdığımız textfield gibi veri girişini
* sağlayan bir widgettir.
*/
$protokol=&new GtkEntry();
/*
* GtkLabel bir etikettir. Kendisine verilen veriyi barındırarak
* eklendiği yerde bu yazıyı görüntüleyen bir widgettir.
*
* kullanım şekli GtkLabel(string etiketDegeri)
*/
$protokolEtiket=&new GtkLabel("Protokol Adı:");
/*
* GtkButton düğme oluşturan bir widgettir.
*
* kullanım şekli GtkButton([string dügmeUstundekiYazı])
*/
$dugme=&new GtkButton("KONTROL ET");
/*
* Aşağıdaki satır yukarıda değinmiş olduğumuz SIGNAL e iyi bir örnektir.
*
* Kullanıcının bu düğmeye tıklamasıyla bir fonksiyon çalıştırmak istiyoruz
* bunun içinde GtkButton objesinin clicked signaline bağlanarak bir callback
* atıyoruz.
* böylece clicked signali alındığında callbackimiz çalışacaktır.
* GtkButton için farklı sinyaller de vardır fakat şimdilik onlara
* değinmeyeceğiz.
*/
$dugme->connect("clicked","protokolKontrol");
/*
* GtkText yazı görüntülemeye yarayan bir widgettir. Bunu web ortamındaki
* TextArea ya benzetebiliriz.
*
*/
$sonuc=&new GtkText();
/*
* Aşağıda kullanacağımız GtkHBox GtkVBox widgetleri birer taşıyıcıdırlar.
* Bu widgetler yatay (Horizontal) veya dikey (Vertical) olarak
* ayrılmaktadırlar. Taşıyıcılar(container)widget barındırabilen widgetlerdir.
* GtkWindow(pencere) widgeti de bir taşıyıcıdır fakat sadece bir widget
* barındırabilir. Bu yüzden ekleyeceğimiz diğer widgetleri bir arada tutup
* pencereye ekleyebilmek için taşıyıcıları kullanırız. Bu aynı zamanda
* tasarımın bir gerekliliğidir. Ekleyeceğimiz parçacıkların (widgetlerin)
* nasıl yerleşeceğini belirlemeli ve buna uygun taşıyıcıları kullanarak
* tasarımı gerçekleştirmeliyiz. Burada bir düğme,veri girişi sağlayacak bir
* GtkEntry parçacığı ve sonucu görüntüleyebilmek için bir yazı alanımız var.
* Bunları birleştirip ana taşıyıcıya ekleyebilmek için bir GtkVBox ve iki
* tanede GtkHBox kullanacağız.
*/
$yatayKutu=&new GtkHBox();
$yatayKutu2=&new GtkHBox();
$dikeyKutu=&new GtkVBox();
/*
* Hem GtkHBox hem de GtkVBox GtkBox sınıfının alt sınıflarıdırlar ve
* bu yüzden GtkBox sınıfının metotlarını kullanırlar. Bu metotlardan
* ikisi şunlardır:
* pack_start(
* GtkWidget child,
* [bool expand=true,
* [bool fill=true,
* [int padding=0]]]
* )
* birinci parametre eklenecek olan widget (parçacık) tır
* ikinci parametre ana taşıyıcı genişlediğinde taşıyıcının beraberinde
* genişleyip genişlemeyeceğini belirler.
* üçüncü parametre taşıyıcının var olan bütün boşluğa yayılıp
* yayılmayacağını belirler.
* son parametre kenarlık boşluğunu belirler.
* bu metot verilen widgetin baştan başlanarak taşıyıcıya eklemesini sağlar.
* İstenildiği kadar widget eklenebilir.
*
* Bir diğer metot olan pack_end aynı parametreleri alır ve aynı işlevi görür.
* Tek farkı eklemeyi sondan başlayarak yapması.
*/
$yatayKutu->pack_start($protokolEtiket,false,false,1);
$yatayKutu->pack_start($protokol,false,false,1);
$yatayKutu->pack_start($dugme,false,false,1);
$yatayKutu2->pack_start($sonuc,false,false,1);
$dikeyKutu->pack_start($yatayKutu,false,false,1);
$dikeyKutu->pack_start($yatayKutu2,false,false,1);
$pencere->add($dikeyKutu,false,false,1);
/*
* Daha önceki dokümanları okuduysanız bir Gtk nesnesinin oluşturulmasından
* yaşam süresi boyunca 5 aşamaya sahip olduğunu hatırlarsınız.
* Oluşturma, yerleştirme, sinyal bağlama, görüntüleme, yok etme.
* Burada değinmek istediğim kısmı görüntüleme.
* her widgeti tek tek show() metodu ile görüntüleyebileceğimiz gibi
* bütün widgetleri eklediğimiz pencerenin show_all() metodunu kullanarak da
* yapabiliriz. Bu tamamen uygulamalarınızdaki gereksinimlerinize göre
* değişiklik gösterecektir. Burada şimdilik bütün widgetlerin eklenmiş
* olduğu pencerenin fonksiyonunu kullanarak widgetlerin görüntülenmesini
* sağlayacağız. Widgetleri oluşturduktan sonra görüntülemezseniz
* oluşturduğunuz widgetler görüntülenmeyecektir.
*/
$pencere->show_all();
/**
* protokolKontrol
*
* Yukarıda düğmeye tıklanmasıyla çalışacak olan callbackimiz. Bu callbackin
* tetiklenebilmesi için düğmenin clicked sinyaline bağlandık. Kullanıcı veri
* alanına bir servis ismi girmişise o servisin hangi porttan verildiğini
* kontrol ederek sonucu kullanıcıya gösterir. Eğer verilen servis ismi yanlış
* veya eksik ise sonuç alanında daha önceden var olan bir sonuç varsa bunu
* silecektir ve herhangi bir hata iletisi vermeyecektir.
*
* @return void
*/
function protokolKontrol()
{
global $protokol,$sonuc;
// get_text() metodu GtkEntry widgeti aracılığıyla
// girilen veriyi almamızı sağlar
$protoAd=$protokol->get_text();
if(isset($protoAd))
{
$servis=getservbyname($protoAd, "tcp");
// delete_text() metodu sonucu göstereceğimiz
// yazı alnında veri varsa silmemizi sağlar
// kullanım şekli: delete_text(int baslangic,int son)
// burada baslangıca 0 vererek en baştan başlayacağımızı
// son olarakta -1 değeri vererek tüm veriyi seçeceğimizi belirttik
// delete_text(0,10) şeklideki bir kullanım baştan başlayarak ilk 10
// karakteri silmeyi sağlar.
$sonuc->delete_text(0,-1);
// insert_text() metodu yazı alanına (GtkText) veri girişi
// yapmamızı sağlar. Kullanım şekli:
// insert_text(string veri,int pozisyon)
// verilen pozisyona veriyi girer. Örneğimizde pozisyon değeri olarak
// 0 verdik. Bu verinin en başa ekleneceğini belirtir.
// Önceki verileri silme işlemini yapmamış olsaydık eklenen her veri
// başa eklenecek ve kendisinden sonra gelen satırı aşağı kaydıracaktı.
$sonuc->insert_text($servis,0);
}
}
// ve son olarak gtk::main metodunu kullanacağız.
// Bu metod Gtk döngüsünü (loop) oluşturarak uygulamamızın
// çalışmasını sağlar. Bu satırı eklemezseniz uygulama sorunsuz
// bir şekilde başlayacaktır, fakat pencere görüntülendikten hemen
// sonra kaybolacak ve uygulamamız sonuçlanacaktır.
// PHP-GTK uygulamalarında web ortamındaki gibi çalışma zamanı
// sınırlaması bulunmamaktadır. Bu yüzden uygulamanız php.ini dosyasında
// herhangi bir ayarlama yapmanıza gerek kalmadan kullanıcı uygulamayı
// sonlandırana kadar çalışmaya devam edecektir.
gtk::main();
?>
uşkusuz PHP, Internet omurgasına bağlı sinir hücrelerinin en önemlilerinden biridir. Bugün milyonlarca web sitesi PHP aracılığıyla ziyaretçileriyle etkileşimli bir çatı altında çalışabilmektedir. PHP, Microsoft gibi bir yazılım devini, betik dilleri yarışında bir çok açıdan geride bırakmış, Perl'den doğmasına rağmen onu da geride bırakmış ve sanal dünyaya en hakim betik dili olmuştur.
.NET'in, Microsoft tarafından J2EE'ye karşı hamle olarak ileri sürülmesi, özgür yazılımcıları da heyecanlandırmış ve yeni arayışlara itmiştir. İşte PHP-GTK bu yeni arayışın ilk ürünlerinden biridir. Tanım: PHP-GTK, GTK+ fonksiyonlarını kullanıp, tek başına çalışan, platform bağımsız, kendilerine ait GUI'lere sahip uygulamalar geliştirebilmemiz için ortaya çıkarılmış yeni bir programlama teknolojisidir. Her ne kadar bir PHP Eklentisi olarak adlandırılsa da yüklendiği görev üst düzeydir.
Bu teknoloji ile C++ içinde GTK fonksiyonlarını kullanmak ile PHP içinde GTK fonksiyonlarını kullanmak artık çıktı üretimi açısından fark etmemektedir.
Bununla beraber PHP-GTK istemci taraflı çalışması için tasarlanmıştır. Web ortamında kullanılmaz. Yukarıda ayrıntılandırdığımız gibi PHP-GTK'nın ortaya çıkış amacı masaüstünde, tarayıcıdan bağımsız, 'standalone' programlar oluşturmaktır.
Bu da nereden çıktı? Güzel güzel Delphi, Visual Basic kullanıyorduk Windows için program yazarken.
Linux'ta gcc C derleyicisi neyimize yetmiyordu ki? C 'de yıllardır var olan süper bir dil... Hele bir de Ansi C standartlarında yazarsak tam bir çoklu platform programcığına sahip oluruz, değil mi?
Tam olarak değil, hepimiz farkındayız ki Ansi C ile yazdığımız progr*****lar bile bazen (benim gibi acemi programcıların bilgisayarında çoğunlukla..) iki sistemde çalışmamazlık edebiliyor. Bunda işlemci mimarisinden, bağlı kütüphanelerdeki bir virgülün farklılığına kadar bir çok etken söz konusu. Bununla beraber Windows için C++ ile geliştirilen bir uygulamanın da ne kadar zor yazıldığını, ne kadar uğraş gerektirdiğini bu işle uğraşan her programcı az çok bilmektedir.
PHP geliştiricileri, biz PHP programcıları gibi Windows ve Linux'ta birlikte çalışabilecek bir program yazmak için alt yapının tam olarak oturmadığının farkındaydılar. Her ne kadar Ansi C gibi bir standart ile ya da Java gibi çoklu platform teknolojisi ile bunun altından kalkılmaya çalışılıyorsa da eminiz ki Ansi C standartlarında kod yazmak, ya da C++'a göre daha kolay olan fakat geliştirilen uygulamaların hantal çalıştığı Java teknolojisi Ömer Balyalı gibi bir lise öğrencisinin PHP kodlarken yaşadığı rahatlığı ona sunmayacaktı.
Andrei Zmievski bunların farkında bir programcı olarak PHP'yi standartlaşan bir betik dili olmaktan çıkarıp tarayıcı bağımsız kullanıcı arabirimi bulunan bir dil haline getirmek için PHP-GTK'yı programlamaya başladı.
Çok değil bir kaç yıl önce, Linux popülaritesinin zirvesine ulaşırken, kullanıcılar bir şeylerin eksik olduğunun farkına varmışlardı. Penguenin sevimli görünüşü grafik ve kullanıcı arabirimindeki eksiklikler nedeniyle kullanıcıya bir soğukluk veriyordu. Fanatikler -ki sisteme yararlıdırlar bence- dışında ki herkes bu gerçeğin farkındaydı.
Bunun farkına varan linux topluluğu o sıralarda sisteme bir fotoğraf stüdyosunun dahil edilmesini düşünüyordu. GIMP adı verilen projede herşey çok güzel başladı fakat işler düşünüldüğü kadar hızlı ilerlemeyecekti. Bir süre aynı yolda devam eden topluluk bir standartlar kütüphanesinin GIMP'in araç kutusu için kesin bir gereklilik olduğu kanısına ulaştılar: GTK+ ( G IMP T ool K it)
GTK+ sadece GIMP ( G NU I mage M anipulation P rogram ) için oluşturulan bir standartlar kütüphanesiydi. Fakat bu kütüphane, yazılım dünyasını şaşırtacak biçimde oldukça hızlı ilerledi ve linux dağıtımlarının en önemli iki kabuğundan GNOME'un merkezi bir parçası haline geldi.
GTK+'nın hedefe yönelmiş olarak hareket ettiği, yukarıdaki gelişmelerin hemen ardından Windows ve BeOS sürümlerinin çıkması ile gayet anlaşılır hale geldi. Bu hamlelerin ardından, Zmievski , PHP ile GTK'yı bir PHP eklentisinde toplayarak geleceğin çoklu platform teknolojisini oluşturmak için kolları sıvadı.
ve Bugün.. Artık elimizde platform bağımsız, kullanıcı arabirimine sahip ve tek başına çalışabilen uygulamaları, Linux, Windows ve BeOS sistemlerinde çalıştıran bir programlama teknolojisinin ilk kararlı sürümü var: PHP-GTK 1.0.0
Bu teknolojiyi şu an bilgisayarınıza indirme ve deneme şansına sahipsiniz. Benim bilgisayarımda PHP-GTK 1.0 kararlı sürümü yüklü şu an. PHP-GTK şu aşamada GTK+ Sürüm 2.x'i desteklemiyor. Fakat PHP 5'in çıkmasının ardından bu alanda büyük bir atılım olacak ve PHP-GTK'nın çalışması için gerekli olan bütün teknolojiler birbirlerine entegre olarak aynı anda duyurulacak.
>> PHP-GTK Sürüm 1.0.0 |
http://gtk.php.net/download.php