|
Bölüm 3: CGI Ortam Değişkenleri
(*) 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.
Ş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:
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>"; 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 FormuBir 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.
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.
Buraya birşeyler yazın: <input type="text" name="ornek_yazi" size=30><p> </form> "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.
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.
<pre> Adınız: <input type="text" name="ad" size=30><p> Soyadınız: <input type="text" name="soyad" size=30><p> </pre> <input type="submit" value="Gönder"> </form> Bo formla gönderilen bilgiler aşağıdaki gibi görünür.
Değerler & işareti ile ayrılmıştır. Bu iki değeri birbirinden ayırmak için Perl'ün split fonksiyonunu kullanacağız.
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. |
||||||||||||||||||||||||||||||||||||||