|
 |
« : 02 Mayıs 2008, 11:03:03 » |
|
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 Linklerin Görülmesine İzin Verilmiyor Linki Görebilmek İçin Üye Ol veya Giriş Yap 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. <cgi-perl001.tif> 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: <cgi-perl002.tif> 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 Linklerin Görülmesine İzin Verilmiyor Linki Görebilmek İçin Üye Ol veya Giriş Yap 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: <cgi-perl003.tif> 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. <cgi-perl004.tif> 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. Bu işlemleri IIS’te değişik görüntülerle, fakat temel ilkeler itibariyle aynı şekilde yapabilirsiniz. Windows İçin Perl Şimdi sıra geldi Windows ortamını Perl’den anlar hale getirmeye! Bunun için Internet’ten ActivePerl’ü indirmek veya ActiveState firmasından CD-ROM ısmarlamak zorundayız. Her iki işlem için de Linklerin Görülmesine İzin Verilmiyor Linki Görebilmek İçin Üye Ol veya Giriş Yap adresine gitmemiz gerekir. ActiveState sitesinden ActivePerl’ün son sürümünü indirin ve bilgisayarınıza kurun. Windows 95 kullanıcıları, sistemlerinde Perl programlarını çalıştırabilmek için sistemlerinin DCOM bileşenlerini güncelleştirmek için Microsoft’un sitesinden bazı dosyaları indirmek zorundalar. Bu güncelleştirme için dosyaları Linklerin Görülmesine İzin Verilmiyor Linki Görebilmek İçin Üye Ol veya Giriş Yap adresinde bulabilirsiniz. (Distributed Component Object Model (DCOM), Windows’un ağda güvenli ve etkin bir tarzda yazılım bileşeni dağıtma teknolojisidir. Eski adıyla "Network OLE," olan DCOM, HTTP dahil, bütün ağ dağıtım ve ulaştırma protokolleri ile uyumludur ve kendi bilgisayarımızda Perl programlarını sınamak için bile olsa Windows açısından gereklidir.) /////////////////KUTU///////////// ActivePerl’ü kurarken ActiveState’in bu kitapçığı yazarken 5.22 sürümüne ulaşmış olan ActivePerl programının kuruluşu sırasında bazı hata mesajları ile karşılaşmak mümkündür. 102, 104, 105, 112 veya 301 sayılı hata mesajlarını alırsanız, bilgisayarınızı kapatıp, açın ve ActivePerl’ü kurmadan önce herhangi bir 16-bit program çalıştırmayın. Sorunu bu yöntemle çözemezseniz, Linklerin Görülmesine İzin Verilmiyor Linki Görebilmek İçin Üye Ol veya Giriş Yap adresinde Q100198 sayılı yaardım dosyasını indirerek, önerileri sırasıyla uygulayın. ActivePerl’ün kurulumununsonuna doğru “Cannot Craeta Perl Interpreter” mesajını alırsanız, muhtemelen daha önce kurulmuş eski sürüm ActivePerl ile çatışma var demektir. Bu durumda ya eski ActivePerl’ü kaldırır ve klasörlerini silemeniz ya da yeni sürüm ActivePerl’ü yeni bir klasöre kurmanız gerekir. ActivePerl’ü adında boşluk olan dizine kurmayın. ActivePerl’ün işlemesi için gerekli bazı programlar, adında boşluk olan dizinleri göremezler. ActivePerl’ün Kur programının önerdiği varsayılan dizini kabul etmek doğru olur. Ayrıca Kur programının Autoexec.bat ve config,sys dosyalarında yapmayı önerdiği değişiklikleri yapmasına izin verin. Kurma ve diğer sorunlarla ilgili olarak ActiveState’in sitesindeki FAQ (Sıkça sorulan Sorular) dosyalarına başvurabilirsiniz. Özellikle Linklerin Görülmesine İzin Verilmiyor Linki Görebilmek İçin Üye Ol veya Giriş Yap sayfasında Windows sistemleriyle ilgili geniş bilgi bulabilirsiniz. //////////////////KUTU BİTTİ/////////////////// ActivePerl’ü kurduktan sonra, küçük bir işlemle, PWS veya IIS’i, uzatması .pl olan dosyaları görüntülenmesi için Perl.exe programını çalıştırmak üzere ayarlamanız gerekir. Bu ayar, Windows’un kayıt dosyasını (Regitry) düzenlemeyi gerektiriyor. Kayıt dosyası, Windows 95/98/NT/2000 sistemlerinin düzgün çalışması için gereklidir; bu dosyada yapılacak bir yanlışlık sistemin tümünü çalışmaz hale getirebilir. Aşağıdaki işlemleri yapmaya başlamadan önce Registry’nin yedeğini almak ve bunu bir diskette saklamlak gerekir. Buna rağmen çalışırken çok dikkatli olmanızı salık veririm. Şimdi önce Perl.exe’nin yol bilgisini (Path) bir kenara yazın: örneğin c\Perl\bin\perl exe); ve PWS’i durdurun. Sonra 95/98’de Regedit.exe, NT’de Regedt32.exe programını çalıştırın. Soldaki dizide altı ana-kayıt bölümü göreceksiniz. Bunlardan HKEY_LOCAL_MACHINE’nin önündeki artı işaretini tıklayın. Açılacak listede SYSTEM’i bulun ve önündeki artıyı tıklayın. Açılacak listede CurrentControlSet’i bulun; önündeki artıyı tıklayın. Açılacak listede Services satırını bulun ve önündeki artıyı tıklayın; yeni listede W3SVC satırının önündeki artıyı, sonra Parameter satırının önündeki artıyı tıklayın. Şimdi, açılacak lisdede ScriptMap satırını tıklayın. Sağda, “Varsayılan...(değer atanmamış)” satırını görüyor musunuz? Güzel. Şimdi, Düzen menüsünü tıklayın, açılacak listede Yeni, açılacak alt-listede Dize Değeri maddesini seçin. Sağda, “Varsayılan...” satırının altında “Yeni Değer #1” adlı bir satır oluşacak ve bu kelimeler seçilecektir. Klavyede “.pl” yazın (Nokta işareti, p ve l harfleri). Sonra kKlavyede iki kere Enter’a basın; açılacak Dize Düzenle kutusunda “Değer verisi” hanesine kendi sisteminize uygun olan Perl’ün sabit diskteki yol bilgisini (Path) ile birlikte “%s %s” yazın. Örneğin: c:\Perl\bin\perl.exe %s %s Burada “%s” yazarken s harfinin küçük harf olmasına dikkat edin; büyük S yazarsanız Perl çalışmaz. Bu bilgiyi girdikten sonra Dize Değeri kutusunun Tamam düğmesini tıklayın. Aynen şu görünümü elde etmiş olmalısınız: <cgi-perl005.tif> Bu işlem sırasında Dize adını verirken hata yaparsanız, örneğin .pl yerine pl veya .pp yazarsanız, bu kelimeyi sağ tıklayın ve açılan menüden Yeniden Adlandır maddesini seçin. Dize değerini yazarken hata yaparsanız, yine .pl’i sağ tıklayın ve açılan menüden Değiştir maddesini seçin. (Eğer ActivePerl’ün varsayılan değerlerini değiştirmediyseniz, Perl dizininin adının büyük harfle, “bin” dizininin ve programın adının küçük harfle başladığına dikkat edin. %s iki kere kere yazılıyor ve ikisinde de s harfi küçük!) Regedit’i kapatın. Bilgisayarı kapatıp, açın ve PWS’i başlatın. Şimdi PWS’ınız Perlce bilir hale gelmiş olmalı! Aynı işlemi NT’de IIS için yapacaksanız, IIS Manager’da Default Web Server’ı durdurun. Regedt32.exe’yi çalıştırdığınızda ve HKEY_LOCAL_MACHINE\ SYSTEM\CurrentControlSet\Services\W3SVC\Parameter\ScriptMap’i bulunca Edit menüsünden Add Value maddesini tıklayın. Value Name olarak .pl yazın. Data Type olarak Reg_SZ’i seçin ve String Value olarak perl.exe’nin tam Path’ ile perl.exe %s %s yazın. Örneğin: c:\Perl\bin\perl.exe %s %s Regedt32’yi kapatın; IIS Manager’dan Default Web Server’ı çalıştırın. Şimdi sizin NT sisteminiz de Perl anlar hale gelmiş olacak. Ama her iki durumda sistemi sınamak gerekir. Bunun için Not Defterini açıp, şunları yazın: print "HTTP/1.0 200 OK\n"; print "Content-Type: text/html\n\n";
print "<HTML>\n"; print "<HEAD>\n"; print "<TITLE>MERHABA DÜNYA</TITLE>\n"; print "<meta http-equiv=\"content-type\" ***********\"text/html; charset=ISO-8859-9\">\n"; print "<meta http-equiv=\"Content-Type\" ***********\"text/html; charset=windows-1254\">\n"; print "</HEAD>\n"; print "<BODY>\n"; print "<H4>Merhaba Dünya</H4>\n"; print "<P>\n"; print "IP adresiniz: $ENV{REMOTE_ADDR}.\n"; print "<P>\n"; print "<H5>Başarılar dileriz!</H5>\n"; print "</BODY>\n"; print "</HTML>\n";
Bu dosyayı merhaba.pl adıyla, PWS’ın kök (root) dizinine kaydedin. Browser’ınızı açın ve adres hanesine kişisel Web Server’ınızın adresi ile birlikte dosyanın adını yazın. Örneğin: Linklerin Görülmesine İzin Verilmiyor Linki Görebilmek İçin Üye Ol veya Giriş Yap <cgi-perl006.tif> Tebrikler! Bir taşla kaç kuş birden vurdunuz. Ve en önemlisi, ilk CGI programınıza “Merhaba Dünya!” yazdırarak, bir geleneği korumuş oldunuz. İlk Perl programımızı yazmış olduk; gerçi şu anda yazdıklarımızın ne işe yaradığını pek bilmiyoruz, ama yukarıda belirttiiğimiz gibi bu programla Server’a bir “iş” yaptırıyoruz. Bu iş, ana hatlarıyla, bir HTML sayfası oluşturmak ve bunu talep eden istemciye göndermesini sağlamaktan ibadet. Kodumuza dikkatle bakarsanız bu işin bölümlerini görebilirsiniz; ama şimdilik bu ayrıntıların üzerinde durmayalım. Burada önemli olan, Windows sistemimizi Unix’e ait bir dili anlar hale getirmiş ve bunu kurduğumuz kişisel Web Server’ımıza tanıtmış olmamız. Şimdi kolları sıvayıp, CGI için Perl öğrenmeye başlayabiliriz. Ama isterseniz bu işlemi bir kere de “.cgi” uzatması için yapabilirsiniz. Perl program dosyalarını “.cgi” uzatmasıyla kaydetmek yaygın bir uygulamadır; böyle bir örnekle karşılaştığınız ve uyguladığınız zaman kişisel Web Server’ınızın hata vermesini önlemiş olursunuz. Daha fazla bilgi için Bu kitapçıktaki Perl, metin ve HTML örneklerini, PCWorld-Türkiye dergisinin Web Sitesinden, ......................................./cgiperl.zip dosyasını indirerek edinebilirsiniz. Bu dosyayı indirseniz bile, aşağıda vereceğimiz Perl örneklerini kendiniz yazmalısınız; Perl bilmenin bir şartı fonksiyonları tanımaksa, diğer şartı Perl’ün yazım kurallarını iyice öğrenmektir. CGI programı olarak herhangi bir dille yazdığınız uygun bir çalıştırılabilir dosya (dosya adı uzatması “.exe” veya “.com” olan bir Executable’ı) kullanabilirsiniz. Fakat bu kitapçıkta, aksini belirtmediğim taktirde CGI programı dediğim zaman bir Perl dosyasını kastediyorum. Bu kitapçıkta yeri geldikçe HTML konusunda da bilgiler bulacaksınız; bununla birlikte HTML’i bir dil olarak bildiğinizi varsayıyoruz. Bu konuda eksiğiniz varsa, Byte Dergisinin Ekim 1998’de verdiği Internet Tasarım Rehberi kitapçığına veya Internet’te bulabileceğiniz bir çok on-line HTML kurs malzemesine (örneğin Linklerin Görülmesine İzin Verilmiyor Linki Görebilmek İçin Üye Ol veya Giriş Yap) başvurabilirsiniz. Bir iki not Bu kitapçıkta “|” (Pipe, Bağlama) işaretini “veya” anlamına anlamına kullanıyorum. Örneğin “METHOD=[“POST” | “GET”]” ifadesi, “METHOT=” kelimesinin karşısına, tırnak işareti içinde, ya POST ya da GET yazmanız gerektiğini belirtiyor. Türkçe konusunda: Dosya adlarında, HTML’in TITLE etiketinde ve INPUT etiketinin NAME özelliğinde, Perl programlarında değişken adlarında, Türkçe, Fransızca, Flemenkçe, Vietnamca, yani içinde içinde non-ASCII karakter bulunan kelime kullanmak hatalıdır. Bunu sadece görünüm açısından değil, fakat özellikle değişken adlarının daha sonra bulunamaması, hata vermesi gibi durumları önlemek için yapmamak gerekir. Windows ve Unicode uyumlu işletim sistemlerinde veya kendisini Unicde uyumlu olmayıp da sonradan Türkçe sistem desteği kazandırılmış işletim sistemlerinde sorun olmayabilir; fakat cGI programlarınızın nerede, hangi Server’da ve hangi işletim sisteminde çalışacağını bilemezsiniz. Buna karşılık metin alanlarında Türkçe kullanmak, Browser’ı Türkçe-şifreleme konusunda yönlendiren komutları unutmamak şartıyla daima mümkündür. Bu ilkeye uygun olarak bu kitapçıkta sistemle ilgili yerlerde Türkçe kelimelerde Türkçe karakter kullanmaktan kaçındım. Bir çok konuda sık sık imdadıma yetişen Ahmet Usta ve Osman Hömek, bir çok bilimsel notasyonun Türkçesi konusundaki yardımlarını Perl konusunda da esirgemediler. Kendilene teşekkür borçluyum. Bu kitapçığı yazarken, hemen hemen sonuna geldiğim sırada, Selçuk Üniversitesi Teknik Eğitim Fakültesi Bilgisayar Sistemleri Öğretmenliği bölümünde öğretim görevlisi Sayın Adem Güneş’in Perl ve Perl ile CGI Programlama ders notlarının farkına vardım. Bu notları Linklerin Görülmesine İzin Verilmiyor Linki Görebilmek İçin Üye Ol veya Giriş Yap adresinde bulabilirsiniz. Bu kitapçığın ileri bir aşamasına gelmemiş olsaydım, Sn. Güneş’in ders notlarını gördükten sonra boşuna zahmet etmezdim! Bazı Türkçe kaynak tarama çabamı kolaylaştıran genç kuşak sayısal tasarımcı ve Web Yönetmeni arkadaşlarım K. Emre Güray ve Argıt Usuğ'a katkıları için teşekkür ederim. Bu kitapçığı, Erhan Mataracı’ya ve liselerinin Web sitesini kuran, yöneten ve Perl programını yazmak için kolları sıvayan diğer kardeşlerime armağan ediyorum. Ama sınıflarını geçmeleri şartıyla!
HTML-CGI İlişkisi CGI’a ilk adımımızı HTML’in FORM etiketine ilişkin bilgilerimizi atmak çok lyerinde olur. Çünkü Internet’te istemci ile sunucunun bilinçli şekilde etkileştikleri nokta CGI ise, ikisini bu noktada buluşturan ögeler, HTML’in Form ve Anchor (<A>) etiketleridir. Form etiketi bir formdaki <Input> değerlerini, <A> etiketi ise Browser’i CGI programına gönderir. HTML ile yazılmış ve görüntülenmek üzere Browser programlarına gönderilen metinler başlık ve gövde olmak üzere iki bölüme ayrılır. Başlık bölümü <HEAD>...</HEAD> etiketlerinin, gövde bölümü ise <BODY>...</BODY> etiketlerinin arasında kalır. Bir HTML belgesinin başlık bölümünde yer alan bilgilerin büyük bölümü Browser’da görüntülenmez; ancak Browser bu bölümdeki bilgilere bakarak, HTML belgesini tanır; bu belgeyi nasıl görüntüleyeceğini öğrenir. Gövde bölümünde ise ziyaretçinin Browser programının görüntülemesini istediğimiz verileri ve bunların nasıl görüntüleneceğine ilişkin kodlarımız yer alır. Bu kodların hemen hepsi, bizim, yani Web sayfası tasarımcısının ziyaretçimize göndermek istediğimiz veriler ve bunların görüntülenmesine ilişkindir; bizden ziyaretçiye, Sunucu’dan İstemci’ye doğru giden bilgilerdir. FORM ve onun içinde yer alan INPUT etiketleri ise, tersine işler: istemciden sunucuya, ziyaretçiden tasarımcıya veri taşır. HTML’in ilk sürümünde Form ve Input etiketleri yoktu; <ISINDEX> etiketi ile ziyaretçi sadece sitede arama yapabilirdi. Ancak hiç bir Browser (ki o zaman sadece Mosaic vardı!) tarafından tam uygulanmamış olan bu etiketin yerine HTML’in daha sonraki sürümlerinde istemcinin sunucuya daha çok bilgi gönderebilmesini sağlayan Form ve Input etiketleri geldi. CGI programlarımızı, yukarıdaki örnekte olduğu gibi adreslerini doğruca Browser’ın URL adres kutusuna yazarak da çağırabiliriz. Fakat CGI programlarını çalıştırmanın en yaygın yolu Form etiketidir. Bunu Form etiketinin ACTION özelliği (attribute) yapar. Hatırlarsanız, FORM etiketini şöyle yazarız: <FORM ACTION=”cgi-programı” METHOD=[“POST” | “GET”]>...</FORM> Burada Form etiketinin ACTION özelliğinin karşısına CGI programımızın adını, Örneğin, Perl programının dosya adının uzantısına göre, ACTION=”/cgi-bin/merhaba.pl” veya ACTION=”/cgi-bin/merhaba.cgi” yazarız. İstemcinin Form bilgilerini CGI programımıza hangi yöntemle ulaştıracağını belirleyen “Get” ve “Post” özelliklerinin farklarını birazdan ele alacağız. Şimdilik bunu atlayalım. Bu arada Form etiketinin başka özellikleri de vardır; bunlardan “Accept=” ile form bilgisini işleyecek olan Server’a, gönderilen verinin hangi dosya türüne girdiğini, “Enctype=” ile gönderilen verinin nasıl şifrelendiğini bildiririz. Form etiketinin içinde, onun eylemi (Action) ve yöntemi (Method) ile gönderilecek bilgileri derlemeye yarayan başka etiketler bulunur. Şimdi kısaca onları ele alalım: Bir Internet sitesi ziyaretçisinden Input etiketi aracılığıyla tam on ayrı tür bilgi alabiliriz. Input etiketi şöyle yazılır: <INPUT NAME=”Bu alanın adı” TYPE=[TEXT | PASSWORD | CHECKBOX | RADIO | SUBMIT | RESET | FILE | HIDDEN | IMAGE | BUTTON] VALUE=”Alfanümerik değer” SIZE=”girdi_kutusu_genişliği”> Input etiketinin kapanmadığını (yani </INPUT> şeklinde bir etiket olmadığını) ve girdi tipine göre daha başka özellikleri bulunabileceğini hatırlayalım. Input etiketi ile sunucuya, onun arıcılığıyla CGI’ya gelen bilgiye programcılık dilinde değişken denir. Değişkeni, sabit bir adı olan fakat içeriği değişebilen bir bilgi tutucu öge olarak düşünebilirsiniz; bir tür kap. Input’un oluşturduğu değişkenin adı, etiketin NAME (ad) özelliğinden alınır; yani Input’a ad verirken, daha sonra bu adla bir değişkeniniz olacağını düşünmelisiniz. Bu değişkenin değeri ise Ipnut’un türüne göre değişir. Örneğin, TEXT (metin) türü Input’un değeri, Browser’da oluşturacağı kutuya Internet ziyaretçimizin yazacağı kelimelerdir. Input etiketini yazarken VALUE (değer) özelliğini de yazmışsak, (ve ziyaretçinin bunu değiştirmesi olanağı yoksa), değişkenin değeri VALUE özelliğinin karşısına yazdığımız alfanümerik (rakam, harfler veya her ikisi birden) metindir. Bir Form’un içindeki bilgilerle, ziyaretçinin Browser’ından (istemci) kalkıp, bizim Web Server’ımıza ve oradan da CGI’a gelmesi için, genellikle ziyaretçinin ya klavyesinde Enter tuşuna basması ya da tipi Submit (Gönder) olan ve Browser tarafından düğme simgesiyle görüntülenen bir başka Input’u tıklaması gerekir. Fakat “gönder” düğmesi de bir Input olduğu için Form etiketi, içindeki bilgileri paketleyip gönderirken Submit’in (varsa) değerini de gönderir. Şimdi “paketleyip gönderme” olayı üzerinde duralım; çünkü hemen hemen tüm CGI kavramı, bu Internet ziyaretçimizden gelen bu “şey” üzerine kurulacak. CGI programlarımız ziyaretçiden “girdi” olmadan da çalışabilir. Nitekim yukarıda yazdığımız ilk Perl programı ziyaretçinin bir bilgi vermesini gerektirmiyordu. Fakat CGI programı, ziyaretçinin IP adresini, öğrenip, kendisine bildirilyordu. IP numarası, ziyaretçinin sadece bu CGI programını çalıştırmak üzere programın adını Browser’ının adres hanesine yazması ve Enter’a basması (veya yeni Browser’lardaki Go/git düğmesini tıklaması) ile Browser tarafından CGI’a gönderilmiş bir bilgidir. Bu yüzden CGI, ziyaretçi isteyerek ve bilerek Server’a bilgi göndermese de Server ziyaretçiden bilgi edinmesini ve bunu CGI programımıza vermesini bilir! Şimdi bu bilgilerin neler olduğunu görelim. CGI programına Server tarafından iki tür bilgi verilir: 1. Browser, Server ve kendisini hakkındaki bilgiler: Browser’ın türü, yetenekleri, Browser’ın Internet’e giriş noktası (Remote Host, kullanıcı açısından ISS), Server’ın türü, Internet’e bağlandığı geçit (Port), CGI programının adı, bulunduğu dizin, sahip olduğu değişkenler gibi bilgiler, CGI’a çevre değişkenleri (Enivonment Variables) kümesi olarak ulaştırılır (Bu değişkenlere bazı kaynaklarda Ortam Değişkenleri denildiğini görebilirsiniz.. 2. Kullanıcının (Internet ziyaretçisinin) girdiği bilgiler: Kullanıcı Browser penceresinde bir Form doldurmuş ise Form’daki değişkenler ve değerleri (Input etiketlerine verdiğimiz adın değişken adı, bizim verdiğimiz veya kullanıcının girdiği değerlerin de değişkenin değerini oluşturduğunu yukarıda görmüştük) de CGI programına aktarılır. Bu aktarma işlemi iki türlü yapılabilir. Form’un METHOD özelliği GET ise bu bilgiler yukarıda belirttiğimiz çevre değişkenlerine katılarak verilir; METHOD olarak POST kullanmışsak, bu bilgiler standart girdi (standart input veya Perl’ün ifadesiyle stdin) olarak gönderilir. CGI programcısı olarak yapacağımız işin özü, bu iki grup değişkeni alıp, içeriklerini kullanılır hale getirmek ve kullanmaktan ibarettir. Burada ifade ettiğimiz “almak,” “kullanılır hale getirmek” ve “kullanmak” ifadelerine dikkat edin: çünkü CGI programı ile sadece bu üç işi yapacağız. Dolayısıyla neyi alabileceğimi, nasıl alabileceğimizi öğrenerek işe başlamak zorundayız. Perl, bir programlama dili olarak bize bu üç işte kullanabileceğimiz komutları sağlar; fakat bu komutlarlı kullanarak hangi bilgi ile ne yapacağımızı bilmemiz gerekir. Çevre Değişkenleri Aşağıda bir liste göreceksiniz; bu listede bir CGI programının içinde bulunduğu çevrenin bütün önemli bilgileri yer alıyor. Ama şimdi bu listeye geçmeden, biz kendi bilgisayarımızdan kendi CGI çevremizin değişkenlerini ve değerlerini öğrenelim. Şimdi, açın en sevdiğiniz düzyazı programını ve başlayın yazmaya (Eğer illâ kelime iişlem programı kullanmaya kararlıysanız, metni düzyazı, salt metin, ASCII, ANSI veya “Text only” olarak kaydetmeyi unutmayın): print "HTTP/1.0 200 OK\n"; print "Content-Type: text/html\n\n";
print "<HTML>\n"; print "<HEAD>\n"; print "<TITLE>CGI Cevre Degiskenleri</TITLE>\n"; print "<meta http-equiv=\"content-type\" ***********\"text/html; charset=ISO-8859-9\">\n"; print "<meta http-equiv=\"Content-Type\" ***********\"text/html; charset=windows-1254\">\n"; print "</HEAD>\n"; print "<BODY>\n"; print "<P>\n"; print "<H1>CGI Çevre Değişkenleri ve Değerleri</H1>\n"; foreach $env_var (keys %ENV) { print "<B>$env_var</B> = $ENV{$env_var}<BR>\n"; }
print "</BODY>\n"; print "</HEAD>\n"; print "</HTML>\n";
Sonra bu metni örneğin cevre.pl (veya kişisel Web Server’ınızın “.pl” uzatması gibi “.cgi” uzatmasını da Perl dosyası saymasını sağladıysanız, cevre.cgi) adıyla, kişisel Server’ınızın kök dizinine (Windows ortamında muhtemelen c:\inetpub\wwwroot olmalı) kaydedin. Ve Browser’ınızın URL adresi hanesine Server’ınızın protokol ve yol adıyla birlikte bu dosyanın adını yazın (örneğin: Linklerin Görülmesine İzin Verilmiyor Linki Görebilmek İçin Üye Ol veya Giriş Yap), klavyede Enter’a basın. <cgi-perl007.tif> İşte sizin kişisel Web Server’ınızın cevre.pl veya cevre.cgi programına sağladığı ortam! Bütün değişkenlerinizi ve değerlerini görüyorsunuz. Muhtemelen kendi bilgisayarınızın burada görüntülenen bir çok özelliğini tanıdınız: Autoexec.bat dosyasındaki Path satırının değerini, bilgisayarınızın ve dolayısıyla kişisel Server’ınızın adını, hatta bu programı Windows ortamında çalıştırdıysanız, Windows’un sürümünü bile görüyorsunuz. CGI, bunları nereden biliyor? Kişisel Web Server’ınız ona bildirdiği için. Kişisel Web Server bunu CGI nasıl bildiriyor? Çevre Değişkenleri kümesi ile. //////////////////KUTU///////////////// “Shebang” nereye gitti! Kim nereye gitti? Madem ki Perl öğreniyoruz, öğleyse yılların Unixçisi gibi konuşmaya da alışmamız gerek: # ve ! işaretleri Unix işletim sistemine, aşağıdaki Script’i (betik’i) Perl yorumlayıcısı ile yorumlamasını ve bu yorumlayıcının nerede bulunduğunu bildirir. “Shebang” [şi-beng] denmesinin sebebi de müzikte kullanılan diyez (#) işaretinin “Sharp,” ünlem (!) işaretinin de “bang” diye okunmasından kaynaklanır; ikisine birarada shebang denir. Bu komut satırı genellikle şöşle yazılır: #!/usr/local/bin/perl Bununla Unix işletim sistemine Perl yorumlayıcısının kök dizinde, usr klasöründe, local alt-klasöründeki bin alt-alt klasöründe olduğunu belirtmiş oluruz. Windows ortamında buna gerek yok; çünkü kişisel Web Server’ımızı kurduktan sonra Registry kayıtlarında Browser’lara ve diğer ilgili programlara Perl konusunda kimden nasıl yardım isteyecekleri gösteren değişlikler yapmıştık. Bununla birlikte, yazacağınız Perl programları kendi bilgisayarınızda ve Windows işletim sisteminde değil, büyük bir ihtimalle Web sitenize evsahipliği yapan firmanın bilgisayarında ve Unix sisteminde çalışacak. Dolayısıyla CGI programlarınızda Shebang’e ve Perl’ün yerini belirten ilk satıra ihtiyacınız olacak. Bundan böyle, kendi bilgisayarımızda ihtiyaç olmasa da elimizi alıştırmak için örnek kodlarımızda Shebang’e yer vereceğiz. Bunun Windows ortamında hiç bir zararı olmaz. Server’a gönderdiğiniz CGI programlarınız işlemezse, önce birinci satırda Shebang bulunup bulunmadığına ve yazdığınız yolun doğru olup olmadığına bakın. Perl yorumlayıcısının nerede bulunduğunu Server operatörüne sorabilirsiniz. ////////////////////////////////////////////////////KUTU BİTTİ///////// Kendi bilgisayarımızda CGI’ın çalıştığı çevrenin bu kadar çok değişkeni ve değeri olmasına rağmen, normal durumlarda CGI programlarımızda bu değişkenlerin tümünü kullanmayız. CGI programlama açısından önemli çevre değişkenleri ve değerleri şöyle sıralanır: ÇEVRE DEĞİŞKENİ ANLAMI REMOTE_ADDR İstemci bilgisayarın IP adresi REMOTE_HOST İstemcinin bilgisayarının adı (Muhtemelen yine istemcinin IP’si) HTTP_ACCEPT Browser’ın tanıyabileceği MIME türleri HTTP_USER_AGENT Browser hakkında bilgi (adı, sürümü işletim sistemi, vs.) HTTP_REFERER Browser’ın bizim sitemize gelmeden önce görüntülediği son URL (Burada “referer” referansta bulunan, köprü veren, gönderen anlamına gelmekle birlikte, sitemizi ziyaret eden kullanıcının sizim sitemize geçtiği son sitede bizim sayfamıza bir köprü bulunduğu anlamı çıkmaz; ziyaretçi bizim adresimizi URL adres kutusuna kendisi yazsa bile, HTTP_REFERER değişkeninin değeri olarak son URL kaydedilir.) REQUEST_METHOD GET veya POST CONTENT_LENGTH POST yoluyla gönderilmiş bilginin boyutu (büyüklüğü). GET yöntemi kullanıldığında veya istemci bilgi göndermediğinde tanımlanmamış sayılır) QUERY_STRING İstemcinin GET yoluyla gönderdiği bütün bilgilerden yapılmış bilgi yumağı (String) PATH_INFO CGI programının çalıştırıldığı dizine göre (göreli) Path (arama yolu) bilgisi. PATH_TRANSLATED Göreli arama yolunun gerçek disk ve dizin adlarıyla ifadesi Şimdi bu listeye göre kendi kişisel Web Server’ınızın verdiği bilgileri yorumlayabilirsiniz; fakat çok sık kullanacağımız iki değişkenin, CONTENT_LENGTH ve QUERY_STRING değişkenlerinin tanımlanmamış ve boş olduğunu görüyor olmalısınız. Yöntem Farkı: GET ve POST CONTENT_LENGTH ve QUERY_STRING değişkenlerinin doğrudan bizim Form etiketimizin METHOD özelliğine bağlı olduğunu farkettiniz mi? METHOD olarak GET veya POST kullanabiliriz. Bu, bizim ziyaretçimizden nasıl ve ne boyutta bilgi alacağımızı ve bilginin CGI programına nasıl aktarılacağını belirler. Form’un oluşturduğu ve sizin GET yöntemi ile aldığınız bilgiler, çevre değişkenlerinden QUERY_STRING değişkeninin içine yazılır. Başka bir ifade ile Form’daki bütün değişkenlerin adları ve bu değişkenin içerdiği değer yumak yapılır (bu yumağın niteliğine ve nasıl çözeceğimize geleceğiz!) ve Server’da QUERY_STRING değişkeninin değeri olarak yazılır. Daha sonra belirteceğiz, ama şimdiden bir kenara yazın: Form’un gönderdiği değişkenler ve değerleri artık düz metin haline gelmiştir; bundan yeniden program yoluyla kullanılabilir değişkenler üretmek ve bu değişkenlere ziyaretçiden gelen değerleri atamak bizim işimiz olacak (ve galiba Perl ile CGI progralamanın da en can alıcı noktasını oluşturacak!). Form’un bilgilerini POST yoluyla almış olsaydık bunlar CGI programı için standart girdi (stdin) olarak gelecekti. Bu iki yöntem arasındaki başlıca fark (ve herkesin POST yöntemini tercih etmesinin sebebi) stdin’in bilgi tutma kapasitesinin sınırsız olmasından ibarettir. QUERY_STRING değişkeni, Server’a, ve bu programın ayarlarına göre sınırlı boyutta bilgi tutabilir. Formlarınızda çok alan (yani çok değişken ve çok değer) varsa, mutlaka POST yöntemini kullanmalısınız. Aksi taktirde, bu bilgilerin QUERY_STRING değişkeninin bilgi tutma kapasitesini aşan bölümü, Server tarafından silinir, CGI programına aktarılmaz. Çevre değişkenlerimizden REQUEST_METHOD, Form’dan bilgilerin hangi yöntemle geldiğini gösterdiğinize göre, CGI programımızı yazarken, önce bu değişkenin içeriğini kontrol edebiliriz; bu GET ise, demek ki Formun bilgileri QUERY_STRING değişkeninin içinde paket halinde duruyor. REQUEST_METHOD değişkenin değeri POST ise, ziyaretçimizin Formumuza yazdığı bilgiler, stdin olarak gelmiş ve stdin’in o andaki boyutunu gösteren bilgi de CONTENT_LENGTH değişkenine işlenmiş demektir. Bunları tekrar ediyoruz; çünkü birazdan bu bilgilerin tümününden, Form bilgilerini kullanılır hale getirirken yararlanacağız. Bilgi Yumağı Peki, bu kadar teori yeter; şimdi bir deney daha yapalım. Hem Form bilgimizi tazeleyelim, hem de Form’dan gelen bilginin nasıl yumaklandığını görelim. Açın Not Defterini veya onsuz olamadığınız düz yazı programını ve başlayın yazmaya: <HTML> <HEAD> <TITLE>FORM ORNEGI</TITLE> <meta http-equiv="content-type" ***********"text/html; charset=ISO-8859-9"> <meta http-equiv="Content-Type" ***********"text/html; charset=windows-1254"> </HEAD> <BODY> <FORM ACTION="isim-yas.pl" METHOD=POST> Adınız: <INPUT TYPE=text NAME="isim"><p> Yaşınız: <INPUT TYPE=text NAME="yas"><p> <INPUT TYPE=submit VALUE="Gönder"> </FORM> </BODY> </HEAD> </HTML>
Bitirince, bu belgeyi isim-yas.htm adıyla kaydedin, fakat kapatmayın; Form etiketinin her iki özelliğini silin; etiket tek başına (<FORM>) kalsın. Bu dosyayı yeniden fakat adını değiştirerek, örneğin isim-yas-gecici.htm adıyla, kaydedin. Tamam mı? Şimdi ikinci kaydettiğiniz geçici HTML dosyasını Browser’ınızda açın. Adınızı ve yaşınızı yazın; Gönder düğmesini tıklayın ve Browser’ınızın Adtres hanesine bakın: <cgi-perl008.tif> Burada şuna benzer bilgi yumağını görüyor olmalısınız: “isim=Mustafa+Durcan&yas=23” Bu, Form’daki değişkenlerin (“isim” ve yas”), Formu dolduran kişi tarafından verilen değerlerle birlikte Server’a, oradan da CGI programına sunuluş biçimidir. Browser, bir Form’un Input’larının adları ile bu alana yazılan değerleri, bir String (bağ) haline getirir; ve Server’a gönderir. Bu String’in oluşturulmasında şu kuralların izlenmiş olduğuna dikkat edin: 1. Değişken adları kendilerine ait değerle eşittir (=) işaretiyle birleştiriliyor; 2. “değişken=değer” çiftleri “ve” anlamına gelen Ampersand (&) işaretiyle birbirine ekleniyor; 3. Değerin içinde boşluk varsa yerine artı (+) işareti konuyor. Bu işleme “URL Encoding” sistemi denir; buradaki örnekte görülmemekle birlikte, standart ASCII karakterler dışındaki harfler ve işaretler yüzde (%) işareti ve heksadesimal (16 tabanlı) kodlara çevrilir. ////////////////////////KUTU///////////////////// Hexadecimal Türkçe! URL Encoding şemasında, Türkçe karakterlerin kodları şöyledir: ğ: F0 Ğ: D0 ı: FD İ: DD ü: FC Ü: DC ş: FE Ş: DE ö: F6 Ö: D6 ç: E7 Ç: C7 (URL Encoding şemasına göre, yüzde işareti “%25”, Ve (&) işareti “%26” ve çiftçatal (#) işareti ise “%23” olarak şifrelenir.) ///////////////////KUTU BİTTİ//////////////// Bu deneyi yapmakla, Browser’ın Form’daki bilgileri Server’a nasıl gönderdiğini görmüş olduk. Şimdi bu bilgi yumağını açan bir CGI programı yazalım. Bu sizin ilk form işleme programınız olacak! Evet, Not Defteri gibi bir programı açarak, yazmaya başlıyoruz: #!/usr/local/bin/perl # isim-yas.pl require 'cgi-lib.pl'
&ReadParse(*girdi); print "Content-Type: text/html\r\n\r\n"; print "<HTML>\n"; print "<HEAD>\n"; print "<TITLE>ISIM-YAS</TITLE>\n"; print "<meta http-equiv=\"content-type\" ***********\"text/html; charset=ISO-8859-9\">\n"; print "<meta http-equiv=\"Content-Type\" ***********\"text/html; charset=windows-1254\">\n"; print "</HEAD>\n"; print "<BODY>\n"; print "<P>\n"; print "Merhaba, " . $girdi{'isim'} . ". Sen\n"; print $girdi{'yas'} . " yaşındasın.<p>\n"; print "</BODY>\n"; print "</HEAD>\n"; print "</HTML>\n";
Yazmayı bitirince bu kodu “isim-yas.pl” adıyla kaydetmek zorundasınız. Neden? Çünkü bu programı çağıracak veya çalıştıracak olan bir önceki HTML kodunda Form etiketinde ACTION hanesine bu adı verdik. “isim-yas.htm” sayfasında Form’u dolduran kişi Gönder düğmesini tıkladığı anda, Browser Server’a, “Sizin oralarda ‘isim-yas.pl’ adında bir CGI programı olacak.. Şu yumak yaptığım bilgileri ona verir misin, lütfen?” diyecek; Server, bu isimli CGI programını arayacak; bulamazsa Browser’a hata mesajı gönderecek; bulursa CGI programına “Al bakalım, sana bir yumak bilgi geldi; ne yapacaksan, yap!” diyerek, ziyaretçinin gönderdiği bilgileri devredecektir. Dıolayısıyla Form’un ACTION hanesine adını yazdığımız CGI programının belirtilen yerde olmasını sağlamak Web Tasarımcısı olarak bizim görevimiz. (CGI programcıları Perl programı yazarken, kodun başına dosyanın kendi adını da yazarlar. Burada gördüğünüz örnekte Shebang’inin hemen altındaki “# isim-yas.pl” satırı, programcının kendisi ve daha sonra bu kodu irdeleyecek veya kullanacak kişiler için aldığı bir güvenlik önlemidir.) Biz de birazdan kodumuzu irdeleyeceğiz; ama önce “isim-yas.htm” sayfasını Browser’ınızda açın; Form’u doldurup, gönder düğmesini tıklayın; şuna benzer bir karşılık almış olmalısınız: <cgi-perl009.tif> Yumağı açalım Yukarıda, CGI programlarıının yaptığı işleri kavramsal olarak belirtirken, “bilgi yumağını açma” işinin Perl programının aslî görevlerinden biri olduğunu kaydetmiştik. Yazdığımız Perl programı bunu yaparak, kendisine String halinde gelen (örneğin: “isim=Mustafa+Durcan&yas=23”) bilgiyi kullanılabilir hale getiriyor. String halindeki verinin kullanılır hale getirilmesine Parsing (dilbilgisi bilimindebir cümleyi gramer bakımından incelemek anlamına gelir) denir. Form’dan gelen ve adeta birbirine girmiş ve hatta şifrelenmiş olan değerlerin açılması, eşittir (=) işaretinin solundaki kelime, rakam veya işaretin değişken adı, sağındakilerin değişkenin değeri haline getirilmesi gerekir. Bu arada artı (+) işaretinin yerine boşluk konması, önünde yüzde işareti bulunan iki karakterin URL Encoding şemasına göre harfe veya işarete çevrilmesi şarttır. Aksi taktirde değerlerimizi kullanamayız. (“Sizin adınız Hakk%FD+%D6cal’dır” diye bir karşılık verdiğimizi düşünebiliyor musunuz?) Fakat biz Web amaçlı CGI programcıları bu bakımdan şanslıyız; çünkü ciddî programcılık amacıyla Perl öğrenmiş Steven K. Brenner gibi uzmanlar, oturmuş bir CGI programına GET veya POST yöntemiyle gelebilecek verileri inceleyip, değişken=değer çiftlerini ortaya tıkartan ve bunu Perl’e dizi değişken olarak öğreten program parçacıkları yazmışlar. Bizim bütün yapacağımız, Perl Kitaplığı (Library) adı verilen bu program parçacıklarını kendi Perl programımızda kullanılır hale getirmektir. Böyle, dışarıdaki bir Perl programını kendi programımızın içinde kullanmak istersek, kendi programımızın başında Perl yorumlayıcısına (örneğin perl.exe) bizim programı icra etmeye başlamadan önce dışarıdaki bu kitaplığı alıp, çalıştırmasını bildirmemiz gerekir. Buradaki örneğimizde bunu, “require 'cgi-lib.pl'” satırı ile yapıyoruz. Bu satırdaki require komutu, bizim bilgisayarımızdaki perl.exe’ye veya Server’ın bulunduğu bilgisayardaki Perl yorumlayıcısına işe başlamadan önce “cgi-lib.pl” adındaki Perl programını çalıştırmasını bildiriyor. “cgi-lib.pl” programını Steven K. Brenner 1995’te yazarak Prel programcılarına armağan etmiş bulunuyor. (Bu programı, bu kitapçığın örnek dosyaları arasında bulabilirsiniz.) “cgi-lib.pl” programında bir kaç fonskiyon tanımlanmış bulunuyor. Perl’ün defalarca yapması gereken işleri, bu işin yapılması için gerekli bilgi kümesi ve komutlarla birlikte bir grup haline getirir ve bu gruba bir isim verirsek ortaya bir fonksiyon çıkartmış oluruz. Sözgelimi, Perl’e “Filanca yerdeki şu String’i al; içindeki filanca işareti bul; eğer bu işaret şuna eşitse, önündeki grubu dizi değişken adı yap...” diye bir dizi komut verebilirdik. Fakat bu hem yorucu olurdu; hem de hata yapma olasılığımızı arttırmaya yarardı. Oysa, “cgi-lib.pl” programında Parsing işlemi için geliştirilmiş fonksiyonlar var. Biz bu fonksiyonların yaptığı iş kümesine ihtiyaç duyduğumuz yerde kendi yazdığımız Perl programına “Steven’ın programındaki filanca fonksilonu al, ne emrediyorsa yap, sonucu da gel bana bildir!” dersek, işlerimiz daha kolay hale gelmiş olur. İşte bu tür, bir isim altında toplanmış işlem paketlerine Function (işlev) adı verilir; Perl diğer bütün programlar gibi kendisine “Şu fonksiyonu yap!” dediğiniz noktada yapmakta olduğu işi durdurur ve fonksiyon paketindeki işleri yapar; bu paket ortaya bir değişken veya sonuç çıkartıyorsa, o bilgiyi edinmiş olarak yarım bıraktığı işleme geri döner. Fonksiyon yazmamızdaki veya hazır fonksiyonları kullanmamızdaki birinci sebep, Perl’e, Fonksiyon’un sağlayacağı bilgiyi kazandırmaktır. Perl’ün yukarıdaki örneklerde kullandığımız bazı komutları, örneğin “print” komutu aslında Fonksiyon diye adlandırılır; eğer biz bir fonksiyon yazıyorsak, buna subrutin (subroutine) denir. Daha sonra subrutin yazmayı göreceğiz; şimdi sadece Steven’ın (veya kendi Perl’ümüze eklediğimiz herhangi bir haricî kitaplık dosyalarındaki) subrutinlerine nasıl atıf yaptığımıza dikkat edelim. “cgi-lib.pl” programında tanımlanmış olan “ReadParse” subrutin’i, GET veya POST yoluyla alınmış veriyi okur ve bunları—türünü ve niteliğini daha sonra göreceğimiz—dizi değişkenlerin (array) içine yazar. Perl işine iyice ısındığımıza göre, bu dilin kendi argosunu öğrenebilmek için belirtelim: Perl’de buradaki gibi dışarıdan aldığımız “değişken=değer” çiftlerine “anahtar/değer” denir; “değişken” adı Perl’ün kendi içinde oluşturduğu veri tutma alanları için kullanılır. Perl programcılık çevrelerinde bir çok kitaplık-program bulabilirsiniz; cgi-lib.pl’nin en çok kullanılan kitaplık olmasının sebebi, anahtar/değer dizisinin yazılacağı değişkenin adını bizim verebilmemizdir. cgi-lib.pl’in GET veya POST verisini okuyan ve irderelen subrutininin adı ReadParse’dır; dolayısıyla bu subrutine biz &ReadParse şeklinde göndermede bulunuruz. Bu gönderme “&ReadParse(*girdi);” şeklinde yapılır. Bu komutla, cgi-lib.pl programına “Benim GET veya POST verilerimi okuyur, anahtar/değer çiftlerini bul; bunları ‘girdi’ isimli dizi değişkenin içine yaz!” demiş oluyoruz. Form’un bulunduğu HTML sayfasını tasarlayan biz olduğumuza göre, Input etiketlerimizin adlarını (yani CGI’da anahtar/değer çiftinde anahtar olacak kelimeleri biliyoruz. (Buradaki örnekte, “isim” ve “yas”.) Eğer “isim” adlı anahtarın değerini bilmek istiyorsam, bütün yapacağım şey, ‘girdi’ dizi-değişkeninin “isim” ve “yas” adlı anahtarlarının değerlerini sorgulamaktan ibaret. Bunu “$girdi{'isim'} “ ve “$girdi{'yas'}” ifadeleriyle yapıyoruz. Fakat henüz Perl’ün yapı taşları olan değişkenleri tanımadığımız için, bunun üzerinde durmuyoruz. O da ilerde! //////////////////////////////KUTU/////////////////////////////////
|
|
|
|
|
Logged
|
Etiketler:
Cgi - Perl Kullanımı ,
Cgi - Perl Kullanımı indir ,
Cgi - Perl Kullanımı download ,
Cgi - Perl Kullanımı yükle ,
Cgi - Perl Kullanımı şarkı sözü ,
Cgi - Perl Kullanımı program ,
Cgi - Perl Kullanımı yeni ,
Cgi - Perl Kullanımı msn ,
Cgi - Perl Kullanımı ifadeleri ,
Cgi - Perl Kullanımı mp3 ,
Cgi - Perl Kullanımı sözleri ,
Cgi - Perl Kullanımı resimleri ,
Cgi - Perl Kullanımı resim ,
Cgi - Perl Kullanımı videosu ,
Cgi - Perl Kullanımı kaydet ,
Cgi - Perl Kullanımı bedava ,
Cgi - Perl Kullanımı fotoğrafları ,
Cgi - Perl Kullanımı albümü ,
Cgi - Perl Kullanımı full ,
Cgi - Perl Kullanımı videoları ,
Cgi - Perl Kullanımı video ,
Cgi - Perl Kullanımı free ,
Cgi - Perl Kullanımı forum
İnsanlar söylediklerinizi ya da yaptıklarınızı unutur, ama onlara neler hissettirdiklerinizi asla unutmazlar.
|
|
|