Jump to page: 1 2 3
Thread overview
Bir CGI programı örneği
Feb 26, 2010
Mengu
Feb 27, 2010
Mengu
Feb 27, 2010
Mengu
Mar 22, 2010
Mengu
Nov 24, 2010
Mengu
Nov 25, 2010
Mengu
Nov 25, 2010
Mengu
Jan 27, 2011
Mengu
Jan 29, 2011
Mengu
Jan 30, 2011
Mengu
Jan 30, 2011
Mengu
October 27, 2009

D'nin özellikle web programlamaya yönelik olduğu söylenemez. Ama ortam değişkenlerine erişebilen ve çıkışına web sayfası içeriğini yazdırabilen her dilde olduğu gibi, onunla da CGI programlama yapılabilir.

Bir örnek:

http://ddili.org/cgi-bin/deneme

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 21, 2010

Bende sizin örneğinizi çalıştırmayı başardım ve hayatımda ilk defa cgi programı derlemiş oldum.

Şuanda D ile nasıl web programlanır çok merak etmekteyim :-) Siz web programlama için hangi modüllerin bilinmesi gerektiğini düşünüyorsunuz ?

Birde Mysql'e erişebildim mi çok iyi olacak.(Yok DKVde yeter :-) )

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 21, 2010

Belki başkaları görmemiştir diye, o programın koduna, sayfanın altından bağlanılabiliyor. Yani şu:

http://ddili.org/ornek_kod/deneme.d

Alıntı (canalpay):

>

Şuanda D ile nasıl web programlanır çok merak etmekteyim :-)

Bu konuda çok bilgi bulunur herhalde ama cgi web programları kısaca şu şekilde çalışır:

Web sunucuları, örneğin Apache, bizim main'imizi çağırmadan önce, web sitesinin kullanıcıdan aldığı bilgileri ortam değişkenlerine (environment variables) atar. Çok standart olan değişkenler şunlardır:

string[] ortamDeğişkenleri =
[
"SERVER_SOFTWARE",
"SERVER_NAME",
"GATEWAY_INTERFACE",
"SERVER_PROTOCOL",
"SERVER_PORT",
"REQUEST_METHOD",
"PATH_INFO",
"PATH_TRANSLATED",
"SCRIPT_NAME",
"QUERY_STRING",
"REMOTE_HOST",
"REMOTE_ADDR",
"AUTH_TYPE",
"REMOTE_USER",
"REMOTE_IDENT",
"CONTENT_TYPE",
"CONTENT_LENGTH",
"HTTP_ACCEPT",
"HTTP_USER_AGENT",
];

(Başka sunucular başka değişkenler de tanımlıyor olabilir. Ama yukarıdakiler oldukça standart.)

Yukarıdaki web programında bir düğmeye basınca anlaşıldığı gibi, kullanıcının girdiği bilgiler, programa QUERY_STRING ortam değişkeninin değeri olarak geliyor.

Ortam değişkenlerine std.process modülündeki getenv ile erişiliyor.

cgi programı, giriş bilgisini aldıktan sonra, web sunucusunun tekrar kullanıcıya göstereceği HTML çıktısını kendi standart çıkışına gönderir.

Eğer bilgisayarında bir web sunucusu (örneğin Apache) çalışıyorsa, tarayıcını localhost'a (veya 127.0.0.1 adresine) yönlendir.

Programını, onun cgi programlarının başlatılmasına izin verilen bir klasörüne de koymuş olman gerekir. Örneğin ddili.org'daki o 'deneme' programı şurada duruyor: /public_html/cgi-bin

Web sunucusu ayarlamak başlı başına bir konu, ben daha fazla ayrıntıya giremeyeceğim. :/

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 21, 2010

Bu işi kolaylaştıran kütüphaneler de olmalı. dsource proje sayfasında, açıklamasında 'web' geçen projeler var. Hiçbirisine bakmadım... :)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 22, 2010

Alıntı:

>

Bu konuda çok bilgi bulunur herhalde ama cgi web programları kısaca şu şekilde çalışır:

Teşekkürler ama çalıştırdığım için zaten çoğunu biliyorum :-)

Eminim yakında düzgün bir web framework'ü çıkar.(D 2 için bahsediyorum. ) (Belkide ilerideki projelerimizden biri olur :-) )

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 26, 2010

Ortam değişkenlerinin tamamını bulabileceğimiz bir adres biliyor musunuz? Örneği post olarak gönderilmiş veri nasıl çekilir ?

Birde form bilgisini 'get' yöntemi ile çekince Türkçe karakterleri çekmiyor. Sorun nereden kaynaklanıyor olabilir. 'Post' yöntemi ile çekersem yine Türkçe karakter sorunu yaşar mıyım ?

Sizinde cgi hakkında pek bilginiz olmadığını(Benden çok ama :-) ) biliyorum. Ama yinede Türkçe karakter sıkıntısına çok bozuldum. Bir soyadımı giremeyecek miyim :-( Post ile bu sorunu yaşamam sanıyorum.(Get ile de ilgili bir ayar vardır. ) Bazı sitelerde perl'ü ile cgi nasıl programlanıyor anlatıyor. Onlara da bakarsam ve o yazanları D diline çevirirsem bir şeyler öğrenirim.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 26, 2010

Aslında karakterler var ama değişik bir düzendeler. Örneğin "düğme" sözcüğü QUERY_STRING içinde "d%C3%BC%C4%9Fme" şeklinde geliyor.

Eğer CGI programları konusunda yardım eden bir kütüphane kullanılmayacaksa, o dönüşümün bizim tarafımızdan yapılması gerekiyor.

CGI programı en başta

dout.writef("Content-type: text/html; charset=utf-8\n\n");

dediği için, "%C3%B3"ün 'ü'nün UTF-8 hali olduğunu düşünebiliriz.

import std.cstream;
import std.process;
import std.conv;

int onaltılıKod(char kar)
{
   if (kar >= '0' && kar <= '9') {
       return kar - '0';
   } else {
       return 10 + kar - 'A';
   }
}

string dönüştür(string giriş)
{
   ubyte[] sonuç;

   int i;

   while (i < giriş.length) {
       if (giriş[i] == '%') {
           ++i;
           int karakterKodu = onaltılıKod(giriş[i]) * 16 + onaltılıKod(giriş[i + 1]);
           sonuç ~= cast(ubyte)karakterKodu;
           i += 2;
       } else {
           sonuç ~= giriş[i];
           ++i;
       }
   }

   return cast(string)sonuç;
}

void main()
{
   string değer = dönüştür(getenv("QUERY_STRING"));
   dout.writefln(değer);
}

O programı denemek için web sunucusuna ihtiyacın yok. Giriş ortam değişkeni olduğu için, komut satırından da deneyebilirsin:

export QUERY_STRING="hayvan=at&derece=Orta&sevilen+hayvan=&birinci+d%C3%BC%C4%9Fme=Bir+D%C3%BC%C4%9Fme"
/deneme

Çıktısı:

hayvan=at&derece=Orta&sevilen+hayvan=&birinci+düğme=Bir+Düğme

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 26, 2010

Biraz değiştirdim ve sözleşmeli programlama denetimlerini de ekledim:

import std.cstream;
import std.process;
import std.conv;

int onaltılıKod(in char kar)
in
{
   assert(((kar >= '0') && (kar <= '9'))
          ||
          ((kar >= 'A') && (kar <= 'F')));
}
out(sonuç)
{
   assert((sonuç >= 0) && (sonuç <= 15));
}
body
{
   const int kod = (kar >= '0' && kar <= '9')
                   ? kar - '0'
                   : 10 + kar - 'A';
   return kod;
}
unittest
{
   assert(onaltılıKod('1') == 1);
   assert(onaltılıKod('C') == 12);
}

char yüzdeliyiKarakterOlarak(string giriş)
in
{
   assert(giriş.length == 3);
   assert(giriş[0] == '%');
}
body
{
   const int kod = onaltılıKod(giriş[1]) * 16 +
                   onaltılıKod(giriş[2]);
   return cast(char)kod;
}
unittest
{
   assert(yüzdeliyiKarakterOlarak("%8A") == '\x8a');
   assert(yüzdeliyiKarakterOlarak("%20") == ' ');
}

string cgiDizgiDönüştür(string giriş)
{
   string sonuç;

   int i;

   while (i < giriş.length) {
       if (giriş[i] == '%') {
           // Sonunda yer olmalı
           assert(giriş.length - i >= 3);

           sonuç ~= yüzdeliyiKarakterOlarak(giriş[i .. i + 3]);
           i += 3;
       } else {
           sonuç ~= giriş[i];
           ++i;
       }
   }

   return sonuç;
}
unittest
{
   assert(cgiDizgiDönüştür("a%20b%DDc") == "a\x20b\xddc");
   assert(cgiDizgiDönüştür("%25") == "%");
}

void main()
{
   string değer = cgiDizgiDönüştür(getenv("QUERY_STRING"));
   dout.writefln(değer);
}

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 26, 2010

hadi d ile web framework yazalim :)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 26, 2010

Daha dün tekrar aklıma geldi. :)

trileri'yi deneme amaçlı olarak siteye koyayım dedim ama HTML çıktısını elle yazmak istemediğim için vazgeçtim.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

« First   ‹ Prev
1 2 3