19 Kasım 2010 Cuma

Linux da İnternet Araçları

11. İnternet Araçları

11.1 FTP

FTP (file transfer protocol), bir makinadan diğerine yapılan dosya transferinde en çok kullanılan yollardan biridir. İnternet desteği olan işletim sistemlerinin hepsinde (MS-DOS, Windows, OS/2 ... ) ftp, standart program olarak kullanıcıların hizmetine sunulmuş durumdadır. Linux altında da ftp desteği vardır. Ekte İnternet üzerinde yeralan Linux dökümanlarının listesine baktığınız zaman çoğunun ftp adreslerinden temin edilebildiğini göreceksiniz.
FTP, dosyaları alabilmenizle birlikte istediğiniz adrese yollamanıza da izin verir. Eğer İnternet'e bağlıysanız ve Linux kullanıyorsanız ftp vazgeçemeyeceğiniz bir program olacakır.

Temel FTP Komutları

FTP, İnternet'e bağlı olan makinalarda anlam kazanır ve gücünü hissettirir. Saniyeler içinde onlarca dosya, yüzlerce kilobayt bilgi transfer edilebilir. FTP'ye başlamak için kullanabileceğiniz iki komut var. Birisi, standart ftp paketinden çıkarn 'ftp' komutu, diğeri de 'ncftp' komutu. İkisinin de avantajları olmasına rağmen 'ncfp' nin kullanıcıya yönelik kullanım kolaylığı vardır. Siz de 'ncftp' kullanın.
Bir FTP adresine bağlanmak için o adresin IP numarasını veya ismini bilmeniz yeterli. Çok geniş bir Linux arşivi olan linux.org.tr adresine bağlanmak için:
# ftp linux.org.tr 
yazın. Ekranda aşağıdaki gibi bir görüntü gelecektir. Ncftp, ftp yapmak için gerekli olan kullanıcı kodunu ve şifreyi kendisi gönderir ve otomatik olarak karşıdaki adrese bağlanır. Eğer ftp kullanıyor olsaydınız, kullanıcı kodu için anonymous veya ftp, şifre için de e-posta adresini girmeniz gerekecekti.
linux:~$ ftp linux.org.tr
Connected to linux.org.tr.
220 metu FTP server (Version wu-2.4(1) Tue Aug 8 15:50:43 CDT 1996) ready.
Name (linux.org.tr:root): ftp
331 Guest login ok, send your complete e-mail address as password.
Password:
230-Welcome, archive user!  This is an experimental FTP server.  If have any
230-unusual problems, please report them via e-mail to root@metu
230-If you do have problems, please try using a dash (-) as the first character
230-of your password -- this will turn off the continuation messages that may
230-be confusing your ftp client.
230-
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 
Karşıdaki makinaya bağlandık ve önümüze bir komut satırı çıktı. Bu komut satırında kullanılabilecek ftp komutlarının listesini görmek için
ftp> help 
yazın. Bir komut hakkında daha ayrıntılı bilgi elde etmek için ise 'help' komutunun hemen ardından ftp komutunu getirebilirsiniz. Şimdi patika ismini bildiğimiz bir dosyayı kendi hesabımıza çekelim. Öncelikle nerede olduğumuzu görelim. Bunun için Linux komutunun benzeri olan ls veya dir komutunu kullanın.
ftp> dir
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
total 9
drwxrwxr-x   8 root     wheel        1024 Jan  7  1980 .
drwxrwxr-x   8 root     wheel        1024 Jan  7  1980 ..
drwxrwxr-x   2 root     wheel        1024 Jan  7  1980 bin
drwxrwxr-x   2 root     wheel        1024 Jan  7  1980 etc
drwxrwxr-x   2 root     wheel        1024 Dec  3  1993 incoming
drwxrwxr-x   2 root     wheel        1024 Nov 17  1993 lib
drwxrwxr-x  12 root     wheel        1024 Feb 14 08:08 pub
drwxrwxr-x   3 root     wheel        1024 Jan  7  1980 usr
-rw-r--r--   1 root     root          312 Aug  1  1994 welcome.msg
226 Transfer complete.
Bir ftp adresine bağlandıktan sonra genelde her adreste yeralan pub , incoming, bin gibi dizinler göreceksiniz. Bunlardan şu an için işimize yarayanı pub dizini olacaktır. Bir dizine girmek için yine bir UNIX komutu olan 'cd' ve ardından 'pub' yazın.
ftp> cd pub
Şimdi `pub' dizini altındayız. Genellikle her türlü program, uygulama yazılımı, ağ uygulamaları ve çeşitli dosyalar bu dizin altında bulunur. Burada hangi dosya ve dizinler olduğunu görelim.
ftp> dir
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
total 12
drwxrwxr-x  12 root     wheel        1024 Feb 14 08:08 .
drwxrwxr-x   8 root     wheel        1024 Jan  7  1980 ..
drwxr-xr-x   2 root     root         1024 Feb 14 08:07 X
drwxr-xr-x   2 root     root         1024 Feb 14 08:07 applications
drwxr-xr-x   2 root     root         1024 Feb 14 08:07 development
drwxr-xr-x   2 root     root         1024 Feb 14 08:08 distributions
drwxr-xr-x   2 root     root         1024 Feb 14 08:07 docs
drwxr-xr-x   2 root     root         1024 Feb 14 08:07 games
drwxr-xr-x   2 root     root         1024 Feb 14 08:07 graphics
drwxr-xr-x   2 root     root         1024 Feb 14 08:09 kernel
drwxr-xr-x   2 root     root         1024 Feb 14 08:07 network
drwxr-xr-x   2 root     root         1024 Feb 14 08:07 sunsite
226 Transfer complete.
ftp>
Örneğin 'kernel' dizini altında yeralan bir çekirdek dosyasını kendi makinamıza alalım.
ftp> cd kernel
250 CWD command successful.
Ftp protokolünde, dosyaların bir makinadan diğerine taşınması esnasında dosyanın çalıştırılabilir (arşivler, sıkıştırılmış dosyalar ve diğerleri) veya metin dosyası olması hayati önem taşır. İnternet üzerinde, zamandan tasarruf amacıyla tüm dosyalar ASCII formatta taşınırlar. Çalıştırılabilir dosyalar 8 bitlik karakterlerden oluştuğu için bunları indirebilmek için taşıma işleminin 8 bit halinde yapılması gerekir. 'ftp' komutunu kullanıyorsanız çalıştırılabilir dosyaları çekmeden önce
ftp> binary
yazın. Dosyanın türünü bilmediğiniz durumlarda yine 'binary' komutunu kullanın. Siz en iyisi, ftp yaparken karşıdaki makinaya girdikten hemen sonra 'binary' yazın. ncftp kullanırken program bunu sizin için otomatik olarak yapacaktır.
Dosyayı indirmeden önce, kontrol edilmesi gereken bir şey de dosyanın indirileceği yerel dizinini belirtmektir. Burada linux-1.3.56.tar.gz programını 'kernel' dizininin altına çekelim. Bunun için lcd komutunu kullanalım.
ftp> lcd /root/kernel
Local directory now /root/kernel
Artık istediğimiz dosyayı indirebiliriz. Dosyaları almak için get komutu kullanılır.
ftp> dir
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
total 5838
drwxr-xr-x   2 root     root         1024 Feb 14 08:09 .
drwxrwxr-x  12 root     wheel        1024 Feb 14 08:08 ..
-rw-r--r--   1 root     root      5951488 Feb 14 08:10 linux-1.3.56.tar.gz
226 Transfer complete.
ftp> get linux-1.3.56.tar.gz
200 PORT command successful.
150 Opening BINARY mode data connection for linux-1.3.56.tar.gz (5951488 bytes).
226 Transfer complete.
5951488 bytes received in 26 secs (2.2e+02 Kbytes/sec)
26 saniye içinde yaklaşık 6 MB büyüklüğündeki dosyayı çektik. Sizin İnternet'e bağlantı hızınıza bağlı olarak dosyayı yerel diske yazma süresinde değişiklikler olabilir. Yukarıdaki işlemleri istediğiniz kadar tekrar edip gereken dosyaları çektikten sonra ftp'den çıkmak için
ftp> quit
221 Goodbye.
komutunu kullanın. Sunucu makinayla bağlantınız kesilecek ve kabuk komut satırına geri döneceksiniz.

11.2 WWW (World Wide Web)

İnternet'in kimliğini bulmasını sağlayan etmenlerden başlıcası WWW'dir. WWW sayesinde çeşitli yapıda dosyalar, grafik arabirimi kullanılsın veya kullanılmasın kolaylıkla iletilebilir. Linux'u bir web sunucu haline getirmek için tek yapılması gereken, bu dosyaları belirli bir dizin altına yerleştirip WWW sunucusunu başlatmak.
İnternet'te yeralan bilginin hesabı yoktur. Bu bilgi deposunu verimli şekilde kolayca kullanabilir, hatta günlük yaşamınızla birleştirebilirsiniz. Öğrenciler, ev ödevlerini ansiklopediler karıştırmak yerine İnternet'ten bulup çıkarabilirler. Öğretmenler, sınav sorularını İnternet'ten bulabilirler. Üniversitelerdeki bazı fakültele hocaları ödevleri İnternet'te sunuyor ve cevapları da e-posta olarak istiyorlar.
Web üzerinde tarama yapmak amacıyla kurulan ve her hafta milyonlarca ziyaretçisi bulunan bazı adresler vardır. Bu sayfalara bağlanmak suretiyle bir anahtar kelime yardımıyla bu anahtar kelimenin geçtiği WWW adresleri taranabilir. Aşağıda sıkça kullanılan arama-tarama adresleri yeralıyor.
Özellikle birinci sıradaki altavista WWW sunucusu, 40 milyonun üzerinde adres girdisiyle inanılmaz genişlikte bir bilgi bankası olarak göze çarpıyor.
WWW sayfalarına erişebilmek için kullanılan programlar arasında metin temelli olan ve ekranda resim göstermeye imkan vermeyen lynx ve X Window altında çalışan ve onlarca çeşit döküman yapısını tanıyabilen Netscape sayılabilir.
Web sayfalarına bağlanırken kullanılan protokole HTTP (HyperText Transfer Protocol) adı verilir.

WWW Sunucusunun Konfigürasyonu

Linux'un web sunucusu olarak görev yapabilmesi için httpd daemon'un çalışması gereklidir. Bu yazılım genellikle sistemin açılışı sırasında çalıştırılarak arkaplana atılır.
Diğer kullanıcıların sorumlu olduğunuz Linux üzerindeki dosyalara WWW üzerinden erişmelerini sağlamak için sadece birkaç dakikaya ihtiyaç var. Ftp adreslerinde, özellikle Sunsite arşivinden birkaç değişik sunucu programı alınabilir. Halen Linux için benim bildiğim ve sıkça kullanılan APACHE, NCSA veya CERN http (web) sunuculardan birini çekerek kurmanız gerekecektir. Bununla birlikte, olumsuz yanıt vermemişseniz httpd yazılımı Linux'un kurulumu aşamasında sisteme yerleştirilmiştir.
httpd paketi kurulduktan sonra birkaç alt dizin oluşur. Bunlardan önemlileri,
  • conf, http konfigürasyon dosyaları
  • cgi-bin, örnek CGI (Common Gateway Interface) programları
  • cgi-src, CGI kaynak programları
  • logs, sunucunun sistem kayıtları
Sunucunun çalıştırılabilmesi için conf dizini altında yeralan 4 dosyanın içinde bazı değişiklikler yapmak gerekiyor. Bunlardan başlıcaları, httpd.conf dosyasındaki ServerRoot (httpd yazılımının açıldığı yer) ve ServerName (makina ismi), srm.conf dosyasındaki DocumentRoot (ana sayfanın dosyalarının tutulduğu dizin), ScriptAlias (CGI programlarının bulunduğu dizin) ve Directory (CGI programlarıın bulunduğu dizine ait parametreler) değişkenleridir. Dosyada hiç değişiklik yapmadan da sunucunun istediği dizinler üzerinde gerekli sembolik bağlantıları, istediğiniz dizini işaret edecek şekilde yerleştirmek mümkündür.
httpd programının başlatılması gayet kolaydır. /etc/rc.d/rc.inet2 programının içinde httpd ile ilgili satırın başında varsa '#' karakterlerini kaldırın. Böyle bir satır yoksa aşağıdaki komutu ekleyebilirsiniz.
httpd -f <konfigurasyon-dosyasi>
konfigürasyon dosyası yerine httpd.conf dosyasının bulunduğu yer girilir. (örneğin /home/httpd/conf/httpd.conf)
Web dosyalarını hazırlamak, gerekli düzenlemeleri yapabilmek için ayrı bir kullanıcı tanımlanabilir.

11.3 HTML ve CGI

Bir http protokolünün sunduğu dosya tipi genellikle HTML dosyasıdır. HTML dökümanları tamamı ASCII karakterlerden ve herhangi bir editörde yazılabilen metinlerden oluşur. UNIX üzerinde pico veya vi kullanarak HTML dökümanlarınızı hazırlayabilirsiniz. Bunun dışında, kullanıcının bu dili bilmediği farzedilerek Windows ve DOS altında çalışan çeşitli programlar hazırlanmıştır (FrontPage, HotDog gibi). Ayrıca, HTML kodunun doğruluğunu kontrol eden yardımcı programlara da Internet üzerinden erişilebilir.
HTML, Hypertext tabanlı bir dildir ve program içinde çoklu ortam (multimedia) programlarının konulmasına izin verir. Ses, hareketli veya hareketsiz görüntü yanısıra Java adı verilen ve kullanıcı ile etkileşime girebilen programlar da HTML dosyaları içinde yeralabilir. Grafik destekli Web programlarının tablo desteği ile çok çeşitli istatistiki bilgiler, programlar, her türlü listeler ekranda derli toplu gösterilebilir. Linux için Java desteğini ftp.blackdown.org adresindeki pub/Java/linux dizini altında bulabilirsiniz.

Temel HTML Belirteçleri

Daha önce bir programlama diliyle uğraşmamış olsanız bile HTML'in kolaylığı ve çok kısa zamanda bu dile hakimiyet sağlayabilmek sizi hayrete düşürecektir. Çeşitli çeviriciler yardımıyla hemen her tür dosyanın bu dile çevrilebilmesi, HTML dilini bilmeyenlerin bile dikkati bu yöne çekmeye yeter. Burada HTML komutlarına kısa bir giriş yapılacaktır, buradaki bilgilerle kendi web sayfanızı hazırlamanız mümkün olacak. Daha geniş bilgi için www.w3.org veya www.yahoo.com adreslerine göz atabilirsiniz. Bu adreslerin yansıları Linux Kullanıcıları Grubu ana web sayfasından da erişilebilir.
Basit bir HTML dosyası aşağıdaki gibi yazılabilir:
<title> Burasi konunun yazilacagi yer </title>
<h1> Bu, 1 numarali baslik </h1>
HTML dunyasina hosgeldiniz. <br>
Birinci paragrafimiz. <p>
Bu da ikinci.. <p>
HTML yazarken, metnin Web programının anlayacağı şekilde gösterilebilmesi için belirteçler kullanır. Yukarıdaki örnekte:
<title> ve </title> belirteçleri, dökümanın konusunu gösterir.
<h1> ve </h1> belirteçleri, dökümanın başlığını tanımlar. <p> belirteci, paragraf tanımlar.
Tüm HTML belirteçleri, küçüktür işareti (< ), belirteç ismi ve büyüktür işaretinden (> ) oluşur. Genellikle her belirtecin <h1> ve </h1> örneklerindeki gibi bir çifti olur ve sondaki belirtecin ismi önüne ayraç gelir. Yukarıdaki örnekte <h1> , Web programına 1 numaralı başlık formatında yazmasını, </h1> ise bu formatı kapatmasını söyler. <p> belirteci istisna bir durumdur ve </p> olarak kapatılmaz.
Her HTML sayfasının ile ayrılan bir konusu olmak zorundadır. Konular sayfadan bağımsız olarak ekranın en üstüne basılır.
<title> Sayfamin konusu </title>
HTML, 1'den 6'ya kadar numaralanmış 6 çeşit başlık destekler. Başlıklar normal karakterlerden daha büyük ve kalın yazılırlar. Temel olarak,
<Hy> Sayfamin basligi </Hy>
olarak tanımlanmış bir belirteçte y, 1 ile 6 arası bir değer alabilir. Y sayısı arttıkça yazıtipinin büyüklüğü azalır. Pek çok uygulamada, sayfanın konusu ile başlığını aynı tutabilirsiniz.
Diğer kelime işlemcilerdekinin aksine, HTML dökümanlarında programcı özel bir belirteç kullanmadıkça bir cümle herhangi bir yerinden ayrılıp kalan kısmı altta görünebilir, birden fazla boş satır tek satır olarak algılanır. Aşağıdaki örnekte, kaynak kodunda iki satır olmasına karşın, WWW tarayıcı bunu algılamaz ve ekranda tek satır olarak görüntüler. Bir html tarayıcı satır sonlarını ve boş satırları gözardı edeceğinden, paragrafları mutlaka <p> belirteci ile ayırmalısınız.
HTML'ye hosgeldiniz <br>
Bu ilk paragraf <p>
Satır sonu belirteci : Paragraf, iki satır arasında bir satır boşluk bırakırken, satır sonu belirteci kullanıldığı kursör alta geçer ve takip eden tüm metin,boşluk bırakmadan bir alttan yazılır.
Bu ilk satir. <br>
Ikinci satir daha uzun. <br>
Ama bu bir paragraf sonu.. <p>
Paragraflar ortalanırken <center> ve </center> belirteçlerinden yararlanılır. Ortalanması istenen tüm metin, bu iki belirtecin arasına yazılır.
<center>
Linux Sayfasi
</center>
HTML'nin en büyük özelliklerinden birisi, tek sayfa ile sınırlı kalmamasıdır. Böylece bir sayfadan diğerine bağlantı yapılabilir. HTML'in bu görevini yerine getirmesini sağlayan belirteç <a>'dır. Dökümanınızdan başka dökümana bağlantı yapabilmek için:
  • Belirteci girin. (Kısaca ilk satıra <a yazın)
  • Hangi dökümana geçiş yapmak istiyorsanız, ismini yazın. (HREF="dosyaismi")
  • Bu dökümanı ekranda hangi isimle göstermek istediğinizi belirtin.
  • Belirteci kapatın. </a>
Kısa bir örnekle açıklayalım:
<a href="internet.html"> Internet nedir? </a>
Ekranda "İnternet Nedir?" yazısı belirecek ve kullanıcıdan burayı seçmeyi bekleyecektir. Kullanıcı fare ile bu yazı üzerine tıkladığında ise program kontrolü yine bir HTML dosya olan internet.html dosyasına bırakacaktır. Bu durumda bulunduğunuz dizinden farklı bir dizindeki dosyaya bağlantı yapmak isterseniz, o dosyanın ait olduğu dizini yazmak zorundasınız. Buna göre linux/shells/bash.html dosyasını kullanabilmek için
<a href="linux/shells/bash.html"> Bash </a>
şeklinde bir belirteç yazmak gerekir.
HTML'in bir diğer özelliği ise, tek bir makinaya bağımlı kalmadan diğer İnternet servisleriyle bağlantı kurabilmesidir. Bunun için URL (Uniform Resource Locator) kullanılır. URL, http,gopher, news ve telnet gibi alt hizmet birimleri olabilir. Kullanımı şu şekildedir :
URL-ismi://makina-ismi[:port]/dizinler/dosya-ismi
Burada URL,
  • file, Kendi sisteminizde bir dosyaya,
  • http, Bir WWW sunucusu üzerindeki dosyaya,
  • gopher, Gopher sunucusu üzerindeki dosyaya,
  • news, Bir UseNet haber grubundaki dosyaya,
  • WAIS, WAIS sunucusu üzerindeki dosyaya
erişmek için kullanılır. Örneğin sayfanızdan Linux Kullanıcıları Grubu'nun ana web sayfasına ulaşmak için :
<a href=http://www.linux.org.tr/> Linux Kullanıcıları Grubu </a>
satırını web dosyasında girmek gerekir. Port numarası, genellikle yazılmaz. Size aksi durum belirtilmedikçe, kullanmanıza gerek yoktur.
Dökümanların göze hoş görünmelerini sağlamak amacıyla listeler yaygın olarak kullanılır. HTML, pek çok liste çeşidi destekler. Bunlar, düz listeler, numaralı listeler, tanımlı listeler ve içiçe listelerdir.
Düz liste yaratmak için,
  • Listeye başlamak için belirteç açılır. ( <ul> )
  • Liste elemanlarını teker teker girerken başına ( <li> ) belirteci girilir. Kapatmak için </li> belirtecine gerek yoktur.
  • Listeyi bitirmek için belirteç kapatılır. ( </ul> )
Örnek olarak,
<ul>
<li> Elma
<li> Armut
</ul>
Örnek, ekranda şu şekilde görülür :
  • Elma
  • Armut
<li> belirteçleri içinde paragraflar, diğer dökümanlara bağlantılar, ve diğer belirteçler kullanabilirsiniz.
Numaralı listeler, düz listelerden farklı olarak, <ul> belirteci yerine <ol> kullanırlar. Ekranda liste elemanlarının başında 1'er artan numaralar görünür. Aşağıdaki HTML kodu,
<ol>
<li> Linux 
<li> Digerleri :-)
</ol>
ekrana şunları yazar:
  1. Linux İşletim Sistemi
  2. Diğerleri :-)
HTML'de, programda yazıldığı gibi ekrana çıktı vermeyi sağlayan komutlar <pre> ve </pre> belirteç çiftleridir. Bunlar kullanıldığı zaman tüm metin, yazıldığı gibi ekranda görünür. Aşağıdaki satırlar,
<pre>
  PATH=.:~/bin/:$PATH
  export PATH
  # Set up the terminal:
         stty erase "^?" kill "^U" intr "^C" eof "^D"
         stty hupcl ixon ixoff
  date '+Tarih :%D'
  TERM=vt100
</pre>
ekranda şu şekilde görünür :
    PATH=.:~/bin/:$PATH
    export PATH
    # Set up the terminal:
           stty erase "^?" kill "^U" intr "^C" eof "^D"
           stty hupcl ixon ixoff
    date '+Tarih :%D'
    TERM=vt100
Eğer Web sayfalarını gezerken grafik destekleyen bir program (Mosaic, Netscape) kullanıyorsanız, ekranda resimlerin, arkaplanların ve hatta animasyonların olduğunu farketmişsinizdir. Bu resimler genellikle X Bitmap (XBM) , GIF, veya JPG formatlı olurlar ve dosyaya görsel bir çekicilik katarlar. Buna rağmen aynı ekranda çok miktarda resim kullanmaktan sakınmalıdır, çünkü bu durumda resimler kullanıcıya daha geç bir sürede ulaşır.
Ekranda resim görüntülemek için,
<img src="resmin bulundugu dizin">
demeniz yeterlidir. Burada, nasıl HTML dökümanların hepsi .html ile bitiyorsa, tüm resim dosyalarının sonu da .xbm , .gif veya .jpg ile bitmelidir.
Şimdi küçük bir örnek hazırlayalım. ~ dizininde iken public_html isimli bir dizin açın ve buraya girin. İstediğiniz örnek bir HTML dosyası yaratıp index.html isminde kaydedin.
$ cd ~
/home/gorkem
$ mkdir public_html
$ cd public_html
$ ls index.html
index.html
Ardından aşağıdaki satırları yazın. Burada web için kullanılan tarayıcı lynx'tir. Eğer X ortamında çalışıyorsanız Netscape de kullanabilirsiniz.
$ lynx http://cclub.metu.edu.tr/~ilker
Hazırladığınız web sayfası ekrana gelecektir.

Form Hazırlama (CGI)

CGI web üzerinden kullanıcı arayüzleri hazırlamak için kullanılan en yaygın yöntemdir. En yaygın kullanım alanları arasında veri tabanı sorgu sistemleri sayılabilir. Aşağıdaki dökümanda genel olarak CGI tanıtımı yaparken özellikle C ile CGI programları hazırlayacaklara yardımcı olabilir.
Bu dökümanın bazı kısımları okuyucuların az da olsa C ve programlama bilgisinin olduğu varsayılarak hazırlanmıştır.
İnternet üzerindeki hemen hemen bütün kullanıcı arayüzleri, Common Gateway Interface (CGI), kullanılarak hazırlanmıştır. CGI WWW kullanıcılarının WWW sunucusunun çalıştığı makina üzerinde belirlenen programları çalıştırmasını sağlayan bir sistemdir. CGI ile hazırlanan kullanıcı arayüzlerinin başlıca avantajlarını aşağıdaki gibi sıralayabiliriz:
  • Kolay ve hızlı hazırlanabilmesi. CGI arayüzlerinde, diğer kullanıcı yüzlerindeki birçok çabaya gerek yoktur. Kullanıcıyla ilişkiyi WWW tarayıcısı (web browser) yaptığından, siz zaten web tarayıcısı için çoktan hazırlanmış karmaşık kullanıcı arayüzü işlemleriyle uğraşmak zorunda kalmazsınız.
  • İstediğiniz herhangi bir programlama dili kullanabilirsiniz. Buradaki uygulamamızda C kullandığımız için aşağıda CGI programlarını özel olarak C ile nasıl yazacağınız anlatılmıştır, ama deneyimli programcı herhangi bir programlama dili için gerekli ipuçlarını aşağıdaki açıklamadan çıkarabilir.
  • Değişik ortamlarda çalışabilir. Programınızın asıl çalıştığı sistem web sunucusunun çalıştığı sistem olmasına karşın, programınıza bilgisayar ağına bağlı herhangi bir bilgisayardan ulaşılabilir. Kullanabileceğiniz hemen hemen bütün işletim sistemleri ve ortamlar için web tarayıcısı bulabileceğiniz için, yazdığınız tek program birçok farklı ortamdan kullanılabilir.
  • Dağıtık ortamlarda kullanılabilme olasılığı. Programınızın kullanıcı arayüzü (web tarayıcısı) başka bir ortamda, web html formlarınız başka bir sistemde, CGI programlarınız başka bir sistemde olabilir.
Bu avantajların yanında sayılabilecek birkaç dezavantaj,
  • Dikkatsiz yazılmış CGI programları güvenlik açıklarına neden olabilirler.
  • Kullanıcı arayüzleri çok kolay ve hızlı oluşturulmalarına karşın, web tarayıcısının yetenekleriyle sınırlıdır.

CGI Yapısı

En basit haliyle bir CGI programı, standart giriş dosyasına çıktılarını veren herhangi bir program olabilir. Tek farklılık, herhangi bir çıktıdan önce yazmanız gereken iki satır. Bu satırlardan ilki,
Content-type: text/html
olmalı. İkincisi ise boş bir satır. Aşağıdaki C örneği bu konuda daha açıklayıcı olacaktır. Bundan sonra ekrana yazacağınız herşey web tarayıcısı tarafından HTML ile yazılmış bir döküman olarak değerlendirilecektir.
CGI programları girdilerini HTML formlarından alırlar. HTML formları ayrı bir HTML dosyasında olabilecekleri gibi, bir CGI programının çıktısı olabilirler, hatta aynı program hem formu oluşturup, hem de çıktıyı değerlendirerek gerekli işlemi yapabilir.
Aşağıda örnekleriyle formları nasıl oluşturulabileceğini, ve CGI programlarının nasıl yazılacağı konusunda ayrıntılı bilgi bulacaksınız.
Form HTML2.0 standardıyla gelen bir kullanıcı arayüzü. Formlarda bir dizi değişik yöntemle kullanıcıdan girdi alınabilir. Bunları aşağıda maddeler halinde göreceğiz.
Bir html formu <form> ile başlayıp, </form> ile biter. <form> birkaç parametre alır. HTML'de parametreler <form p1=değer1 p2=değer2 p3> şeklinde verilir. Bu örnekte formun p1 ve p2 iki değer alan parametre, p3 adlı değer almayan bir parametresi var. forma verilebilecek ve verilmesi gereken parametreler,
METHOD : Bu parametre, formun ne şekilde hangi html metodu kullanılacağını belirler. POST ya da GET değerini alabilir. POST daha çok karşı tarafta herhangi bir etkisi olan programlar için, GET ise sadece sonuç veren programlar için kullanılır. Ama yaygın işlem her ikisi için de POST kullanmaktır. Biz uygulamamızda her iki durum için de POST kullandık.
ACTION : Bu parametreyle, formun çalıştıracağı CGI programı belirtilir. Verilen CGI programı aynı makinada olabileceği gibi Internet üzerindeki herhangi bir makinada da olabilir.
ENCTYPE : Form'un sonuçlarının CGI programına ne şekilde gönderileceği bu parametreyle belirtilir. Belirtilmemesi durumunda standart 'application/x-www-form-urlencoded' kullanılır. Bizim önerimiz, bu seçeneğin belirtilmemesi ve standart kullanıma gidilmesi. Bu şekilde programınız hem heryerde çalışır, hem de bu kodlama biçimi için hazır kütüphanelerden yararlanabilirsiniz
Formun içinde bir dizi değişik girdi tipi tanımlayabilirsiniz. Bunlar <INPUT> ile verilir. INPUT için bir dizi input tipi kullanılabilir. Bu tipleri aşağıdaki gibi sıralayabiliriz:
TEXT : Bu tip tek satırlık metin girdiler için kullanılır, birden fazla satır için <TEXTAREA> kullanmalısınız.
Yukarıda belirtilen her bir INPUT tipi için verebileceğiniz ya da vermeniz gereken bir ya da birkaç parametre vardır. Bu parametrelerin ayrıntılarına burda yer vermiyoruz. Bu ayrıntıları www.w3.org 'dan ulaşabileceğiniz birçok dökümandan ya da bu dökümanın kaynak kodu dahil olmak üzere İnternet üzerinde bulacağınız birçok formun kaynak kodundan yararlanarak öğrenebilirsiniz.

Örnek CGI Programı

Sıradan bir CGI programı bir html formundan girdilerini alıp, çıktıları HTML formatında ekrana yazar. CGI programının çıktıları web tarayıcınız tarafından yorumlanır.
Bir GCI programı, herhangi bir programalama dilinde yazılabilir. Çok kullanılan diller arasında C, Perl ve daha çok basit işler için de olsa shell gösterilebilir. Bu uygulamada C kullandık. Aşağıda en basit haliyle CGI için bir helloworld.c göruyorsunuz.
/* helloworldcgi.c -- ilk CGI programi. Bu program formdan gelen girdiyi
 * dikkate almayip, sadece ekrana(html tarayicisina) 'hello world' yazisini
 * basar
 */
#include <stdio.h>
main (){
/*      DIKKAT!!! asagidaki satir olmazsa programiniz calismaz.
*/
        printf("Content-type: text/html\n\n");
        printf("hello world!");
}
Aynı örneği bir bash programı olarak yazacak olsaydık:
#!/bin/bash
# CGI icin ornek kabuk programi
echo 'Content-type: text/html'
echo
echo
echo 'hello world!'
Bu dökümanın bundan sonraki kısmındaki örnekler C için hazırlanmıştır. CGI programı yazmak için gereken daha fazla bilgi sadece, C (ya da ilgili dil) ve HTML bilgisine ek olarak sadece programınızın girdiyi nasıl alacağı. C için en sevdiğiniz C kitabını, HTML içinse İnternet üzerinde bulacağınız dökümanları öneririz.
HTML Form'unun çıktısı 'ad=değer' şeklinde '&' ile ayrılmış tek satırlık bir karakter dizisinden oluşur. Bu dizideki boşluklar '+' ile ASCII setindeki alfa-nümerik karakterler dışındaki bütün karakterler (%, +, ç, Ö gibi) üç karakterlik '%XX' şeklinde bir ifadeyle gösterilir. Buradaki XX ifade edilen karakterin onaltılık sayı sistemindeki kodudur. Formun çıktısını, gets(), scanf() gibi herhangi bir C I/O fonksiyonuyla okuduktan sonra, eldeki karakter dizisinden istediğiniz bilgileri almalısınız. Bu diziyi isterseniz kendi yazdığınız programla isterseniz İnternet üzerinde heryerde bulabileceğiniz hazır kütüphanelerle işleyebilirsiniz.
CGI programının çıktısı istediğiniz gibi bir HTML dökümanı olabilir. Örnek bir HTML ve FORM dosyası aşağıdaki gibidir :
<hr>
<p>
<form method="POST" action="http://penguen.cclub.metu.edu.tr/cgi-bin/deneme"<P>
E-mail adresiniz :  <INPUT NAME="e-mail" SIZE=38></P><P>
Isminiz : <INPUT NAME="isim" SIZE=42><P>
Buraya birseyler yazabilirsiniz: <P>
<TEXTAREA name="body" rows=10 cols=50> birseyler </TEXTAREA>
<P>
<input type="submit" value="Gonder">
<input type="reset" value="Temizle"></P>
</FORM>
<p>
<hr>
Form, hayali penguen.cclub.metu.edu.tr adresi üzerindeki "deneme" isimli programı çalıştıracak şekilde ayarlanmıştır.

Hiç yorum yok:

Yorum Gönder