1. Reklam


    1. joysro
      ledas
      jungler
      keasro
      zeus
      karantina

CGI Uygulamaları


  1. ReAcTiVe

    ReAcTiVe Bilgiliyim rank8

    Kayıt:
    4 Ekim 2007
    Mesajlar:
    2.284
    Beğenilen Mesajlar:
    0
    Ödül Puanları:
    0
    Meslek:
    Öğrenci
    Şehir:
    Lise
    CGI Uygulamaları
    CGI nedir?


    Web geliştiriciler durağan sayfalardan, akıllı dinamik sayfalara geçmek istediklerinde, kısa adı CGI olan Common Gateway Interface teknolojisini geliştirdiler. Bu geliştiricilerin asıl istediği, Web sunucusu üzerinden sunucu tarafında programlar çalıştırabilmekti. Bu yeni teknolojiye Common Gateway denilmesinin sebeplerinden en önemli üçü şuydu:

    * CGI programları sunucudan bağımsız olmalıydı
    * CGI programları hemen her dille yazılabilmeliydi
    * Hemen her istemcide çalışabilmeliydi

    Dolayısıyla, CGI bir programlama dili değildir. Piyasadaki, bir girdiyi işleyip, çıktı üretebilen her dil CGI programları geliştirmek için kullanılabilir. Örneğin Perl, C, Python, Tcl, AppleScript, Shell script'leri geliştirme için en çok tercih edilen dillerdir.

    CGI programlarında temel fikir, uygulamaların mantık katmanının, sunucu tarafında oluşturulmasıydı.
    CGI programlarıyla neler yapılabilir?

    Bir CGI programı genel olarak şu 4 adımdan geçer, ancak bunların bazıları her uygulamada olmayabilir:

    * Kullanıcıdan bilgi alma
    * Alınan verilerin bir veritabanına işlenmesi
    * İstenen verilerin veritabanından bir sorgu sonucu alınması
    * Kullanıcıya işlenmiş bilgilerin gönderilmesi

    Bu adımları kullanabilecek uygulama sayısı sınırsız gibidir. Birkaç örnek vermek gerekirse:

    * Öğrencilerin, isimleri ve numaralarıyla beraber almak istedikleri derslerin kodlarını bir Web sayfasından girmesi, ve bunların bir veritabanına işlenerek, öğrenci işleri ve danışmanları tarafından gözden geçirilmesi
    * Siteyi ziyaret eden kişilerin bırakacağı e-posta adreslerine, sitedeki yeniliklerin düzenli olarak postalanması
    * Ziyaretçilerin, site hakkında görüşlerini bildirebileceği bir erişim formu
    * Site hakkında anketler
    * Yerel ağın bir program tarafından sürekli gözlenerek, sorunların bir Web sayfasında gerçek zamanlı yayınlanması
    * Site içi arama motorları (en kolaylarından biri olmasına rağmen hep ihmal edilen bir özelliktir)
    * Web tabanlı e-posta, haber öbekleri okuma/gönderme
    * Web tabanlı stok yönetimi, muhasebe, iş akışı, proje yönetimi vb (biraz zor olsa da)
    * İçerik oluşturucuların, Web sayfalarını sunucuya koyması için, dosya yöneticisi tarzı bir arabirim (bir örneği, ULAKBİM içinde kullanılmaktadır)

    Hangi dili kullanmalıyız?

    Yukarıda belirtildiği gibi, CGI programları için istenen birçok dil kullanılabilir. Ancak Internet geliştiricilerinin kabul ettiği de facto standart Perl, arkasından C'dir. Perl, neredeyse CGI'ın doğumundan beri kendine bu alanda pek rakip tanımamaktaydı. Bunun birkaç sebebi vardı:
    Perl'in Avantajları

    * Perl öğrenmesi kolay bir dildir (yine de bazı programcılar kodlarını anlaşılması çok zor şekilde yazmaktadır).
    * Yukarıdaki sebeple, dünya üzerinde birçok geliştiricisi vardır ve karşılaşılan sorunların çözümünü Internet üzerinden bulmak kolaydır.
    * Yine aynı sebeple, varolan uygulamaları geliştirmek için, Perl bilen üniversite öğrencileri, mühendisler vb birçok kişi görevlendirilebilir.
    * CGI uygulamalarında en çok karşılaşılan görevlerden biri olan karakter dizilerinin işlenmesi (string manipulation) için Perl çok güçlü bir dildir.
    * Kendini kabul ettirmiş olması nedeniyle, Perl için yazılmış birçok modül bulunmaktadır ve bunlar uzun zamandır kullanıldığı için karşılaşılabilen birçok sorunun çözümü test edilmiş ve sağlamlaşmışlardır.

    Windows NT'nin dünyada genel yükselişiyle birlikte, Perl/C CGI programlarının karşısına ASP teknolojisi çıkmıştır, ve hızla yükselmiştir. Temelde ASP, CGI'dan biraz farklı da olsa (bkz. CGI'ın alternatifleri kısmı) mantık olarak, yine sunucu tarafında program çalıştırmak amacıyla yaratılmıştı. Ancak, Microsoft'dan memnun olmayan bazı geliştiriciler, ASP'ye karşılık olarak, kaynak kodu açık olarak gelen PHP dilini yaratmışlardır. PHP, kendisinden önceki dillerin en iyi özelliklerini toplaması ve bir programcının bekleyebileceği birçok fonksiyonu hazır olarak sunması nedeniyle, kısa zamanda bir patlama yapmış, ve Netcraft'ın istatistiklerine göre yaklaşık 1,400,000 sunucudan 400,000'inde çalışır olmuştur. PHP'nin avantajlarını saymak gerekirse:
    PHP'nin avantajları

    * Perl gibi, öğrenmesi kolay ve yazılımı JavaScript ve Perl'e benzer bir dildir.
    * Internet üzerinde geliştiricisi çoktur ve PHP'yle yazılmış birçok paket çözüm, bedava olarak Internet'den indirilebilir.
    * Apache Web sunucusuyla çok iyi tümleşikliği nedeniyle, performansı yüksektir ve hem "Guru" geliştiricilerin, hem de programlamaya yeni başlayanların işini çok kolaylaştırmaktadır.
    * PHP, ana hedefleri bedava, açık kaynak kod, sunucu tarafı çalışma, benzer dillerdeki eksiklikleri giderme ve en önemlisi Hipermetin işleme olan bir dildir. Zaten PHP ismi de PHP: Hypertext Preprocessor kısaltmasından gelir.
    * PHP'ye eklenen özellikler, kullanıcılarından gelen istekler doğrultusunda olmaktadır. Eklenmesini istediğiniz bir özelliğin, geliştiricilere bir e-posta atarak bir sonraki sürümde (ki bu 2-3 ay gibi sıkça olmaktadır) dile bütünleştirilmesini isteyebilirsiniz.

    Genel olarak hangi dilin seçileceği, aslında bir mühendislik problemi gibidir ve şu soruların cevaplarında saklıdır:

    * Platform seçimi:
    Bu genel olarak bir işletim sistemi ve Web sunucusu seçimidir. Bazı diller, işletim sistemi seçildiği anda dışarıda kalmaktadır. Örneğin, MacOS dışında bir seçim yapıldığı anda AppleScript de dışarıda bırakılmaktadır. Genel olarak Web sunucularında, sağladıkları yüksek güvenlik ve sağlamlık nedeniyle, Unix ve türevi işletim sistemleri seçilmelidir. Örneğin, Solaris, HP-UX, Linux ve FreeBSD sunucu olarak en çok kullanılan Unix sistemleridir.
    * Dil seçimi:
    Kendini kabul ettirmiş birçok dil, birden fazla işletim sistemine taşınmıştır. Örneğin Perl ve C, varolan bütün işletim sistemlerinde vardır.
    * Uygulamanın çalıştırılma sıklığı:
    Eğer yazılacak uygulama, sunucunuzun bütün trafiğini önişlemden geçiriyorsa, ya da 1 gün içinde 100,000 gibi bir sıklıkta çalışmak zorundaysa, yorumlanan (interpreted) diller yerine (Perl, Python, Tcl, PHP, kabuk programları vb) derlenen (compiled) dillerin (C/C++ vb) kullanılması daha yerinde olur.
    Tersi durumu ele alırsak, uygulamaların, sunucuya çok fazla yük bindirmeyeceği biliniyorsa, yorumlanan diller işin daha kısa sürede yapılmasını sağlarlar, çünkü yorumlananan dillerin yapısı genel olarak daha basittir. Ancak bu durumda dilin basitliği nedeniyle kendine fazla güvenen acemi geliştiricilerin hata yapma olasılığı artar.
    * Örnek kodların ve harici modüllerin bulunabilirliği:
    Özellikle büyük uygulamaların yazılımında, eğer bu iş için ayırabilecek yeterli personeliniz yoksa, örnek kodlar çok işinize yarayacaktır. Bu kodları inceleyerek, programınıza uygun kısımları kendi kodunuzun içine yapıştırabilir, ya da teknikleri inceleyerek ilham alabilirsiniz. Eğer programın belli kısımlarını yazamayacak gibiyseniz, ya da dahası, bu işi yapan modüller piyasada mevcutsa, bu modülleri programınızın içine tümleştirebilirsiniz. Örneğin Java için, piyasada birçok hazır modül bulunmaktadır. Ayrıca, bu modüller Internet üzerinden de ücretsiz olarak kullanıma açılmış olabilir. Özellikle Perl için konuşmak gerekirse, birçok kütüphane Internet'te mevcuttur. Bu modüllerin birçoğu yukarıda da belirtildiği gibi, uzun süredir kullanımda olduğu için, güvenirlikleri, milyonlarca kullanıcı tarafından ve birçok farklı durum için test edilmiştir.
    * Sisteme tümleştirme:
    Yeni yazacağınız programlar, sisteminizde bulunan diğer programlarla iletişim kurmak zorundaysa, bu da dil seçiminizi etkileyecektir. Örneğin elinizde RMI üzerinden veri bekleyen bir Java programı varsa, bu programla CGI programınız arasında bağlantı kurmak için sizin programınızı da Java'yla yazmanız akıllıca olur. Bir C ya da Perl programıyla şansınızı denemek için, Java RMI tariflerine %100 uyan bir modül yazmanız gerekecektir.

    Yorumlanan diller mi, derlenen diller mi?

    Yorumlanan dillerin en büyük dezavantajlarından biri kullanıcıdan gelen verilerin, komut satırına aynen aktarılabilmesidir. Ayrıca, bir dezavantaj da programların kodlarının ve çalışır hallerinin aynı olmasıdır, halbuki derlenen dillerde, çalışan programı ele geçiren biri kaynak kodunu ele geçirmediği için programı kolayca inceleyemez ve güvenlik deliklerini bulamaz. Son olarak, yorumlanan dillerin çalışma hızı derlenen dillere göre daha yavaştır.

    Derlenen dillerin hızlarına rağmen büyük dezavantajı da daha uzun geliştirme süresi, programa kısıtlı kişilerin müdahalesi gibi sorunlardır.

    Ancak burada iki noktayı belirtmek gerekir, bu durum yavaş yavaş değişmektedir. Apache sunucusu için geliştirilen mod_perl ve mod_php modülleriyle, yorumlanan diller sunucu tarafından çok daha hızlı çalıştırılabilirler. Ayrıca, perl'deki tainting gibi mekanizmalarla, güvenlik konusunda ciddi adımlar da atılmıştır ve komut satırına gönderilen verilere kısıtlamalar getirilebilir.

    Dolayısıyla, yorumlanan diller (artık çok az) daha yavaş olsa da, çok kısa zamanda uygulama geliştirilebilmeleri nedeniyle derlenen dillere tercih edilebilirler.
    Hangi Web sunucularında CGI çalıştırabiliriz?

    Piyasadaki birçok Web sunucusu CGI programlarının çalıştırılmasına izin vermektedir. Belli başlıları:

    Apache Web sunucusu:
    Internet »
    http://www.apache.org/
    Apache Software Foundation'ın geliştirdiği bu sunucu, temellerini NCSA'in Web sunucusundan almıştır, ancak zamanla artan ilgi nedeniyle, geliştiriciler bu sunucuyu sürekli geliştirmiş, site yöneticileri de hem bedava olması, hem birçok özelliği desteklemesi, hem de performansının iyi olması nedeniyle Apache'ye çok rağbet göstermişlerdir. Kaynak kodunun açık olması nedeniyle, güvenlik delikleri sadece kendi geliştiricileri tarafından değil, 3. grup geliştiriciler tarafından da hızla kapatılmaktadır. Birçok site, kaynak kodu kendilerine göre değiştirerek, ihtiyaçlarına daha iyi cevap vermesini sağlamaktadır. Apache, CGI programlarının çalıştırılması için de ideal ve hızlı bir sunucudur. Ayrıca, Java, XML, Perl, PHP gibi dillere, yüklediği modüllerle yerleşik destek (native support) de sunabilmektedir. 2.0 sürümüyle Apache'ye multi-threading özelliği de eklenecektir. Bu nedenlerle Apache, şu an dünyada %62 gibi bir pazar payına sahiptir.


    Microsoft IIS:
    Internet » http://www.microsoft.com/iis/
    Microsoft, Windows NT makineleriyle bedava olarak dağıttığı IIS'le küçümsenmeyecek bir pazar payına kavuşmuştur. ASP teknolojisinin (bkz. CGI'ın alternatifleri bölümü) de, IIS'in kabul görmesinde rolü olmuştur. IIS, kolay kullanımı ve epey yüksek performansıyla dikkat çekmektedir. Ayrıca, Frontpage HTML düzenleyicisi için de yerleşik destek sunmakta, ve bu düzenleyiciyle yazılmış sayfaların sunucuya aktarılması çok kolaya olmaktadır. Ancak, IIS'in en büyük sorunlarından biri kendisinden kaynaklanan güvenlik problemleri, diğeri de çalışmak zorunda olduğu Windows işletim sisteminden kaynaklanan problemleridir.


    * Netscape Enterprise ve Fasttrack sunucuları:
    Internet» http://www.iplanet.com/products/infrastructure/web_servers/
    Netscape, istemci tarafında başlattığı ateşi sürdürememesine rağmen, sunucu tarafında daha başarılı olmuştur. Netscape sunucularının iki sürümü vardır ve her ikisi de varolan birçok işletim sisteminde çalışabilirler. Bu ailenin birincisi, küçük firmalar ve Intranet'ler için tasarlanan Fasttrack'dir. Fasttrack, aşağıda da bahsedilen SSJS teknolojisiyle birlikte gelmektedir. Bütün yönetimi Web tabanlı bir arayüzden yapılabilmektedir. Abisi sayılabilecek Enterprise (yeni adıyla iPlanet Web Server) sa durağan sayfa performansı yüksek, ancak CGI performansı aynı oranda yüksek olmayan bir sunucudur. Ayrıca birden fazla sanal alanın (virtual domain) olduğu bir ortamda performansı gittikçe düşmektedir. Dünyadaki kullanım açısından, Apache ve IIS'in arkasından, 3. sıradadır. Her iki sunucu da multi-threaded çalışmaktadır.

    * WebSite Pro:
    Internet » http://www.oreilly.com/catalog/webpro2/
    O'Reilly firmasının yazdığı birçok özelliği destekleyen ancak yeterince taraftar toplayamamış bir sunucudur. 2.0 sürümüyle beraber özel (custom) sunucu tarafı HTML etiketleri, ISAPI (Microsoft'un IIS için geliştirdiği bir API) desteği, Java Server Pages ve Servlet, VBScript, JScript, Perl ve Python desteği de sunmaktadır. WebSite'ın benzeri olan IIS'in gerisinde kalmasının en büyük nedeni, IIS'in bedava, WebSite'ınsa 800$ dolar civarında olmasıdır. WebSite Pro üzerinde, CGI programları orta denebilecek bir performansda çalışmaktadır.

    * Zeus Web sunucusu:
    Internet » http://www.zeus.co.uk/
    Zeus, Web sunucusu, yanına bile yaklaşılamayan yüksek bir performans sunmaktadır. CGI/Fast CGI, ISAPI, NSAPI, Servlet, RMI, Frontpage Eklentileri, 128 bit güvenlik vb gibi birçok teknolojiyi desteklemektedir. Zeus, son araştırmalara göre pazar payını gittikçe yükseltmektedir. 30 günlük bir deneme sürümü mevcuttur.


    Örnek bir CGI programı neye benzer?

    Aşağıda aynı programın hem Perl hem de PHP karşılıkları vardır. Kodlar, sadece tanıtım amaçlı olduğu için uzun tutulmamıştır, ancak bir fikir vereceğini tahmin ediyorum.

    Görev: Bir Web sayfasındaki formdan alınan verinin bir düz metin dosyasına eklenmesi.



    Kullanılan HTML kodu
    Kod:
    <html>
    <head>
      <title>Veri giriş formu</title>
      <meta http-equiv="Content-Type" content="text/html;
        charset=iso-8859-9">
    </head>
    
    <body>
      <form action="/cgi-bin/ilk-perl.pl">
        <p>İsminiz: <input type="text" name="isim">
        <p>E-postanız: <input type="text" name="eposta">
        <p><input type="checkbox" name="yeniler" value="gonder">
          Yeni haberleri bana da gönder
        <p><input type="submit" value="Gönder">
      </form>
    </body>
    </html>


    Perl çözümü (Dosya yerleri Unix, Linux vb için verilmiştir):
    Kod:
    #!/usr/local/bin/perl
    
    # bu dosyanin adı ilk-perl.pl olmalı, yukarıya bakınız.
    
    # perl programlarında 1. satır hariç, başında # olan
    # satırlar işleme sokulmazlar
    # bu yorum satırları, okunurluğu arttırmak içindir.
    
    # 1. satırdaki komut, perl programının diskte nerede
    # durduğunu belirtir, bu satır olmadan programınız çalışmaz.
    
    
    # istemciye göndereceğimiz çıktı başlıyor
    # bu satırla istemciye bir HTML çıktısı gönderdiğimizi
    # belirtiyoruz, aksi takdirde istemci, HTML kodlarını da
    # olduğu gibi ekrana basar
    print "Content-type: text/html\n\n";
    
    # CIKTI_SONU karakterlerini görene kadar bütün herşeyi gönder
    print <<CIKTI_SONU;
    <html>
    <head>
      <title>CGI çıktısı üretiyoruz</title>
    </head>
    <body>
      <h4>Verdiğiniz bilgileri kaydediyorum, lütfen bekleyin</h4>
    
    CIKTI_SONU
    
    $depo = $ENV{'QUERY_STRING'};
    @ciftler = split(/&/, $depo);
    
    # verilerin tutulacagi dosyayı açmaya çalış, hata çıkarsa bas
    # >> işareti dosyanın sonuna ekleme yapılacağını gösterir
    # $! varsa dönen hatayı basar
    open (VeriDosyasi, ">>/home/cu/veri.txt") or die "Dosyayı açamıyorum: $!";
    
    # formdan gelen bilgilerin herbiri için...
    foreach $cift (@ciftler){
      ($alan, $deger) = split(/=/, $cift);
      print VeriDosyasi "$alan=$deger\n";
      print "Şu anda yazılan alan: $alan, değeri:$deger<br>\n";
    }
    
    # dosyayı kapat
    close (VeriDosyasi);
    
    # kullanıcıya teşekkür et
    print <<CIKTI_SONU;
      <p>Bilgileriniz başarıyla kaydedildi, teşekkür ederiz
    </body>
    </html>
    
    CIKTI_SONU
    
    # programın sonu
    
    PHP çözümü (Dosya yerleri Unix, Linux vb için verilmiştir):
    
    <?
    
    // bu dosyayı ilk-php.php adıyla kaydederseniz, yukarıdaki
    // html kodunda form action'ı da ilk-php.php yapmalısınız.
    
    // php'deki yorumlar C++'a benzer
    // hem tek satırlık // yorumları
    // hem de ve */ blok yorum ikilisini kullanabilirsiniz.
    
    
    // aslında aşağıdaki satıra PHP modül olarak kurulmuşsa
    // gerek yoktur, PHP bunu otomatik olarak ekler
    header("Content-type: text/html");
    
    /*
       yukarıdaki ve aşağıdaki <? ve ?> ikilileri,
       php bloklarının başını ve sonunu ifade ederler.
    */
    ?>
    <html>
    <head>
      <title>CGI çıktısı üretiyoruz</title>
    </head>
    <body>
      <h4>Verdiğiniz bilgileri kaydediyorum, lütfen bekleyin</h4>
    <?
      // fopen'ın "a" parametresi, dosyanın sonuna ekleme
      // yapılacağını belirtir
      $VeriDosyasi = fopen("/home/cu/veri.txt", "a");
      while (list ($alan, $deger) = each ($HTTP_GET_VARS)) {
        echo "Şu anda yazılan alan: $alan, değeri:$deger<br>\n";
        fwrite($VeriDosyasi, "$alan=$deger\n");
      }
      // dosyayı kapat
      fclose($VeriDosyasi);
    ?>
    
    <!-- kullanıcıya teşekkür et -->
    <p>Bilgileriniz başarıyla kaydedildi, teşekkür ederiz
    </body>
    </html>
    
    <!-- programın sonu -->


    Her iki program da, açılan dosyaya şuna benzer 3 satır ekler:

    Perl çıktısı


    PHP çıktısı

    Kod:
    isim=Cuneyt%20Yılmaz
    eposta=cu%40ulakbim.gov.tr
    yeniler=Gönder
    	isim=Cuneyt Yılmaz
    eposta=cu@ulakbim.gov.tr
    yeniler=Gönder



    Perl'den farklı olarak PHP, otomatik olarak % işaretleriyle şifrelenen (URL encoded) karakterleri orjinalleriyle değiştirir. Yani cu%40ulakbim.gov.tr -> cu@ulakbim.gov.tr olur.

    Perl için söylenebilecek önemli bir husus, hemen her Perl programcısının kendi stilini geliştirebilme esnekliğidir. Yukarıda verilmiş Perl kodu, istenen işi yapan tek Perl programı değildir, sadece tanıtım amacıyla yazılmıştır.

    Yukarıda gizli şekilde belirtildiği gibi, her CGI programı çıktısına bir başlık eklemek ve çıktının MIME tipini belirtmek zorundadır, ör. Content-type: text/html ya da Content-type: image/gif gibi. Bu şekilde, istemcinin tarayıcısı gelen veriyi ne şekilde ekrana dökeceğini bilecektir.
    Nelere dikkat etmeliyiz?

    CGI programlarında genel olarak unutulan en önemli husus, işlenen verinin ham veri değil, bir kullanıcının girdiği bilgiler olduğudur. Dolayısıyla programcı karşı tarafta rastgele bir bilgi kaynağı değil, bir insan olduğunu hatırlamalıdır.


    * Güvenlik:

    CGI programları Web sunucusunun çalıştığı makineyi normale göre daha güvensiz hale getirebilir. Internet'te bulunan birçok makine CGI programlarının güvenlik delikleri nedeniyle kırılmıştır ya da geçici süreler için işlemez hale getirilmiştir. Dikkat edilmesi gereken hususlar Web sitesinin ve CGI programlarının güvenliği belgesinde anlatılmıştır.
    * Hız ve bellek kullanımı:
    Programlarınızı yazarken mümkün olduğu kadar hızlı çalışması ve az bellek kullanması için eniyileştirme (optimization) yapmalısınız. Makineniz, 1 istemci için gerekli CGI programını çalıştırırken, diğer 10 istemcinin isteğini bekletmemelidir.
    * Taşınabilirlik:
    Uygulamalarınızı yazarken mümkün olduğu kadar kullanılan işletim sistemi ve Web sunucudan bağımsız olmasına dikkat ediniz. Bu şekilde, günün birinde kullandığınız işletim sistemi veya sunucuyu değiştirmek zorunda kaldığınızda (bu yavaşlık, sistemin çok açığı olması, yeni sürümlerin çıkması, bir göçme durumunda yedek sunucuya aktarma vb yüzünden olabilir) programlarınızı küçük değişikliklerle çalıştırmanız mümkün olur.
    * Kodları tekrar kullanım (Code reusability):
    Uygulamanız birden fazla program kullanıyorsa, ortak parçalarını tek bir modül altında toplamaya çalışınız. Bu şekilde hem kodların yönetimi daha kolay olur, hem de bazı kritik hataları her programcıkta düzeltmeniz gerekmez. Aksi takdirde, bir programda kapattığınız bir hata, başka bir programda düzeltilmemiş haliyle kalabilir.

    * Hatasız (Bug-free) programlar ve Sınama aşaması:
    Programınızı dış dünyaya açmadan önce mutlaka olarak, programcıların dışında sınamacılara veriniz. Bu şekilde programcıların fark edemediği hataları, bu kişiler bulabilirler. Bu hatalar, güvenlik delikleri açabileceği gibi istemciye istenmeyen çıktılar göndebilir ya da veri tabanındaki bilgilerin bütünlüğünü bozabilir. Ayrıca programlarınızda verdiğiniz değişken kapasitelerinin üzerinde değerler vererek, programınızın beklenmedik durumlarda nasıl davrandığını inceleyiniz.
    * Siteye bütünleştirme:
    Mümkünse CGI uygulamalarınızı sitenizin genel görünümünü bozmayacak çıktılar üretecek şekilde programlayınız. Bunu yaparken şablonlama sistemi kullanırsanız, sitenizin görünümü değiştiğinde, CGI uygulamalarınızı yeni görünüme kolayca adapte edebilirsiniz.


    CGI'ın alternatifleri nelerdir?

    Aslında CGI'ın birçok "alternatifi" vardır. Bunların bir kısmı temel olarak CGI prensibiyle çalışmasına rağmen, farklı isimler almışlardır. Bu nedenle aşağıdaki teknolojileri, CGI'dan farklı nitelendirmemin sebebi, genel olarak CGI dendiğinde Apache/Perl ya da Apache/C ikililerinin kastediliyor olmasıdır.


    * SSJS - ServerSide JavaScript:

    Netscape firmasının ilk defa Livewire ürünüyle birlikte ortaya attığı bir teknolojidir. İstemci tarafında çalışan ve büyük kabul gören JavaScript dilinin sunucu tarafında da çalışabilir bir sürümüdür. Programlar, sunucu tarafında HTML sayfalarına gömülebilen JavaScript kodlarından oluşur. Sunucu, bu kodları yorumlar, çıktıyı üretir ve istemciye saf HTML kodu gönderir.

    Internet » http://developer.iplanet.com/tech/ssjs/
    o Artıları: İstemci tarafında çalışan JavaScript'ün tüm özellikleri yanısıra, dosya okuma/yazma ve gelişmiş oturum yönetimi (session management) fonksiyonları sağlar. Veritabanı bağlantısı olarak ODBC, Oracle, Informix ve Sybase arabirimleri sağlar. Birçok Unix ve Windows sunucu ortamlarında çalışabilir.
    o Eksileri: Uygulamalar, site genelinde çalıştırılamaz. Her uygulamanın kendine has bir dizini olmalıdır, ve sadece Netscape Web sunucularında (Netscape Fasttrack, Enterprise Server, yeni adıyla iPlanet Web Server vb) çalışabilir. Her ne kadar derlense de SSJS de aynı JavaScript gibi yorumlanan bir dildir. Ayrıca, uygulamaların çalıştırılmadan önce derlenmesi ve yönetim konsolundan tekrar başlatılması gerekir.

    * ASP - Active Server Pages:

    Microsoft firmasının aynı SSJS gibi sunucu tarafında çalışan script dili çözümüdür. ASP de belli bir programlama diline bağlı değildir, IIS üzerinde çalıştırılabilen her dili kullanabilir.

    Internet » http://msdn.microsoft.com/
    o Artıları: ASP, SSJS'den farklı olarak kendisi için aktarılan her dille (ör. JavaScript, JScript, VBScript, hatta gerekli modüller kurulursa Perl, PHP vb) geliştirilebilir. Uygulamalar gerekirse bileşen (component) haline getirilebilir ve diğer uygulamalar içinden çağırılabilir. Ayrıca, ASP programlamaya, Windows NT işletim sistemiyle gelen IIS sunucusunu kurar kurmaz başlayabilirsiniz.
    o Eksileri: Sadece Microsoft'un Web sunucularında çalışır, ve Windows NT ve türevlerine bağımlıdır. ASP de SSJS gibi yorumlandığı için yerleşik koddan (native code) yavaş çalışır. Şu aralar geliştirilmeye çalışılsa da, Apache Web sunucusunda çalışmamaktadır. (Visual Studio 6.0 içindeki) 2.0 sürümü itibariyle CORBA, SMTP, POP, IMAP, LDAP ve XML desteği yoktur.
    * Lotus Notes/Domino:
    IBM-Lotus firmasının önceleri Groupware için geliştirdiği, sonradan Internet ortamına uyarlamaya çalıştığı hızlı uygulama geliştirme platformudur. Kendisine has bir döküman yönetim sistemine sahiptir,ve kısıtlı da olsa bir veritabanı gibi kullanılabilir.

    Internet » http://www.lotus.com/
    o Artıları: Lotus Notes/Domino, geliştiricilere basitleştirilmiş bir arabirim sunar ve birçok uygulama, klavyeye dahi dokunmadan yazılabilir. Ayrıca, Domino sunucu ailesinde birçok paket çözümler sunulmaktadır.
    o Eksileri: Lotus Notes, öncelikle kendi içine kapalı bir sistemdir. Uygulama geliştiricilerin, sunucuda birçok alana müdahalesi, veritabanındaki bilgileri SQL uyumlu bir başka veritabanına aktarması zordur. Genel olarak, Intranet uygulamalarına yönelik olduğu için Extranet'lerin bazı taleplerini karşılayamamaktadır. Son olarak, bazı uygulamalar, Web tarayıcılarında çalışmamaktadır, bu uygulamalar için Lotus Notes istemcisi kullanılmak zorundadır.
    * ColdFusion:
    Internet »
    Allaire firmasının üzerinde dikkatlice düşünerek piyasaya sunduğu bir sunucu tarafı uygulama geliştirme platformudur. ColdFusion uygulamaları ASP ve SSJS gibi, HTML dosyalarının içine yerleştirilen ColdFusion etiketleri kullanılarak yazılır, bu dile de CFML (ColdFusion Markup Language) denilmiştir.

    Internet » http://www.allaire.com/Products/ColdFusion/
    o Artıları: ColdFusion, Windows NT haricinde, belli başlı Unix işletim sistemlerinde de çalışabilir ve programları sorunsuzca aktarılabilir. Ayrıca, SQL, IMAP, POP, SMTP, LDAP, CORBA, XML destekleri yanında, Sunucu kümeleme (server clustering), varolan Web sunucusuna (ör. Apache) entegrasyon, CGI, ISAPI, NSAPI gibi teknolojilere de destek vermektedir. Son olarak, piyasadaki en iyi HTML düzenleyicilerinden Homesite'la iyi bir bütünleşikliği vardır.
    o Eksileri: Yüksek maliyet (Haziran 2000 itibariyle 4995$), Unix sürümünün zaman zaman göçmesi ve zayıf bellek yönetimi.

    * JAVA:

    Sun Microsystems firmasının Internet'de devrim yaratan dili. Asıl olarak, taşınabilir cihazlar (avuçiçi bilgisayarlar, cep telefonları vb) ve elektronik aletlerde (televizyon, çamaşır makinesi, müzik seti vb) kullanılmak üzere tasarlandığı için platform-bağımsızlığı en büyük vaatlerinden biridir. Ancak, daha sonra hedef büyütülerek, Java önce istemci tarafında çalışabilir bir hale, sonra da sunucu tarafında çalışabilir bir hale getirilmiştir.

    Internet » http://java.sun.com/
    o Artıları: Java herşeyden önce platform-bağımsızdır. Yazılan uygulamalar, işletim sistemi değiştirilse de hiçbir değişiklik yapılmadan yenisinde de çalışabilir. Java, NYP-Nesne Yönelimli Programlama (Object Oriented Programming)'ya dayanan bir dil olduğu için NYP'nin tüm avantajlarını taşır. Dolayısıyla öğrenme süreci, NYP'ye tanıdık olanlar için çok yüksektir ve Internet üzerinde geniş bir destekçi kitlesi vardır. Bu nedenle yeni programların geliştirilmesi çok hızlı olmaktadır. Java, zamanla geliştirilerek Java Server Pages (JSP) ve Servlet (Server ve Applet kelimelerinden türetme) teknolojilerini destekler hale gelmiştir. JSP, ASP'ye çok benzeyen bir teknolojidir. Ayruca, daha önce yazılmış Java, programların yenilerine bütünleştirilmesi de çok kolay olmaktadır. Piyasada, hemen her tür isteği karşılayabilecek modüller bulunmaktadır.
    o Eksileri: Java, iddia edebildiği şeylerin hemen hepsini yapabilmesine rağmen, halen çok yavaştır. Özellikle derlenmiş kodlara göre 20:1 gibi bir fark oluşmaktadır. Ayrıca, Internet tarayıcılarının, özellikle Netscape Communicator ve Internet Explorer'ın, Java destekleri birbirinden farklı olduğu için, geliştiriciler istemci tarafı çalışan uygulamalarında sıkıntı çekmektedirler. Bu normal olarak, sunucu tarafını etkilemese de, iki tarafın arasındaki iletişimin istemci tarafı Java'ya dayandırılmaması akılcı olur.