CGI
 

Bölüm 1: Başlangıç

Programlama dili olarak Perl'ü seçtik, çünkü basit bir dil, kolay öğreniliyor ve karmaşık problemleri halledebilecek kadar da güçlü. Ayrıca hem ücretsiz hem de bulunması çok kolay. Zaten çok büyük bir ihtimalle UNIX server'ınızda ya da NT makinenizde kuruludur. Yine de download etmeniz gerekiyorsa www.perl.com'u ziyaret ediniz. Perl ile yazdığınız scriptleri derlemenize gerek yoktur. Scriplerinizi yazar ve çalıştırırsınız (Daha doğrusu web server'ınız çalıştırır). Script kendi başına sadece text kodudur. Aslında bütün işi web server'ınızda kurulu olan Perl yorumlayıcısı yapar. Bunun size sağladığı avantaj yazdığınız scriptleri ya hiçbir değişiklik yapmadan ya da çok küçük bir iki değişiklikle istediğiniz servera kopyalayabilecek olmanız. Dezavantajı ise scripti çalıştırmadan hatalı olup olmadığını anlayamamanız.

Perl scriptlerinizi kendi bilgisayarınızda istediğiniz text editörü ile (Notepad, SimpleText vb.) ya da UNIX'te yazabilirsiniz. UNIX kullanıyorsanız pico'yu deneyin. Basit ve kullanımı kolay bir text editörü. UNIX komut satırında pico <dosya adı> yazarak yeni bir dosya ya da varolan bir dosyayı açabilirsiniz. Pico ile ilgili daha fazla bilgi almak için man pico yazınız.

Scriptlerinizi kendi makinenizde yazıp FTP ile gönderecekseniz dikkat etmeniz gereken husus binary değil ASCII olarak göndermek. CuteFTP kullanıyorsanız sorun yok. Ama WS FTP programı Perl dosyaları için genelde ASCII değil binary kullanıyor.

Scriptlerinizi server'ınızda CGI scriptlerini çalıştırabileceğiniz dizine (public_html ya da /home/httpd/cgi-bin olabilir) upload etmelisiniz. Başka bir dizine upload etmişseniz daha sonra da taşıma işlemini yapabilirsiniz. UNIX'te taşıma işlemini şu komutla yapabilirsiniz:

    mv <taşınacak dosya> <taşınacağı dizin>       (Daha fazla bilgi için man mv)

Scriptinizi gerekli dizine taşıdıktan sonra bu dosyayı "çalıştırılabilir" hale getirmeniz gerekir. Bunun için kullanmanız gereken komut:

    chmod 755 <dosya adı>

Bu komut dosyanın sizin tarafınızdan okunabilir, yazılabilir ve çalıştırılabilir, diğer bütün kullanıcılar tarafından da okunabilir ve çalıştırılabilir hale getirilmesini sağlar.

Aynı işi çoğu FTP programı ile yapabilirsiniz. Fakat dikkat etmeniz gereken kısım bütün kullanıcılara okuma ve çalıştırma hakkı vermek ve tabi ki sadece kendinize yazma hakkı vermek.

Son bir not: UNIX ve Perl'de büyük küçük harf ayrımı vardır. Yani UNIX'te "perl" ile "PERL" aynı şey değildir. Bu yüzden Caps Lock tuşunuza dikkat edin :)

Perl Scriptinin Temelleri

Bir HTML dosyasının yapısında <head> ve <body> etiketlerinin mutlaka bulunması gerektiği gibi bir Perl scriptinin ilk satırında

    #!/usr/bin/perl

satırının mutlaka bulunması gerekir. Bu satır server'a bu dosyanın bir Perl scripti olduğunu ve Perl'ün nerede olduğunu söyler. Bu satır sisteminizde Perl'ün nerede olduğuna bağlı olarak değişebilir. Bunu öğrenmenin en emin yolu which perl ya da whereis perl komutunu kullanmaktır. Perl sisteminizde kurulu ise Perl'ün hangi dizinde olduğu yazacaktır.

Server'a Perl'ün yerini tanıttıktan sonra Perl kodlarınızı yazabilirsiniz. Hatırlamanız gereken önemli bir konu Perl'de büyük küçük harf ayrımının olduğu. Yani Perl için "x" ile "X" aynı şeyler değildir. Ayrıca çoğu Perl kodunun sonunda noktalı virgül (;) kullanmalısınız (Bazı döngü ve özel yapılar hariç).

Şimdi birlikte ilk scriptimizi yazalım. Yeni bir dosya oluşturun ve şunları yazın. (Daha iyi aklınızda kalması açısından Kopyala - Yapıştır yöntemini kullanmamanızı tavsiye ederim.)

    #!/usr/bin/perl
    print "Merhaba\n;"

Bu dosyayı "ilkscript.pl" adıyla kaydedin ve UNIX komut satırında şunu yazın:

    chmod 755 ilkscript.pl

Bu komut dosyanın erişim yetkilerini değiştirerek onu çalıştırılabileceğiniz hale getirir. Bunu her yeni script yazışınızda yapmanız gerekir. Fakat varolan bir dosya üzerinde değişiklik yaptığınız zaman bu komutu vermenize gerek yoktur.

Şimdi, yazdığınız scripti çalıştırmanız için vermeniz gereken komut:

    ./ilkscript.pl

Eğer herşey yolunda gitmişse ekranda "Merhaba" yazması gerekir.

 Olmadı mı?

Eğer scriptiniz çalışmazsa şunları kontrol edin:

1. Scriptinizi ASCII olarak upload ettiniz mi?

2. Scriptinizin ilk satırı #!/usr/bin/perl mü?

3. Perl'ün yeri gerçekten #!/usr/bin/perl mü yoksa başka bir dizinde mi? Perl'ün nerede olduğunu which perl ya da whereis perl yazarak bulabilirsiniz.

CGI Scriptinin Temelleri

CGI programları aynı zamanda birer Perl scriptidir. Fakat aralarındaki önemli bir fark CGI programlarının genelde bir web sayfası üretmesidir. Örneğin bir form gönderildikten sonra mesajın gönderildiğine dair yeni bir sayfa açılır. Eğer yazdığınız script bir HTML sayfası oluşturacaksa herhangi bir yazı yazdırmadan önce

    print "Content-type:text/html\n\n";

satırını mutlaka yazmalısınız. Unutulması ihtimaline karşı en başa yazılması daha iyi olur (#!/usr/bin/perl satırından sonra tabi).

Bu satır web browser'ınıza kendisine gönderilecek bilginin bir HTML sayfası olduğunu söyler. Eğer bu satırı yazmayı unutursanız ya da bu satırdan önce başka birşey yazdırırsanız browser <Internal Server Error> (Dahili Server Hatası) verir.

Şimdi yaptığımız Perl scriptini biraz değiştirelim ve web sayfası gösteren bir CGI scriptine çevirelim.

Önce dosyanın uzantısını .cgi olarak değiştirelim. UNIX'te bunu

    mv ilkscript.pl ilkcgi.cgi

komutunu vererek yapabilirsiniz. Daha sonra bu dosyanın içeriğini şu şekilde değiştirin:

    #!/usr/bin/perl

    print "Content-type:text/html\n\n";

    print "<html><head><title>Deneme Sayfası</title></head>\n";
    print "<body>\n";
    print "<h2>Merhaba</h2>\n";
    print "</body></html>\n";

Denemek için tıklayın

Eğer scriptinizdeki değişiklikleri UNIX üzerinde yapmışsanız erişim yetkilerini tekrar düzenlemenize gerek yoktur. Ama kendi bilgisayarınızda yazıp upload etmişseniz chmod 755 ilkcgi.cgi komutunu verip erişim yetkilerini değiştirin ve ./ilkcgi.cgi komutu ile scriptinizi çalıştırın. Ekrana HTML kodları gelecektir. AMA eğer yazdığınız kodlarda bir hata varsa o zaman ekranda hatanın kaçıncı satırda olduğu yazar. Bu da özellikle uzun ve karmaşık scriptler yazarken olası hatayı düzeltmemizde bize oldukça kolaylık sağlar.

Şimdi de browser'ınızın adres satırına tam adresini yazarak scriptinizi çağırın. Browser'ınızda "Merhaba" yazdığını göreceksiniz.

Olmadı mı?

Scriptinizin çalışmamasının nedeni şunlar olabilir:

1. Eğer karşınıza "Merhaba" yerine Perl kodları çıkmışsa scriptin uzantısını .cgi olatak değiştirmemiş olabilirsiniz. Ya da scriptin bulunduğu dizin CGI programlarını çalıştıracak şekilde ayarlanmamıştır (CGI scriptlerinizi hangi dizinde çalıştırabileceğinizi server'ınızın yöneticisine sormalısınız).

2. Browser'ınız "Internal Server Error" hatası veriyorsa scriptinizi ./ilkcgi.cgi komutu ile çalıştırın. Ekranda hatanın nerede olduğu yazacaktır.

Yukarıdaki scripti şu şekilde yazarsak her satırda print yazmaktan kurtuluruz:

    #!/usr/bin/perl

    print "Content-type:text/html\n\n";

    print <<HTMLSonu;
    <html><head><title>Deneme Sayfası</title></head>
    <body>
    <h2>Merhaba</h2>
    </body></html>

    HTMLSonu
    ;

Denemek için tıklayın

print <<HTMLSonu; satırında << ile HtmlSonu arasında boşluk olmadığına dikkat edin.

Bu sayfada Perl kodları, daha anlaşılır olması açısından satır girintileri kullanarak yazılmıştır. Perl kodlarını yazarken mutlaka ilk sütundan başlayarak yazılmalıdır. Özellikle HTMLSonu satırından önce kesinlikle boşluk bırakılmamalıdır. Eğer bırakılırsa scriptiniz çalışmaz.

HTML kodlarını bu yöntemle yazdırırsak aşağıdaki örnekte olduğu gibi print komutunu kullanırken iç içe çift tırnak (") karakteri kullanmak zorunda olduğumuz zaman çift tırnaktan önce ters bölü (\) karakteri yazmak zorunda kalmayız.

    print "<a href=\"http://cc.sau.edu.tr/\">"

print komutunda iç içe tırnak karakterleri kullanmak için yukarıdaki gibi çift tırnaktan önce ters bölü karakterini yazmak zorundayız.


 

Bölüm 2: Perl Değişkenleri

Perl'de işe yarar programlar yazabilmek için Perl değişkenlerini tanımamız gerekir. Değişken demek, değerleri saklayacağımız yer demektir. Değişkene değer atadıktan sonra program boyunca bu değeri geri çağırabilir, kullanabilir ve değiştirebiliriz. Perl'de 3 çeşit değişken mevcuttur: Scalar, Array ve Hash değişkenler.

Scalar Değişkenler

Scalar değişkenlere tek bir değer atanır. Bu değer bir sayı, bir cümle ya da başka bir scalar değişken olabilir. Scalar değişkenlerin adlarının başında $ işareti bulunur. Örneğin $x, $y, $z, $adres, $kullanici birer scalar değişken adıdır. Scalar değişkenlere değer atama işlemi de aşağıdaki örneklerde görüldüğü gibi yapılır.

    $sayi = 1;
    $isim = "Sinan";
    $pi = 3.141592;

Değişkenleri kullanmadan önce tanımlamanıza gerek yoktur. Ayrıca Perl değişkenleri program içinde tip de değiştirebilir. İşte bir örnek:

    $sihir = 23;
    $sihir = "Sihirli sayımız $sihir";

Bazı programlama dillerinin tersine Perl bu durumu kabul eder ve bir hata mesajı vermez.

Şimdi ilkscript.pl isimli scripti biraz değiştirelim ve birkaç değişken ekleyelim:

    #!/usr/bin/perl
    $kursadi = "CGI Programlama";
    print "Merhaba. Adın ne?\n";
    $siz = <STDIN>;
    chomp($siz);
    print "Merhaba $siz. $kursadi kursuna hoş geldiniz.\n";

Scripti kaydedin ve UNIX'te çalıştırın. Program size isminizi soracak ve birşeyler yazıp enter'a basmanızı bekleyecektir. Bu işlem

    $siz = <STDIN>;

satırı dolayısıyla gerçekleşir. Yazdığınız yazı $siz değişkenine atanır. Yazdığınız yazının sonundaki enter tuşunu simgeleyen "Carriage Return" karakteri aşağıdaki komut satırı ile silinir.

    chomp($siz);

Aşağıdaki satır işletildiğinde değişkenlerin yerine atandığı değerler ekranınızda görünür. En sondaki \n Per'de "Carriage Return" işaretini temsil eder. Yani programa, yazıyı yazdıktan sonra enter'a basmasını söyler.

    print "Merhaba $siz. $kursadi kursuna hoş geldiniz.\n";

Array Değişkenler

Array'ın Türkçe karşılığı "Dizi"dir. Array değişkenler için değerler listesi diyebiliriz. Scalar değişkenler tek bir değer içermesine karşın array değişkenler birden fazla değer içerirler. Array değişken adlarının başında at işareti (@) bulunur. İşte bir örnek:

    @renkler = ("sari","kirmizi","yesil");
Perl'de dizi indisleri 0'dan başlar. Yani @renkler dizisinin ilk elemanını $renkler[0] verir. @renkler dizisinin tek bir elemanının değerini göstereceği zaman @ işareti yerine $ işareti kullanılır. $ işareti tek bir değeri, @ işareti ise bütün diziyi kastettiğimiz anlamına gelir.

Bir dizinin tüm elemanları şu şekilde yazdırılabilir:

    #!/usr/bin/perl

    # bu bir açıklamadır.
    # diyez (#) işareti ile başlayan bütün satırlar açıklamadır.

    @renkler = ("sari","kirmizi","yesil");

    print "$renkler[0]\n";
    print "$renkler[1]\n";
    print "$renkler[2]\n";

Fakat elbette ki bunu yapmanın daha kolay bir yolu var. foreach yapısı kullanılarak dizileri rahatlıkla yazdırabiliriz.

    #!/usr/bin/perl

    # bu bir açıklamadır.
    # diyez (#) işareti ile başlayan bütün satırlar açıklamadır.

    @renkler = ("sari","kirmizi","yesil");

    foreach $i (@renkler) {
    print "$i\n";
    }

foreach döngüsünün her tekrarlanışında $i değişkenine @renkler dizisinin bir elemanı atanır. İlk tekrarda $i değişkeninin değeri "sari", ikinci tekrarda "kirmizi" ve üçüncü tekrarda "yesil" olur. { ve } parantezleri döngünün başlangıç ve sonunu belirtir. Yani bu parantezler arasında kalan komutlar $i değişkeninin bütün değerleri için tekrarlanır.

Dizi Fonksiyonları

Perl'de dizilere değer atamayı ve dizilerden değer okumayı kolaylaştıran fonksiyonlar mevcuttur.

    @renkler = ("sari","kirmizi","yesil","mavi","turuncu","bordo");

    $ilkrenk = pop(@renkler);
    # $ilkrenk değişkenine @renkler dizisinin ilk değeri olan "sari" atanır.

    $sonrenk = shift(@renkler);
    # $sonrenk değişkenine @renkler dizisinin son değeri olan "bordo" atanır.

Bir diziye değer eklemek için push fonksiyonu kullanılır:

    push(@renkler,"gri");
    # @renkler dizisinin sonuna "gri" ilave edilir.

    @yenirenkler = ("lacivert","pembe");

    push(@renkler,@yenirenkler);
    # @yenirenkler dizisindeki değerler @renkler dizisinin sonuna ilave edilir.

Dizilerle ilgili işe yarayabilecek birkaç fonksiyon daha:

    sort(@renkler);
    # @renkler dizisinin elemanlarını alfabetik sıraya koyar.

    reverse(@renkler);
    # @renkler dizindeki elemanların diziliş sırasını ters çevirir.

    @join(", ",@renkler);
    # @renkler dizisini elemanların arasında ", " olacak şekilde birleştirir.

    $uzunluk = $#renkler;
    # $uzunluk değişkenine @renkler dizisinin uzunluğu atanır.

Hash Değişkenler

Hash değişkenleri Array değişkenlerin özel bir hali olarak düşünebiliriz. Hash değişken adlarının başında yüzde işareti (%) bulunur. Hash değişkenler öğe çiftlerinden oluşur: Anahtar ve Değer. Aşağıdaki örneği inceledikten sonra daha rahat anlayacağınızı tahmin ediyorum:

    Değişken        Anahtar     Değer     
    %sayfalar = ( "sinan", "http://www.sinanilyas.cjb.net",
      "koray", "http://cc.sau.edu.tr/~ktoksoz",
      "baris", "http://turk.eu.org/uruzgar");

Aynı Hash şu şekilde de tanımlanabilir:

    %sayfalar = ( "sinan" =>  "http://www.sinanilyas.cjb.net",
      "koray" =>  "http://cc.sau.edu.tr/~ktoksoz",
      "baris" =>  "http://turk.eu.org/uruzgar");

%sayfalar değişkeninde anahtar olarak kişinin ismini, değer olarak da web sayfasının adresi saklanır. Tıpkı Array'de olduğu gibi, bir Hash değişkenden tek bir değer okunacağı zaman $ işareti kullanılır.

    print "$sayfalar{'baris'}\n";

Yukarıdaki satır Barış'ın web sayfasının adresini yazdırır. Eğer değişkendeki bütün değerleri yazdırmak istiyorsanız bir foreach döngüsü kullanabilirsiniz:

    foreach $anahtar (keys %sayfalar) {
       print "$anahtar'ın web sayfasının adresi: $sayfalar{$anahtar}\n";
    }

Bu örnekte %sayfalar değişkeninin anahtarlarını öğrenebilmek için bir hash değişkeninin anahtarlarını dizi olarak veren keys fonksiyonu kullanılmıştır. keys fonksiyonunun tek bir dezavantajı vardır: Anahtarları rastgele bir sırayla vermesi. Yani bu örnekte kimin adresinin önce, kiminkinin sonra ekrana yazılacağı belli değildir. Adresleri belli bir sırayla yazdırmak istiyorsanız aşağıda gösterildiği gibi foreach döngüsünde anahtarları kendiniz yazmalısınız.

    foreach $anahtar ("sinan","koray","baris") {
       print "$anahtar'ın web sayfasının adresi: $sayfalar{$anahtar}\n";
    }

Hash değişkenler formla gönderilen verileri ayırmada çok işimize yarayacak. Örneğin $form{'soyad'} bize formunuzdaki soyad kutucuğuna yazılan değeri verecek. Televizyoncuların deyimiyle: "AZ SONRA!" :)

Neyse, biz yine işimize bakalım ve adres listesi veren bir web sayfası üreten yeni bir CGI scripti yazalım. Tabi ki Hash değişken kullanarak.

    #!/usr/bin/perl

    %sayfalar = ("sinan" => "http://www.sinanilyas.cjb.net",
                 "koray" => "http://cc.sau.edu.tr/~ktoksoz",
                 "baris" => "http://turk.eu.org/uruzgar" );

    print "Content-type:text/html\n\n";

    print <<IlkKisim;
    <html><head><title>Adres Listesi</title></head>
    <body>
    <h2>Adres Listesi</h2>
    <ul>
    IlkKisim
    ;

    foreach $anahtar (keys %sayfalar) {
    print "<li><a href=\"$sayfalar{$anahtar}\">$anahtar</a>\n";
    }

    print <<SonKisim;
    </ul>
    <p>
    </body>
    </html>
    SonKisim
    ;

Denemek için tıklayın

Yukarıdaki scripti "adreslistesi.cgi" adıyla kaydedin ve çalıştırılabilmesi için erişim yetkilerini 755 olacak şekilde değiştirin. Sonra da web browser'ınızdan çağırın. Açılan sayfada isme tıkladığınız zaman o kişinin web sayfasının açıldığını göreceksiniz.


 

Bölüm 3: CGI Ortam Değişkenleri

Ortam değişkenleri CGI programı çalıştırılıdığı zaman browser'ınızın (ve web server'ınızın) programa gönderdiği bilgilerdir. Ortam değişkenleri %ENV isimli Hash değişkende saklanır.

 CGI Ortam Değişkenleri
 DOCUMENT_ROOT  Server'ınızın kök dizinini verir.
 HTTP_COOKIE  Eğer varsa ziyaretçinin "cookie"sini verir.
 HTTP_HOST  Server'ınızın "hostname"ini verir.
 HTTP_REFERER  Scriptin çağrıldığı sayfanın adresini verir.
 HTTP_USER_AGENT  Ziyaretçinin browser'ının tipini verir.
 PATH  Server'ınızın "system path"ini verir. (Genelde /bin, /usr/sbin vs.)
 QUERY_STRING  GET metodu ile yollanan bilgiyi verir.
 REMOTE_ADDR  Ziyaretçinin IP adresini verir.
 REMOTE_HOST  Ziyaretçinin "hostname"ini verir. (*)
 REMOTE_PORT  Ziyaretçinin web server'ınıza bağlandığı portu verir.
 REMOTE_USER  Ziyaretçinin kullanıcı adını verir. (.htaccess korumalı sayfalar için)
 REQUEST_METHOD  Bilgi gönderme metodunu verir. (GET ya da POST)
 SCRIPT_FILENAME  Scriptin tam yolunu verir.
 SERVER_ADMIN  Server'ınızın webadmin'inin e-mail adresini verir.
 SERVER_NAME  Server'ınızın tam domain adını verir. (Örn: cc.sau.edu.tr)
 SERVER_PORT  Server'ınızın dinlemede olduğu portu verir.
 SERVER_SOFTWARE  Serverdaki web server programını verir. (Örn: Apache 1.3)

(*) Eğer server'ınızda "reverse-name-lookups" yoksa REMOTE_HOST ziyaretçinin IP adresini verir.

Bazı server'larda bunlardan başka değişkenler de olabiliyor. Daha fazla bilgi için server'ınızın dökümanlarını inceleyiniz. Farketmişseniz bazı değişkenler server'la ilgili, bazıları ise ziyaretçi ile ilgili bilgileri içeriyor. Server'la ilgili olanların programa bildirdiği bilgiler o server'da çalışan bütün CGI programları için aynı olacaktır. Fakat ziyaretçi ile ilgili bilgiler program her çalıştırıldığında farklı olabilir.

Her CGI çalıştırıldığında bütün ortam değişkenleri atanmaz. REMOTE_USER değişkeni sadece .htaccess dosyası ile korunan dizin ya da altdizinler için atanır. Bu durumda REMOTE_USER değişkeninin alacağı değer .htaccess dosyasındaki kullanıcı adıdır.

%ENV değişkeni CGI çalıştırıldığında otomatik olarak atanır ve isterseniz tamamını isterseniz sadece belli değerleri kullanabilirsiniz. Mesela aşağıdaki kod ile ziyaretçinin IP adresini yazdırabilirsiniz.

    print "IP adresiniz: $ENV{'REMOTE_ADDR'}\n";

Şimdi bütün ortam değişkenlerini yazdıran bir CGI yazalım. Yeni bir dosya oluşturun, "ortam.cgi" adıyla kaydedin ve içine şunları yazın:

    #!/usr/bin/perl

    print "Content-type:text/html\n\n";
    print <<HTMLSonu;
    <html><head><title>Ortam Değişkenleri</title></head>
    <body>
    HTMLSonu
    ;

    foreach $anahtar (sort(keys %ENV)) {
       print "$anahtar = $ENV{$anahtar}<br>\n";
    }

    print "</body></html>";

Denemek için tıklayın

Scripti kaydedin, erişim yetkilerini 755 olarak ayarlayın ve browser'ınızdan çağırın. Eğer hata mesajı alırsanız programı UNIX'te çalışmayı deneyip hatanın nerede olduğunu öğrenebileceğinizi hatırlayın.

Bu örnekte sort fonksiyonu kullanılarak %ENV değişkeninin anahtarları alfabetik sıraya koyduk. Perl'ün sort fonksiyonu karakter değerlerini karşılaştırdığı için sayıları düzgün bir şekilde sıraya koyamaz.

Basit Bir Sorgu Formu

Bir HTML formundan CGI'a bilgi göndermek için iki yol vardır. GET ve POST. Form bilgisinin server'a nasıl yollandığını bu metodlar belirler. GET metodunda formla gönderilen bilgiler URL'in bir parçası olarak gönderilir ve QUERY_STRING ortam değişkenine atanır. POST metodunda nasıl gönderildiğini bir sonraki bölümde anlatacağız.

QUERY_STRING değişkenine birkaç değişik yolla atama yapabiliriz. Birinci yöntem aşağıda görüldüğü gibidir.

http://hammer.prohosting.com/~sinan/cgi-bin/ornek/ortam.cgi?deneme1
http://hammer.prohosting.com/~sinan/cgi-bin/ornek/ortam.cgi?deneme2
http://hammer.prohosting.com/~sinan/cgi-bin/ornek/ortam.cgi?deneme3

Yukarıdaki linklerin her birine tıklayın. QUERY_STRING değişkeninin değerinin soru işaretinden sonra gelen yazı olduğunu göreceksiniz. Bu örneklerde QUERY_STRING değişkeni "deneme1","deneme2" ve "deneme3" değerlerini alır.

Bir başka yöntem de aşağıdaki gibi basit bir form hazırlamaktır.

    <form action="http://hammer.prohosting.com/~sinan/cgi-bin/ornek/ortam.cgi" method="GET">
    Buraya birşeyler yazın: <input type="text" name="ornek_yazi" size=30><p>
    </form>

Denemek için tıklayın

"Gönder" düğmesinin olmadığını farketmişsinizdir sanırım. GET metodu ile sadece enter'a basarsınız ve form gönderilir. (Bu yöntem sadece bir tane girdi alanı olduğu zaman işe yarar. Birden fazla girdi alanını göndermek için mutlaka "Gönder" düğmesi koymalısınız.)

Yukarıdaki kodları kullanarak bir HTML dosyası hazırlayın ve "get.html" adıyla kaydedip browser'ınızla açın. Daha sonra form alanına birşeyler yazın ve enter'a basın. QUERY_STRING değişkeninin değeri aşağıdaki gibi olur.

    $ENV{'QUERY_STRING'} = ornek_yazi=iste+yazdiginiz+yazi

Eşittir (=) işaretinin solundaki yazı form alanının adıdır. Sağındaki yazı ise formdaki kutucuğa yazdığınız yazıdır. FAKAT farkettiğiniz gibi boşlukların yerini artı (+) işareti almış. Hatta çeşitli noktalama işaretleri ve özel karakterlerin yerine %-kod şeklinde özel kodlar çıkmış.

Buna "URL Kodlama" denir ve ister GET metodu ister POST metodu kullanılsın, herhangi bir form ile bilgi gönderildiği zaman meydana gelir.

Perl scriptiniz bu bilgiyi eski haline getirebilir fakan uzun ve karmaşık bilgiler yollandığında POST metodunu kullanmak daha iyidir. GET metodu daha çok veritabanından bilgi aratma gibi tek alanlı formlar için elverişlidir.

GET metodu ile birden fazla alanlı formları da gönderebilirsiniz.

    <form action="http://hammer.prohosting.com/~sinan/cgi-bin/ornek/ortam.cgi" method="GET">
       Adınız: <input type="text" name="ad" size=30><p>
    Soyadınız: <input type="text" name="soyad" size=30><p>
    <input type="submit" value="Gönder">
    </form>

Denemek için tıklayın

Bo formla gönderilen bilgiler aşağıdaki gibi görünür.

    $ENV{'QUERY_STRING'} = ad=umut+baris&soyad=ruzgar

Değerler & işareti ile ayrılmıştır. Bu iki değeri birbirinden ayırmak için Perl'ün split fonksiyonunu kullanacağız.

    @degerler = split(/\&/,$ENV{'QUERY_STRING'});
    foreach $i (@degerler) {
         ($alanadi, $deger) = split(/=/,$i);
         print "$alanadi = $deger\n";
    }

split fonksiyonu bir karakter sırasını, belirtilen karakter ya da karakterlerden ayırarak bir dizi oluşturur. Örneğimizin ilk satırında QUERY_STRING değişkeninin değeri & işaretinden ikiye ayrılmıştır. & işaretinden önce \ kullanılmasının nedeni & işaretinin Perl'de özel bir anlamı olmasıdır. (Perl'de bazı özel karakterleri kullanırken başına \ işareti koymamız gerekebilir). Bu ayırma işlemi sonucu @degerler dizisine iki değer atanır: ad=umut+baris ve soyad=ruzgar. foreach döngüsünde önce = işaretinden alan adı ve alanlara yazılan yazılar birbirinden ayrılarak $alanadi ve deger değişkenlerine atanır. Sonra da birbirinden ayrılmış olan bu değerler yazdırılır.

GET metodu hakkında bazı uyarılar: Bu metod bilgi göndermek için güvenli değildir. Bu yüzden şifre ve kredi kartı bilgileri gibi gizli bilgileri gönderirken asla bu metodu kullanmayınız. Gönderilen bilgi URL'in bir parçası olarak gönderildiği için server'ın log dosyalarında kaydedilir ve log dosyaları da server'daki bütün kullanıcılar tarafından okunabilir. Gizli bilgiler bir sonraki bölümde göreceğimiz POST metodu ile güvenli bir biçimde gönderilebilir.


İleri=>