| Açıklama : | Giriş
HTML ile uğraşmaya başladınız ve hemen bu dilin yetersizliklerini keşfettiniz. Bu eksikleri Javascript ile gidermeye çalıştınız. Fakat halâ eksik bir şeyler var. Sayfalarınıza Form koyuyorsunuz, fakat “mailto:” köprüsünden başka bir ACTION koyamıyorsunuz. Veya koyuyorsunuz da hep başkalarının yazdığı programlara, Script’lere köprü veriyorsunuz. Çoğu zaman bu köprüler de işlemiyor.
CGI dünyasına hoşgeldiniz!
Eğer şu andaki planlarınızın arasında yeni bir dil öğrenmek yoksa, korkarım planlarınızı değiştireceksiniz. Bir dil öğrenmeye çoktandır niyetli idiniz, fakat bir türlü dili belirleyemiyor idi iseniz, tebrikler, Perl öğreniyorsunuz!
Hemen gözünüz korkmasın! Muhasebe veya kelime-işlemci bir program yazacak şekilde Perl öğrenmeye kalkmayacağız. Zaten bu kadarcık bir kitapçıkla, Perl gibi bir dil öğrenilemez. Sadece CGI’a yetecek kadar Perl öğreneceğiz. Bu, Web sitenize evsahipliği yapan Web Server’a “Filanca formdaki bilgileri al; şu dosyaya ekle; sonra formu dolduran kişiyle elektronik mektup yollayarak teşekkür et vebana da durumu bildir!” demeye yetecek kadar Perl demektir.
Perl, Internet bu kadar yaygın değilken, yani tarihin karanlık çağlarında (illâ bilmek istiyorsanız, 1986 yılında!), Larry Wall adında Unix işletim sistemi ile çalışan bir bilgisayar ağının yöneticisi tarafından, hergün yaptığı işleri kolaylaştıracak bir makro dili olarak geliştirilmiş. Larry, sorumlu olduğu sistemin kullanımı ve durumu ile ilgili yüzlerce raporu yazdırmak için komut istemci satırından aynı komutları tek-tek girmekten bıkmış. Kendi kendine “Şu sisteme bütün bu komutları hergün tek tek vermektense bir dosya olarak versem; ne kadar kolay olur!” demiş. Fakat o tarihte Larry’nin Unix’inde ve diğer Unix türevlerinde bir çok programlama dili mevcut olduğu halde, “pratik,” bir yığın raporu alıp içinden gerekli bilgileri “çeken” ve bunu “rapor” haline getiren bir dil yoktu. Larry, çaresiz kalan bütün bilgisayarcılar gibi, oturdu, kendi programlama dilini kendisi yazdı! Ortaya çıkan dile, Practical Extraction and Report Language (Pratik Çekme ve Rapor [etme] Dili) adı verildi. Tek işlevi vardı: Unix operatörünün çeşitli kayıt (log) dosyalarından ihtiyacı olan bilgileri çekip, bir rapor biçimine sokarak, ya yeni dosyaya kaydetmek, ya ekranda görüntülemek ya da yazıcıda yazdırmaktı.
Fakat ilk sürümünü paylaşanlar Perl’ü (ki ilk sürümünde adı bile yoktu!) o kadar sevdiler ki, 1988 Usenet Konferansı’na katılanların kapış kapış paylaştığı tek şey Perl disketleri oldu. Perl’ün şöhreti Unix ile sınırlı kalmadı; Microsoft firması NT, IBM ise OS/2 için sürümlerinin hazırlanmasına yardımcı oldular. Netscape, Apache ve Microsoft Web Server programlarına Internet Client (istemci) programları (Internet sitelerini ziyaret eden kişinin Browser’ı) tarafından gönderilecek bilgilerin işlenmesi gibi Web Server’a bir dizi komut vermek vermek gerektiğinde kullanılacak Script (betik) dili aradıklarında tereddütsüz Perl’e de yer verdiler. Perl bu amaçla kullanılabilecek diller arasında gerek kullanım kolaylığı, gerekse Unix uzmanları tarafından zaten yaygın olarak kullanılması sebebiple ön sıraya geçti. Şimdi 5’nci sürümüne ulaşmış bulunan Perl ile ilgili temel bilgiyi 200 küsur sayfalık “perl manpage” dosyasında bulabilirsiniz. Bu dosyayı indirebileceğiniz yerlerin başında http://www.perl.com/perl/info/documentation.html#online adresi gelir. Ayrıca Usenet’te Perl’ün gelişimi konusundaki şu Haber Gruplarına bakabilirsiniz:
news://comp.lang.perl.announce
news://comp.infosystems.www.authoring.cgi
Perl’ün bu denli tutulması ve Internet’te istemci ve sunucu sistemler (Browser ve Web Server) arasında aracı olarak kullanılması bir kaç sebebe bağlanabilir. Bunların başında Perl’ün bir Script dili olması gelir: yani Perl ile yazdığınız program, bir düz yazı dosyasıdır ve çalışabilmesi için bir yorumlayıcıya ihtiyaç vardır. Derlenmemiştir; yani ortada bir .exe veya .com dosyası bulunmaz.
Şimdi biraz da CGI üzerinde duralım. Yukarıda CGI’ın, Internet istemcisi ile sunucusunun buluştuğu nokta olduğunu belirttik. Bu noktaya Common Gateway Interface (Ortak Geçit Arayüzü) denir, çünkü Web Server programı, istemci programdan (browser) kendisini çalıştıran bilgisayara gönderilen komutlar için bir geçit noktasıdır. Sizin Web tasarımcısı olarak sözgelimi bir Form’daki bilgilerin alınıp, bir dosyaya kaydedilmesi için vereceğiniz komutu, sitenizin bulunduğu bilgisayarın işletim sistemi icra edecektir. Formunuzdaki bilgilerin alınıp, söz gelimi size elektronik mesaj olarak gönderilmesini istiyorsanız, gerçekte sitenizin evsahibi olan bilgisayara, “E-mail programının mektup gönderme bölümünü çalıştır da, şu mektubu gönder bakalım!” demiş oluyorsunuz. Bu komut icra taleplerinin, Internet’ten (browser’dan) alınıp evsahibi bilgisayarın işletim sistemine aktarılması için bir ortak geçit ve bu geçitte sizin bu komut taleplerinizi karşılayıp, işletim sistemine aktaracak bir ara-birim gerekir. Bu arabirim, CGI’dır.
CGI programı dediğimiz şey ise Perl’le yazılabilir; C, Delphi, Visual Basic ile yazılabilir; yeter ki Web Server bu programı çalıştırabilsin; programın vereceği komutları alıp, kendisinin de “üzerinde” bulunduğu işletim sistemine iletebilsin.
Bu ilişkileri daha iyi anlayabilmek için biraz daha yakından bakalım. Internet’te istemciler ve sunucular vardır. İstemci (client), bir Internet Browser programıdır; bu program kullanıcı olarak bizim arzu ettiğimiz Internet adresini bulmak ve bu adresteki HTML belgesini Browser penceresinde görüntülemekle görevlidir. Internet dediğilmiz kablolar, uydular, Router’lar kümesinin nasıl çalıştığınızı bildiğinizi varsayıyorum. Bu konuda birçok yerde, örneğin Byte Dergisinin Kasım 1998 sayısıyla birlikte verilen Bir Web Sitesi Kuralım adlı kitapçıkta, gerekli bilgiyi bulabilirsiniz. Internet’in diğer ucunda bulunan sunucu da tıpkı bizim Browser programımız gibi bir programdır; bir bilgisayarda çalışır ve o bilgisayarda da tıpkı bizim istemci bilgisayarımız gibi bir işletim sistemi bulunur. Bizim istemci olarak gönderdiğimiz talep, sunucuya ulaştığında neler olur? Önce Web Server programı, talebi inceler, taleple birlikte kendisine gelen bir çok bilgiyi kaydedeceği bir ortam (Enivronment) oluşturur. Sonra talep edilen HTML dosyasını kendi bilgisayarında bulur ve istemciye gönderir.
İstemci olarak her zaman “düz” bir HTML dosyası talep etmeyiz. Kimi zaman sözgelimi bir form’da “Gönder” düğmesini tıklarız. HTML bilginizi yoklayın; genellikle bir Gönder düğmesi, ait olduğu Form etiketinin ACTION bölümünde yazılı “komutu” harekete geçirir. Böyle bir “istem” halinde neler olur? Bizim açımızdan farklı hiç bir şey olmaz: bizim Browser programımız tıpkı düz bir HTML talep ettiği gibi, Formun bilgisini derler-toplar paketler Sunucu’ya gönderir. Gönderilen “şey” yine Internet denen ortamdan geçer ve sunucuya ulaşır. Fakat bu kez sunucuda farklı işlemler olur:
Sunucu, kendisine gelenleri inceler ve ikiye ayırır: Veriler ve komutlar. Veriler, bizim için o anda oluşturulan ortamda kaydedilir; komutlar ise çalıştırılmak üzere işletim sistemine aktarılır. Web Server programının çalıştığı işletim sistemi, kendisine Web Server tarafından iletilen “Şu komutu icra et bakalım!” talebini inceler; ve gereğini yerine getirir. (Bu komut, “C: sürücüsündeki bütün bilgileri sil!” bile olsa! Buna aşağıda döneceğiz.)
Bu anlamda CGI, istemcinin Web Server’a ve onun işletim sistemine “iş yaptırttığı” noktadır. CGI programı, bu işleri belirten programdır. Perl, bu programları yazdığımız ve çağırdığımız programı yazmakta kullandığımız bir dildir.
Perl ile çok iş yapılabilir. Fakat bu kitapçıkta biz Perl’ün sadece CGI’ı ilgilendirdiği kadarıyla ilgileneceğiz. Başka bir deyişle bu kitapçık bir Perl kitapçığı değil, bir CGI kitapçıdır. İlgimiz dil olarak Perl’den çok Perl’ün CGI’da nasıl kullanılacağına yönelik olacaktır. Dolayısıyla, önce uzun uzun CGI’ı tanıyacağız. Bunun için Web Server’ın ne olduğuna ve nasıl çalıştığına bakacağız. Ve tabiî bu amaçla bir çok Perl programı yazacağız.
Perl ile veya hangi dille yazılırsa yazılsın, CGI programı kendi başına iş yapmaz, Web Server’a o işin yapılmasını bildirir. Başka bir deyişle Perl ile yazacağımız CGI programı aslında sadece Web Server’ı “programlamaya” yarar. Kelime-işlem programınız için makro yazarken nasıl bu programın neler yapabileceğini bilmek zorunda iseniz, CGI programı yazabilmek için de Web Server programını tanımanız, imkan ve yeteneklerini, işletim sistemi ile nasıl etkileştiğini bilmeniz, dolayısıyla bir ölçüde de olsa işletim sistemi tanımanız gerekir. Bu kitapçıkta bu bilgiler yer alıyor.
Kişisel Web Server Kuralım
Şimdi asıl mevzuya girmeden kısa bir hazırlık yapmamız gerekir. Diyelim ki bir CGI programı yazdık. Bu programı Web Server’a gönderip, uygulamaya koymadan önce, kendi bilgisayarımızda denememiz gerekmez mi? Fakat dedik ki, CGI programları Server için yazılır ve Server’da çalışır. Bugüne kadar istemci olmaktan başka bir işlevi olmayan kendi bilgisayarımızda bu işi yapabilir miyiz? Evet yaparız; yapmak zorundayız. Bir CGI programını gerçek Web Server’da, gerçek Internet’te denemeye kalkmak, hem çok tehlikeli olabilir, hem de çok masraflı. Önce kendi istemci bilgisayarımızı, küçük bir sunucu haline getirelim ve CGI programlarımızı kendi bilgisayarımızda deneyelim.
Perl, Unix dilidir; dolayısıyla herhangi bir Unix-türevi işletim sisteminde (örneğin Linux’ta) hiç bir şey yapmaya gerek olmadan çalışır. NT işletim sistemiyle çalışan Web Server programları da Perl ile yazılmış CGI programlarını çalıştırabilirler. Ücretsiz site yeri veren Web Evsahibi firmalar (Hosting şirketleri) genellikle Unix-tabanlı sistemlere sahiptir. Fakat sizin evsahibiniz NT-tabanlı bir Web Server’a sahipse, büyük bir ihtimalle sistemini Perl’ü tanıyacak ve çalıştırabilecek ekleri yapmıştır.
Yazacağımız CGI programlarını sınayacağınız kişisel bilgisayarınız Linux ile çalışıyorsa, muhtemelen bir Web Server programı ya kurulmuştur; ya da elinizdeki Linux dağıtım CD-ROM’unda bunu yapmanızı sağlayacak dosyalar vardır. Linux ile çalışan bilgisayarınıza Web Server programını kurduğunuz zaman bu program Perl’ü anlar, yorumlar ve uygular; özel bir önlem almanız gerekmez.
Kişisel bilgisayarınız Windows 95, 98, NT4 WorkStation veya NT4 Server ile çalışıyorsa, sisteminize bir Web Server programını siz kurmak zorundasınız. Windows 2000 Professional veya Windows 200 Server ise Kişisel Web Server programını kendiliğinden kurar. Ancak bütün Windows sistemlerinde, kişisel Web Server’ın Perl ile yazılmış CGI programını anlar hale gelmesini sağlamak size düşer. Şimdi kısaca bir Windows sistemine kişisel Web Server kurma ve bu Server’ı Perl anlar hale getirme konusu üzerinde duralım.
Windows 98’e bir kişisel Web Server kurmaya geçmeden önce bilgisayarımıza bir kimlik vermemiz gerekir: Bilgisayarım/Denetim Masası/Ağ’ı tıklayarak açacağınız diyaloğ kutusunda ikinci sekme olan Tanımlama’yı açın ve “Bilgisayar adı” kutusuna istediğiniz adı yazın. Bilgisayarın ağ ortamında olması gerekmez. Sonra Win98 CD-ROM’unda Add-ons klasöründeki PWS dizininde Kur.exe’yi tıklayın. Aynı işlemi NT için Option Pack CD-ROM’unu kullanarak da yapabilirsiniz. Option Pack CD-ROM’undaki Default.htm’i açarsanız, bilgisayarınızın Windows 98 ile çalıştığını algılayacak olan program size Personal (kişisel) Web Server (PWS) kurmayı önerecektir. NT4 Workstation veya NT4 Sevrer sistemlerine kişisel Web Server olarak Internet Information Server (IIS) kurulmalıdır. NT Option Pack CD-ROM’unundaki Default.htm’i açarsanız, program size IIS’ii kurmayı önerecektir. (NT4 sistemlerine IIS’i kurmadan önce, Service Pack 3’ü uygulayın; Internet Explorer 5’i kurun. Elinizde varsa Service Pack 4, 5 veya 6’yı en son uygulayın.)
//////////////////////KUTU//////////////////
PWS Kurulurken Hata Verirse
Windows 98’e PWS kurarken, programın Microsoft Transaction Server bölümüne ilişkin sistem kayıtları yapılırken, iki hata mesajı ile karşılaşabilirsiniz (0x80004005 ve 0xfee662). Bu, orijinal Windows 98 CD-ROM’undaki PWS Kur programının, Windows Registry dosyasının büyük olması halinde hata vermesinden kaynaklanıyor. Böyle bir durumla karşılaşırsanız, Bilgisayarım/Denetim Masası/Program Ekle Kaldır aracılığıyla, Personel Web Server’ı kaldırın. Bilgisayar kapanıp açıldıktan sonra, Windows 98 CD-ROM’unda Add-ons/PWS dizinindeki bütün dosyaları, sabit diskinizde Temp dizinine kopyalayın. Sonra http://support.microsoft.com/support/kb/articles/q246/0/81.asp adresinde “Dowload Mstsetup.dll” satırını tıklayın. Mssetup.exe adlı bir dosya bilgisayarınıza indirilince; bu dosyası iki kere tıklayın ve dosyanın genişletileceği yer olarak C:\Temp’i gösterin; program Mstsetup.dll dosyasının değiştirilmesini isteyip istemedğinizi sorduğu zaman “Tamam”ı tıklayın. Şimdi, C:\Temp’deki Kur.exe (Windows CD-ROM’unuz İngilizce ise Setup.exe) programını iki kere tıklayın. PWS şimdi hatasız kurulacaktır.
///////////////////KUTU BİTTİ//////////////////////////////
Windows 987e Kişisel Web Server kurulduğunda Masaüstü’nde Yayınla (Publish) adlı bir simge belirecektir. NT sistemlerinde ise Başlat menüsünde Programlar bölümüne IIS Manager satırı eklenir. Bu yollardan biriyle PWS veya IIS’i çalıştırın; Kişisel Web Server Yönetici penceresi açılacaktır. Soldaki araç çubuğunda Yönetici’nin çeşitli bölümlerine gitmeniz gerekli gezinme simgeleri var. Şimdi, açılan ana pencerede iki unsura dikkat edin:
1. Kişisel Web Server’ınızın adı. Bilgisayarınızın adı buraya Server adı olarak yazılmış olmalı. Biraz sonra, Internet’e koymadan önce sınayacağımız CGI programlarını içeren HTML sayfalarını çağırırken, Browser’ın adres kutusuna burada gördüğümüz adı yazacağız.
2. Kişisel Web Server’ın bilgisayarımızda sabit diskteki gerçek adresi. Bu, sizin Kişisel Web Server’ınızın kök (root) dizinidir. Bu genellikle C:\inetpub\wwwroot klasörüdür. Kişisel Web sitesi yaparsanız, sitenin gerektirdiği bütün dizinleriniz ve dosyalarınız burada gördüğünüz dizinin içinde olmalıdır. Yapacağımız CGI dosyalarını işte bu dizinin içine koyacağız.
Bunları bir kenara not ettikten sonra, soldaki araç çubuğunda Gelişmiş simgesini tıklayın; ortadaki pencerede sanal dizinlerinizi görüyorsunuz. Bunlardan Home’u seçin ve sağdaki “Özellikleri düzenle” düğmesini tıklayın.
Ana dizinin okuma, yürütme ve makro erişim haklarının işaretli olmasına dikkat edin. İlerde kendinize Kişisel Web Server’ınızın kök dizininde yeni bir dizin oluşturursanız (örneğin “resimler” gibi) ve içine sitenizle ilgili dosyalar koyarsanız, Gelişmiş penceresinde Ekle düğmesini tıklayarak bu gerçek dizini de sitenin sanal dizinlerinden biri haline getirmeniz gerekir. Gerçek dizinin adı XYZ bile olsa, sanal dizin haline getirirken istediğiniz sanal adı verebilirsiniz. Ama unutmayın, Browser’ın adres hanesine gerçek dizin adını değil sanal dizin adını yazmanız gerekir.
|