İletişim
Yardım
Bugünki Mesajlar
Ajanda
Üye Listesi
Kayıt ol
Home

Navigation
Geri git   DelikanForum.NET > BILGISAYAR-INTERNET / GRAFIK-WEB > Html - PHP - SQL
Cevapla
 
LinkBack Seçenekler

  #1
Alt 20.03.2007, 18:48
 
SeyFull@H - ait Kullanıcı Resmi (Avatar)
 
Üyelik tarihi: 29.07.2005
Mesajlar: 971
Teşekkür etti: 0
4 Teşekkür 2 Mesaja aldı
Php`de Ncurses Uygulaması II

Not: Bu uygulama FreeBSD üzerinde kullanılmıştır.
Her zaman olduğu gibi betiğimizin ilk satırına php`nin yolunu yazıyoruz.
Kod:
#!/usr/local/bin/php define("ESCAPE_KEY", 27); define("ENTER_KEY", 13); define("SPACE_KEY", 32);
Görüldüğü gibi php deki define(); fonksiyonu ile klavye tuşlarını tanımlamış olduk.

PHP- Kodu:
function servicesApp($lines$coloms){

    
$serv_win=ncurses_newwin($lines-10$coloms-35230);
    
ncurses_wattron($serv_winNCURSES_A_BOLD);
    
ncurses_waddstr($serv_win,"Services Status");
    
ncurses_wattroff($serv_winNCURSES_A_BOLD);
    
ncurses_wrefresh($serv_win);

    
$liste=ncurses_newwin($lines-12$coloms-50435);
    
ncurses_wborder($liste,0,00,00,00,0);
    
ncurses_wattron($listeNCURSES_A_BOLD);
    
ncurses_waddstr($liste,"Active Services List");
    
ncurses_wattroff($listeNCURSES_A_BOLD);

    while(
1){
    
$s_list=array();
    
exec("ls /var/run/*.pid"$s_list);
    
$say=count($s_list);

    for(
$i=0$i<$say$i++){
        
$s_kisa=explode("/",$s_list[$i]);
            if(
$select==intval($i)){
        
ncurses_wattron($liste,NCURSES_A_REVERSE);
        
ncurses_mvwaddstr($liste,$num+$i+2,2,"[ * ] $s_kisa[3]");
        
ncurses_wattroff($liste,NCURSES_A_REVERSE);
        }else{
        
ncurses_mvwaddstr($liste,$num+$i+2,2,"[ * ] $s_kisa[3]");
    }}
    
ncurses_wrefresh($liste);

$pik=ncurses_getch($liste);

    if(
$pik==NCURSES_KEY_UP){
        
$select=$select-1;
        if(
$select<0){ $select=0; }
    }elseif(
$pik==NCURSES_KEY_DOWN){
        
$select=$select+1;
        if(
$select>count($s_list)){ $select=count($s_list)-1; }
}

    
ncurses_wrefresh($liste);

    if(
$pik==SPACE_KEY){
    
exec("rm $s_list[$select]");
    
ncurses_wrefresh($serv_win);
    
ncurses_wrefresh($liste);
    
ncurses_refresh();
}

    if(
$pik==ENTER_KEY){
    
ncurses_refresh();
    break;
}}} 

ServicesApp adlı bir fonksiyon tanımladık ve buna $lines ve $coloms değişkenleri gönderdik. Bunlar birer sayısal değerdir. Fonksiyonlar bittikten sonra bundan bahsedeceğim. Bunları şu anlık konsolumuzun satır ve sutun sayısı olarak düşünelim. $serv_win adlı bir pencere oluşturup bu pencerenin koordinatlarını $lines ve $coloms yardımıyla tanımladık. Aynı zamanda “Services Status” şeklinde birde penceremize başlık (title) attık.
Daha sonra $liste adlı yeni bir pencere attık –ki bu pencerede az sonra çalışan servislerimizi listeleyeceğiz.ncurses_wattron(), ncurses_waddstr(), ncurses_wattroff() fonksiyonları yardımıyla bu pencereye de bir başlık attık. /var/run altında *.pid olan aktif servislerimizi listeleyip bu $liste adlı penceremizde ekrana alt alta bastık.
$pik=ncurses_getch($liste); burada ise ncurses_getch() fonksiyonu ile $liste penceremizin üzerindeki klavye ile gelen değerleri alıyoruz. NCURSES_KEY_UP ok tuşlarının yukarı olanı, NCURSES_KEY_DOWN ok tuşlarının aşağı olanıdır. Bunları kullanarak listelenen servisler arasında aşağı yukarı gidip gelebiliyoruz. Ok işaretleriyle aşağı yukarı yaptığımız her işlemden sonra ncurses_wrefresh($liste); kullandığımıza dikkat edelim. Bu sayede o an hangi seçili pid in üzerinde olduğumuzu görebiliyoruz. SPACE_KEY (boşluk) tuşuylada seçili olan *.pid i yani servisimizi silebiliyoruz. Sildikten sonra tekrar aşağı yukarı gezebiliriz. Pencereden sol menüye geçerkende ENTER_KEY (enter) tuşuna basarak sol menü ye geçebiliriz. Bu şekilde ServicesApp() fonksiyonumuzun işleyiş mantığından bahsetmiş olduk.

PHP- Kodu:
function networkApp($lines$coloms){
    
$serv_win=ncurses_newwin($lines-10$coloms-35230);
    
ncurses_wattron($serv_winNCURSES_A_BOLD);
    
ncurses_waddstr($serv_win,"Network information");
    
ncurses_wattroff($serv_winNCURSES_A_BOLD);
    
ncurses_wrefresh($serv_win);
    
$hostname=exec("hostname");
    
$names=exec("cat /etc/resolv.conf");
    
$nameserver=explode(" "$names);
ncurses_mvwaddstr($serv_win,$num+2,2,"Hostname: $hostname");
ncurses_mvwaddstr($serv_win,$num+4,2,"Nameserver: $nameserver[1]");
    
ncurses_wrefresh($serv_win);
                } 

Diğer fonksiyonumuzdan farklı olarak burada da network bilgilerini /etc/resolv.conf dosyasından okuyup ncurses_mvwaddstr() fonksiyonu yardımıyla ekranda istediğimiz yerde gösterebiliyoruz. Bu fonksiyonların aldığı parametrelerden daha önceki makalede bahsettiğimden, burada sadece kullanım amaçlarından bahsediyorum. İşlemler yapıldıktan sonra ilgili pencerenin refresh edildiğine tekrar dikkat etmek istiyorum.

PHP- Kodu:
function systemApp($lines$coloms){
    
$serv_win=ncurses_newwin($lines-10$coloms-35230);
    
ncurses_wattron($serv_winNCURSES_A_BOLD);
    
ncurses_waddstr($serv_win,"System Information");
    
ncurses_wattroff($serv_winNCURSES_A_BOLD);
    
ncurses_wrefresh($serv_win);
    
$distro=exec("uname -s");
    
$distver=exec("uname -r");
    
$uptime=exec("uptime");
    
$up=explode(",",$uptime);
    
$curuser=exec("who -q");
    
$curu=explode("="$curuser);
ncurses_mvwaddstr($serv_win,$num+2,2,"Distro: $distro");
ncurses_mvwaddstr($serv_win,$num+4,2,"Distro Version: $distver");
ncurses_mvwaddstr($serv_win,$num+6,2,"Uptime: $up[0]");
ncurses_mvwaddstr($serv_win,$num+8,2,"Current Users: $curu[1]");
    
ncurses_wrefresh($serv_win);
                } 
systemApp() fonksiyonuda aynı networkApp() fonksiyonu gibidir sadece ekrana basması gerek parametreleri exec() yardımıyla alıp istenen yerde ekrana basılmıştır.
Böylelikle ncurses uygulamamızda kullanacağımız kendi fonksiyonlarımızın içeriği hakkında bilgi edindik. Şimdi uygulamamızın ana kısmını ele alalım.
$menum=array("Services", "Networking", "Information", "Quit");
Sol menü de konulacak baslıkları diziye attık.
ncurses_init(); ncurses init i başlatıldı.
$main_win=ncurses_newwin(0, 0, 0, 0);ncurses_getmaxyx($main_win, &$lines, &$coloms);$main_win diye ana penceremizi oluşturduk. ncurses_getmaxyx() fonksiyonu ile $main_win penceresinin $lines yani satır ve sütun sayısını aldık. Böylelikle konsol büyüse de o anda alınan $lines ve $coloms geçerli olduğundan ölçüleri büyük konsollarda da yapmış olduğunuz uygulama çalışır olacak. Daha önce fonksiyonlarımızı tanımlarken orda kullandığımız $lines ve $coloms da buradan alınan değerlerdir. Böylece dinamik pencereler her türlü konsol büyüklüğünde sorunsuz çalışacak.
$low_win=ncurses_newwin(5, $coloms-3, $lines-6, 1);$top_win=ncurses_newwin($lines-7, $coloms-23, 1, 21);$left_win=ncurses_newwin(10, 20, 1, 1);$low_win alt kısımdaki penceremiz. $top_win orta kısımdaki penceremiz, $left_win de menümüzü koyduğumuz penceremiz olacak.

PHP- Kodu:
ncurses_wborder($top_win,0,00,00,00,0);
ncurses_wborder($low_win,0,00,00,00,0);
ncurses_wborder($left_win,0,00,00,00,0);
ncurses_refresh();
ncurses_attron(NCURSES_A_BOLD);
ncurses_addstr("Ncurses ExamPle");
ncurses_attroff(NCURSES_A_BOLD);
ncurses_mvwaddstr($low_win,2,2,"PHP NCURSES!");
ncurses_wrefresh($low_win);
ncurses_wrefresh($top_win);
ncurses_wrefresh($left_win); 
PHP- Kodu:
[IMG]http://www.mutasyon.net/imx/baslik_makale.gif[/IMG][IMG]http://www.mutasyon.net/imx/ciftcizgi2.gif[/IMG][IMG]http://www.mutasyon.net/imx/spacer.gif[/IMG]
[center]//';       BilgeAdam += '';       BilgeAdam += '';       BilgeAdam += '';// Eyyy meraklı kişi! Niye böyle takla attığımı merak ediyorsan şunu oku!// http://www.howtocreate.co.uk/noclicktoactivate.htmlflashwrite(BilgeAdam);//]]>[/center]
function ileti() {window.open('yazara_ileti_gonder.asp?id=52','ileti','width=340,height=310,top=120,left=20,resizable=1');}Php`de Ncurses Uygulaması II [IMG]http://www.mutasyon.net/imx/spacer.gif[/IMG]
Bünyamin DEMİR[IMG]http://www.mutasyon.net/imx/printer_ikon.gif[/IMG][IMG]http://www.mutasyon.net/imx/ileti_ikon.gif[/IMG]




 
Bir önceki ncurses makalemizde dediğimiz gibi. Öğrendiklerimizi pekiştirecek ve ncurses in ne tür işlerde kullanabileceğimizi görebileceğimiz bir uygulama yapalım
Not: Bu uygulama FreeBSD üzerinde kullanılmıştır. 

Her zaman olduğu gibi betiğimizin ilk satırına php
`nin yolunu yazıyoruz
#!/usr/local/bin/phpdefine("ESCAPE_KEY", 27);define("ENTER_KEY", 13);define("SPACE_KEY", 32);
Görüldüğü gibi php deki define(); fonksiyonu ile klavye tuşlarını tanımlamış olduk
function 
servicesApp($lines$coloms){    $serv_win=ncurses_newwin($lines-10$coloms-35230);    ncurses_wattron($serv_winNCURSES_A_BOLD);    ncurses_waddstr($serv_win,"Services Status");    ncurses_wattroff($serv_winNCURSES_A_BOLD);    ncurses_wrefresh($serv_win);    $liste=ncurses_newwin($lines-12$coloms-50435);    ncurses_wborder($liste,0,00,00,00,0);    ncurses_wattron($listeNCURSES_A_BOLD);    ncurses_waddstr($liste,"Active Services List");    ncurses_wattroff($listeNCURSES_A_BOLD);    while(1){    $s_list=array();    exec("ls /var/run/*.pid"$s_list);    $say=count($s_list);    for($i=0$i<$say$i++){        $s_kisa=explode("/",$s_list[$i]);            if($select==intval($i)){        ncurses_wattron($liste,NCURSES_A_REVERSE);        ncurses_mvwaddstr($liste,$num+$i+2,2,"[ * ] $s_kisa[3]");        ncurses_wattroff($liste,NCURSES_A_REVERSE);        }else{        ncurses_mvwaddstr($liste,$num+$i+2,2,"[ * ] $s_kisa[3]");    }}    ncurses_wrefresh($liste);$pik=ncurses_getch($liste);    if($pik==NCURSES_KEY_UP){        $select=$select-1;        if($select<0){ $select=0; }    }elseif($pik==NCURSES_KEY_DOWN){        $select=$select+1;        if($select>count($s_list)){ $select=count($s_list)-1; }}    ncurses_wrefresh($liste);    if($pik==SPACE_KEY){    exec("rm $s_list[$select]");    ncurses_wrefresh($serv_win);    ncurses_wrefresh($liste);    ncurses_refresh();}    if($pik==ENTER_KEY){    ncurses_refresh();    break;}}}ServicesApp adlı bir fonksiyon tanımladık ve buna $lines ve $coloms değişkenleri gönderdikBunlar birer sayısal değerdirFonksiyonlar bittikten sonra bundan bahsedeceğimBunları şu anlık konsolumuzun satır ve sutun sayısı olarak düşünelim$serv_win adlı bir pencere oluşturup bu pencerenin koordinatlarını $lines ve $coloms yardımıyla tanımladıkAynı zamanda &#8220;Services Status” şeklinde birde penceremize başlık (title) attık.
Daha sonra $liste adlı yeni bir pencere attık &#8211;ki bu pencerede az sonra çalışan servislerimizi listeleyeceğiz.ncurses_wattron(), ncurses_waddstr(), ncurses_wattroff() fonksiyonları yardımıyla bu pencereye de bir başlık attık. /var/run altında *.pid olan aktif servislerimizi listeleyip bu $liste adlı penceremizde ekrana alt alta bastık.
$pik=ncurses_getch($liste); burada ise ncurses_getch() fonksiyonu ile $liste penceremizin üzerindeki klavye ile gelen değerleri alıyoruzNCURSES_KEY_UP ok tuşlarının yukarı olanıNCURSES_KEY_DOWN ok tuşlarının aşağı olanıdırBunları kullanarak listelenen servisler arasında aşağı yukarı gidip gelebiliyoruzOk işaretleriyle aşağı yukarı yaptığımız her işlemden sonra ncurses_wrefresh($liste); kullandığımıza dikkat edelimBu sayede o an hangi seçili pid in üzerinde olduğumuzu görebiliyoruzSPACE_KEY (boşluktuşuylada seçili olan *.pid i yani servisimizi silebiliyoruzSildikten sonra tekrar aşağı yukarı gezebilirizPencereden sol menüye geçerkende ENTER_KEY (entertuşuna basarak sol menü ye geçebilirizBu şekilde ServicesApp() fonksiyonumuzun işleyiş mantığından bahsetmiş olduk
function 
networkApp($lines$coloms){    $serv_win=ncurses_newwin($lines-10$coloms-35230);    ncurses_wattron($serv_winNCURSES_A_BOLD);    ncurses_waddstr($serv_win,"Network information");    ncurses_wattroff($serv_winNCURSES_A_BOLD);    ncurses_wrefresh($serv_win);    $hostname=exec("hostname");    $names=exec("cat /etc/resolv.conf");    $nameserver=explode(" "$names);ncurses_mvwaddstr($serv_win,$num+2,2,"Hostname: $hostname");ncurses_mvwaddstr($serv_win,$num+4,2,"Nameserver: $nameserver[1]");    ncurses_wrefresh($serv_win);                }Diğer fonksiyonumuzdan farklı olarak burada da network bilgilerini /etc/resolv.conf dosyasından okuyup ncurses_mvwaddstr() fonksiyonu yardımıyla ekranda istediğimiz yerde gösterebiliyoruzBu fonksiyonların aldığı parametrelerden daha önceki makalede bahsettiğimdenburada sadece kullanım amaçlarından bahsediyorumİşlemler yapıldıktan sonra ilgili pencerenin refresh edildiğine tekrar dikkat etmek istiyorum.
function 
systemApp($lines$coloms){    $serv_win=ncurses_newwin($lines-10$coloms-35230);    ncurses_wattron($serv_winNCURSES_A_BOLD);    ncurses_waddstr($serv_win,"System Information");    ncurses_wattroff($serv_winNCURSES_A_BOLD);    ncurses_wrefresh($serv_win);    $distro=exec("uname -s");    $distver=exec("uname -r");    $uptime=exec("uptime");    $up=explode(",",$uptime);    $curuser=exec("who -q");    $curu=explode("="$curuser);ncurses_mvwaddstr($serv_win,$num+2,2,"Distro: $distro");ncurses_mvwaddstr($serv_win,$num+4,2,"Distro Version: $distver");ncurses_mvwaddstr($serv_win,$num+6,2,"Uptime: $up[0]");ncurses_mvwaddstr($serv_win,$num+8,2,"Current Users: $curu[1]");    ncurses_wrefresh($serv_win);                }systemApp() fonksiyonuda aynı networkApp() fonksiyonu gibidir sadece ekrana basması gerek parametreleri exec() yardımıyla alıp istenen yerde ekrana basılmıştır.
Böylelikle ncurses uygulamamızda kullanacağımız kendi fonksiyonlarımızın içeriği hakkında bilgi edindikŞimdi uygulamamızın ana kısmını ele alalım.
$menum=array("Services""Networking""Information""Quit"); 
Sol menü de konulacak baslıkları diziye attık
ncurses_init(); ncurses init i başlatıldı.
$main_win=ncurses_newwin(0000);ncurses_getmaxyx($main_win, &$lines, &$coloms);$main_win diye ana penceremizi oluşturdukncurses_getmaxyx() fonksiyonu ile $main_win penceresinin $lines yani satır ve sütun sayısını aldıkBöylelikle konsol büyüse de o anda alınan $lines ve $coloms geçerli olduğundan ölçüleri büyük konsollarda da yapmış olduğunuz uygulama çalışır olacakDaha önce fonksiyonlarımızı tanımlarken orda kullandığımız $lines ve $coloms da buradan alınan değerlerdirBöylece dinamik pencereler her türlü konsol büyüklüğünde sorunsuz çalışacak.
$low_win=ncurses_newwin(5$coloms-3$lines-61);$top_win=ncurses_newwin($lines-7$coloms-23121);$left_win=ncurses_newwin(102011);$low_win alt kısımdaki penceremiz$top_win orta kısımdaki penceremiz$left_win de menümüzü koyduğumuz penceremiz olacak.
ncurses_wborder($top_win,0,00,00,00,0);ncurses_wborder($low_win,0,00,00,00,0);ncurses_wborder($left_win,0,00,00,00,0);ncurses_refresh();ncurses_attron(NCURSES_A_BOLD);ncurses_addstr("Ncurses ExamPle");ncurses_attroff(NCURSES_A_BOLD);ncurses_mvwaddstr($low_win,2,2,"PHP NCURSES!");ncurses_wrefresh($low_win);ncurses_wrefresh($top_win);ncurses_wrefresh($left_win); 
Oluşturduğumuz pencerelerin borderlerini verdik. Aynı zamanda ana penceremize uygulamamızın adını veriyoruz “Nxurses ExamPle”. Daha sonra $low_win yani alt tarafta oluşan pencerenin üzerine yazı yazıyoruz. Başlık vermekle, pencere üzerine yazılan yazı arasındaki farka dikkat edelim ve sonrada her zamanki gibi refresh işlemlerimizi unutmuyoruz.

PHP- Kodu:
while(1){
if(
$select==""){ $select=0;}
    for(
$a=0$a<=count($menum); $a++){
        
$out=$menum[$a];
        if(
$select==intval($a)){
        
ncurses_wattron($left_win,NCURSES_A_REVERSE);
        
ncurses_mvwaddstr($left_win,1+$a,1,$out);
        
ncurses_wattroff($left_win,NCURSES_A_REVERSE);
}

    else{
        
ncurses_mvwaddstr($left_win1+$a1$out);
}}
ncurses_wrefresh($left_win);

$pres=ncurses_getch($left_win);

    if(
$pres==NCURSES_KEY_UP){
        
$select=$select-1;
        if(
$select<0){ $select=0; }
    }elseif(
$pres==NCURSES_KEY_DOWN){
        
$select=$select+1;
        if(
$select>count($menum)){ $select=count($menum)-1; }
}
ncurses_wrefresh($left_win);

if(
$select==and $pres==ENTER_KEY){
    
servicesApp($lines$coloms);
    }
if(
$select==and $pres==ENTER_KEY){
    
networkApp($lines$coloms);
    }
if(
$select==and $pres==ENTER_KEY){
    
systemApp($lines$coloms);
    }
if(
$select==and $pres==ENTER_KEY){
    
ncurses_end();
    exit;
    }
if(
$pres==ESCAPE_KEY){
    
ncurses_end();
    exit;    }} 
While döngüsü ile önce menü dizimizin eleman sayısını alıp buna göre menü dizimizi yukarıdan aşağıya doğru $left_win penceresi üzerinde yazdırıyoruz. $pres=ncurses_getch($left_win); ile $left_win de klavye işlemlerini alıyoruz. Daha önce servicesApp() fonksiyonunda tanımladığımız gibi klavyenin ok işaretleriyle aşağı yukarı gidebilecek bir mekanizma oluşturuyoruz. Daha sonraki if blokları ile de oklarla aşağı yukarı giderken seçilen değeri icra etmesini sağlıyoruz. Gördüğümüz gibi “Quit” de enter e basılınca da uygulamadan çıkılıyor. Aynı zamanda ESCAPE_KEY de bunu icra ediyor.
Bunları ncurse_u.php adı alinda kaydedip chmod +x ncurses_u.php dedikten sonra ./ncurses_u.php betiğimizi çalıştıracaktır.
Ek olarak klavye ile birlikte mause ile de buna benzer uygulamalar yapabilirsiniz. Konuyla alakadar olan arkadaşların yapmış olduğumuz uygulamadan hareket ederek, hatta uygulamayı kaldığı yerden geliştirerek kullanıma açacaklarını umuyorum.
ncurses_u.php dosyasına buradan erişebilirsiniz.




Kaynaklar:
1) http://tr.php.net/manual/pl/ref.ncurses.php
2)