Cgi kullanarak sistemdeki dosyalarla çalisma - Papatyam Forum

Papatyam Forum

Go Back   Papatyam Forum > ..::.BİLGİSAYAR & TEKNOLOJİ.::. > Web Master Kaynakları > CGI

Yeni Konu aç  Cevapla
 
Seçenekler
Alt 08 February 2008, 17:19   Mesaj No:1

tamerr89

Papatyam Paylaşımcı Üyesi
Avatar Otomotik
Durumu:tamerr89 isimli Üye şimdilik offline konumundadır
Papatyam No : 1196
Üyelik T.: 09 December 2007
Arkadaşları:0
Cinsiyet:
Yaş:34
Mesaj: 212
Konular:
Beğenildi:
Beğendi:
Takdirleri:10
Takdir Et:
Konu Bu  Üyemize Aittir!
Standart Cgi kullanarak sistemdeki dosyalarla çalisma

Cgi kullanarak sistemdeki dosyalarla çalisma

Kod:
#!/usr/bin/perl
print "Content-type:text/plain\n\n";

read(STDIN, $gecici_alan, $ENV{'CONTENT_LENGTH'});

@alan_deger_ciftleri = split(/&/, $gecici_alan);

foreach $alan_deger (@alan_deger_ciftleri) {
($alan, $deger) = split(/=/, $alan_deger);
$deger =~ tr/+/ /;# + karakteri boşluk karakterine dönüştü
$deger =~ s/%(..)/pack("C", hex($1))/eg;
# $deger =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))
$FORM{$alan} = $deger;
}

{

open (DOSYAM, ">>./dosyam.dat") || die ("HATALI iSLEM..!");
print DOSYAM "$FORM{'ad'}:$FORM{'email'}:$FORM{'not'}\n"; 
# yukarda bulunan : karakteri her alanı bir diğerinden ayırır.
# bu karakteri, alan ayıracı olarak kendimiz belirledik
close(DOSYAM);
}

print "<HTML>\n<HEAD>\n<TITLE>Teşekkürler</TITLE>\n</HEAD>";
print "\n\n<BODY BGCOLOR=\"#FFFFFF\" LINK=\"#CC0000\">\n";
print "<p><br><center><H3>İşlem Tamam !!!</H3><p><br>";
print "<PALIGN=\"CENTER\">\n\n";
print "<FORM>\n";
print "<INPUT onclick=history.go(-1) type=button value=Geri>\n";
print "</FONT></FORM></center><p><br>\n";
print "</center></BODY>\n</HTML>\n";

Şimdi aşağıdaki formu dolduralım ve yollayalım.

Form tanımındaki form adı ile ilgili satırın tanımı şöyle olacak: 

<form action="http://sirius.gazi.edu.tr/cgi-bin/ornek3.pl" method="POST">

Sonuçta bilgilerin sistemde bulunan dosyam.dat ' a yazıldığını ve her bir veri alanının da

birbirinden : karakteri ile ayrıldığını göreceksiniz. 



Adınız : 
E-mail : 
Notunuz: 









Dosyalardan Okuma


Dosyalara yazma işlemini sanırım anladık.Şimdi sıra sistemdeki dosyadan bilgileri almak(okutmak) ve

bu bilgileri değerlendirmekte... Bir önceki konuda formdan yolladığımız bilgiler dosyam.dat adlı dosyaya

yazmıştı.Şimdi bu dosyadan okutma yaparak hem okuma işlemini hem de bir önceki yazdırma işleminin

doğruluğunu test etmiş olacağız.

Aşağıdaki örnekte dosyam.dat dan okunan satırlar(kayıtlar) sırayla bir browser'ın sayfasına

yazdırılmaktadır. İnceleyelim.



Programın adı ornek4.pl olsun.



#!/usr/bin/perl

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

{

print "<HTML>\n<HEAD>\n<TITLE>KAYITLAR</TITLE>\n</HEAD>";

print "\n\n<BODY BGCOLOR=\"#FFdd00\" LINK=\"#CC0000\">\n";

open (DOSYAM, "./dosyam.dat") || die ("HATALI iSLEM..!"); 

print "<p><br><center><H4>Dosyaya girilen kayıtlar aşağıdadır !</H4><p><br>"; 

print "<PALIGN=\"CENTER\">\n\n";

@tumkayitlar = <DOSYAM>; 

close(DOSYAM); 

foreach $herbirkayit (@tumkayitlar){

chomp($herbirkayit);

print "$herbirkayit<br>\n";

} 

} 

print "<FORM>\n";

print "<INPUT onclick=history.go(-1) type=button value=Geri>\n";

print "</FONT></FORM></center><p><br>\n";

print "</center></BODY>\n</HTML>\n"; 


Şimdi bu programı çalıştıralım

Bir de daha farklı bir çıktısı olan bu programı deneyiniz ve farkı inceleyip anlayınız.
Program kodu aşağıdadır.(ornek5.pl)

#!/usr/bin/perl
print "Content-type:text/html\n\n";

{
print "<HTML>\n<HEAD>\n<TITLE>KAYITLAR</TITLE>\n</HEAD>";
print "\n\n<BODY BGCOLOR=\"#FFdd00\" LINK=\"#CC0000\">\n";
open (DOSYAM, "./dosyam.dat") || die ("HATALI iSLEM..!");
print "<p><br><center><H4>Dosyaya girilen kayıtlar aşağıdadır
!</H4><p><br>"; 
print "\n\n";
print "<table bgcolor=ffffff border=1 bordercolor=dc6000><tr>"; # Çıktının düzenli olması
#için table tanımları yapılıyor
@adlar = ("AD VE SOYAD","E-MAIL ADRESI","BIRAKILAN NOT"); #çıktı 
#başlıkları oluşturuluyor
foreach $ad (@adlar)
{
print "<td bgcolor=ff3300>";
print "$ad"; # başlıklar bastırılıyor
print "</td>";
}
print "<br>\n\n";
print "</tr>";

@tumkayitlar = <DOSYAM>;
close(DOSYAM);

foreach $kayit (@tumkayitlar){
chomp($kayit);
@degerler = split(/:/, $kayit);
print "<tr>"; # alan içerikleri bastırılıyor
print "<td>$degerler[0]</td>";
print "<td>$degerler[1]</td>";
print "<td>$degerler[2]</td>";
print "</tr>";
} 

print "</tr></table>\n";
print "<FORM>\n"; 
print "<INPUT onclick=history.go(-1) type=button value=Geri>\n";
print "</FONT></FORM></center><p><br>\n";
print "</center></BODY>\n</HTML>\n";
}


Dosyada String Arama 



String bildiğiniz gibi içinde her türlü karakterleri barındırabilen karakterler dizisidir(boşluk v.b dahil).

Dosyalara yazma,okuma örneklerimizden sonra şimdi de bir dosyanın içerisinde belli bir string aratma konusunu inceleyelim.Yine konuyu daha iyi kavramak için daha önceki örneklerimize sadık kalacağız.Onceki örneklerde hatırlarsanız dosyam.dat isimli dosya üzerinde çalışmıştık yine aynı dosyada bu sefer string (metin) taraması yapacağız. Dosyada arama yaptırmak için daha önce gördüğümüz konulardan faydalanarak (özellikle patternler)her bir kayıtta örnek stringi tarayacağız.

Bu arada sadece metin aratacağımız için GET metodunu kullanacağız. Şimdi web sayfasında görünümü aşağıdaki gibi olan bir form tanımlayalım.



Arayacağınız kelimeyi giriniz : 




KODU: 



<table width=60% border=1 bordercolor=#000055 bgcolor=#ff7700> <tr><td> 

<form action="http://sirius.gazi.edu.tr/cgi-bin/ornek6.pl" method="GET">

Aradığınız kelimeyi giriniz : <input type="Text" name="kelime">

<input type="submit" value="Ara !">

<input type="reset" value="Sil">

</form>

</td></tr> </table> 



Yukardaki forma aratacağımız kelimeyi girip Ara ! tuşuna basınca, formun action alanında tanımlandığı üzere ornek6.pl programı çalıştırılacak ve yine o programda adı verilen dosyam.dat dosyasında kelime taranacak ve sonuclar listelenecektir.

Programın kodu ise aşağıdadır.Formu doldurarak çalışmasını görünüz ve aşağıdaki kodu inceleyiniz.

Bu arada taramada kolaylık olsun diye dosyam.dat daki bazı kelimeleri vereyim. 

Sevgi kaya(boşluk dahil),Atilla,Sevgi,sev,ali ... Bu kelimeleri sorgulayabilirsiniz.



#!/usr/bin/perl 

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

$veriler = $ENV{'QUERY_STRING'}; #formdan alan-adı ve içeriği geldi ve aktarıldı

#standart dışı karakterler düşünülerek aşağıdaki 2 satır eklendi 

$veriler =~ tr/+/ /; 

$veriler =~ s/%(..)/pack("C",hex($1))/eig;

# string normale dönüştü

($alan, $deger) = split(/=/, $veriler); #alan-adı ve içeriği ayrıştırıldı

$deger =~ tr/a-z/A-Z/; #buyuk harfe cevrildi..Amac:formdan nasıl girilirse girilsin farketmesin

$deger =~ s/\+/ /g; # + işareti boşluğa dönüştü

print "<HTML>\n<HEAD>\n<TITLE>TARAMA SONUCLARI</TITLE>\n</HEAD>"; 

print "\n\n<BODY BGCOLOR=\"#FFdd00\" LINK=\"#CC0000\">\n"; 

print "Sorgulanan Kelime:$deger<hr nosize>"; 

print "<center>"; 

print "<table width=100% bgcolor=33ff00 border=1 bordercolor=ff0000>";

# düzemli çıktı amacıyla web sayfası tanımlandı

open (DOSYAM, "./dosyam.dat") || die ("HATALI iSLEM..!");

@tumkayitlar = <DOSYAM>; close(DOSYAM);

@adlar = ("AD VE SOYAD","E-MAIL ADRESI","BIRAKILAN NOT"); 

#sistemdeki dosya açıldı kayıtlar diziye alındı Başlıklar ise bastırılmak uzere bir baska diziye alındı

foreach $ad (@adlar) {

print "<td bgcolor=ff3300>";

print "$ad"; # başlıklar bastırıldı

print "</td>"; 

}

print "<br>\n\n";

print "</tr>";

foreach $kayit (@tumkayitlar){ 

chomp($kayit); 

$kayit=~ s/\s*##.*$//;

$kayit =~ tr/a-z/A-Z/;

# dosyam.dat kayıtları normal olmayan karakterlerden 

#arındırılıp buyuk harfe cevrildi

if ($kayit =~/$deger/){ #formdan gelen taranacak kelime kayıttamı? Evet ise aşağıya geç

@degerler = split(/:/, $kayit); #kaydı alanlarına böl(ad,email,not)

print "<tr>";

print "<td>$degerler[0]";

print "<td>$degerler[1]";

print "<td>$degerler[2]"; 

# kelimenin bulunduğu kayıt (Alanlar ayrı ayrı olmak üzere) bastırıldı

print "</tr>"; 

}

} 

print "</table>"; 

print "</center></body></html>\n"; #web sayfası sonu


Dosyada tam kelime sorgulama

Bir önceki örnekte string taraması yapan programı inceledik.Biliyorsunuz şunların her biri string örnekleridir;"ali",ali ak","0lp96?" v.b.
Bunlar anlamlı yada anlamsız olabilir.Bu defa herhangi bir stringi değil bir kelimeyi, taranan dosyada tam örneği varsa bulan bir program kodlayalım.

Formumuz önceki form ile aynı olsun.Sadece program adını ornek6.pl değil ornek7.pl olarak düzelteceğiz.Aşağıdaki formda bu düzenlemeyi yaptım.Kodu ise formun altındadır.



Aradığınız kelimeyi giriniz : 



KODU:

<table width=60% border=1 bordercolor=#000055 bgcolor=#ff7700>
<tr><td>
<form action="http://sirius.gazi.edu.tr/cgi-bin/ornek7.pl" method="GET">
Aradığınız kelimeyi giriniz : <input type="Text" name="kelime"> 
<input type="submit" value="Ara !">
<input type="reset" value="Sil">
</form> 
</td></tr>
</table>

Yukardaki forma aratacağımız kelimeyi girip Ara ! tuşuna basınca,ornek7.pl programı, dosyam.dat
dosyasında(bir önceki programda da kullanmıştık) aranan tam kelime örneğini tarar ve sonucu
listeler.Formu doldurarak çalışmasını görünüz ve aşağıdaki kodu inceleyiniz.
Bu arada aranacak kelime tam kelime olmalıdır.Kelimeden sonta yanlışlıkla boşluk dahi girseniz
Kelimeyi bozmuş olacağınızdan sorgulama başarısız olur.Örneğin atilla yazıp boşluk tuşuna da
dokunursanız kelimeniz atilla+ olacaktır ve dosyam.dat dosyasındaki atilla kelimesine
uymayacağından sorgulama başarısız olacaktır.Amacımız tam kelime sorgulaması olduğundan 
bu derece katı önlem aldık.

Örnek7.pl

#!/usr/bin/perl

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

$veriler = $ENV{'QUERY_STRING'}; #formdan girilen alan-adı ve içeriği
#standart dışı karakterler düşünülerek aşağıdaki satırlar eklendi
$veriler =~ tr/+/ /;
$veriler =~ s/%(..)/pack("C",hex($1))/eig;

($alan, $deger) = split(/=/, $veriler);
$deger =~ tr/a-z/A-Z/;
$deger =~ s/\+/ /g;
print "<HTML>\n<HEAD>\n<TITLE>TARAMA SONUCLARI</TITLE>\n</HEAD>";
print "\n\n<BODY BGCOLOR=\"#FFdd00\" LINK=\"#CC0000\">\n";
print "Sorgulanan Kelime:$deger<hr nosize>"; 
if ($deger eq "" or $deger =~ /^\s+/){ #Boş geçilmesin
print "<h1>Sorgulanacak Kelime Girilmedi ..!<h1>";
exit;
}
print "<center>";
print "<table width=100% bgcolor=33ff00 border=1 bordercolor=ff0000>";
open (DOSYAM, "./dosyam.dat") || die ("HATALI iSLEM..!");
@tumkayitlar = <DOSYAM>;
close(DOSYAM);
@adlar = ("AD VE SOYAD","E-MAIL ADRESI","BIRAKILAN NOT");
foreach $ad (@adlar)
{
print "<td bgcolor=ff3300>";
print "$ad"; 
print "</td>";
}
print "<br>\n\n";
print "</tr>";
$test=0;
$kontrol=0;
foreach $kayit (@tumkayitlar)
{
chomp($kayit);
@degerler = split(/:/, $kayit); #Dosyadan diziye aktarılıyor sonradan bu diziden bastırılacak
$kayit=~ s/\s*##.*$//; #kayıt lüzumsuz karakterlerden ayıklandı
$kayit =~ tr/a-z/A-Z/; #kayıt büyük harfe çevrildi
@kelimeler = split(/[\t ]+/, $kayit); #tab ve boşluklar varsa kayıt oradan bölündü ve diziye #kondu ve tam kelimeye erişim tedbirleri tamamlandı
foreach $tam (0..$#kelimeler) {
if (@kelimeler[$tam] =~ /\b$deger\b/) #formdan gelen kelimenin tam örneği varmı?
{
$test=1;
$kontrol=1; 
last; #gerekli kontrol değişkenleri ayarlandı ve bu döngüden çıkıldı
}
}
if ($kontrol == 1){ # kelime bulundu ve tüm kayıt bastırılıyor
print "<tr>";
print "<td>$degerler[0]</td>"; 
print "<td>$degerler[1]</td>";
print "<td>$degerler[2]</td>";
print "</tr>";
$kontrol=0;
}
}

if ($test == 0){
print "<tr>";
print "<td>Aranan KelimeBulunamadi..</td>";
print "</tr>";}

print "</table>";
print "</center></body></html>\n";
Alıntı ile Cevapla
Cevapla

Bookmarks

Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 

Benzer Konular
Konu Başlıkları Konuyu Başlatan

Papatyam Forum Ana Kategori Başlıkları

Cevaplar Son Mesajlar
.net dili c# kullanarak döngü yazmaz tamerr89 asp.net 0 29 March 2008 13:20
Algoritma kullanarak verileri sifreleme tamerr89 asp.net 0 29 March 2008 13:17

Yeni Sayfa 1

www.papatyam.org Ana Sayfa

Tefekküre Davet Köşesi

Papatyam Sosyal Medya Guruplarımıza Katılın

                       Instagram         

Papatyam alemdarhost.com sunucularında barındırılmaktadır.