Konu Başlıkları: PERL NEDİR ?
Tekil Mesaj gösterimi
Alt 20 January 2009, 14:43   Mesaj No:2

CoNQueRoR_61

Papatyam Usta Üyesi
Avatar Otomotik
Durumu:CoNQueRoR_61 isimli Üye şimdilik offline konumundadır
Papatyam No : 1397
Üyelik T.: 20 January 2009
Arkadaşları:0
Cinsiyet:
Memleket:istanbul
Yaş:33
Mesaj: 131
Konular:
Beğenildi:
Beğendi:
Takdirleri:10
Takdir Et:
Konu Bu  Üyemize Aittir!
Standart Ynt: PERL NEDİR ?

Bu bölüme de mailin "Subject/Konu" bölümünde yazmasını istediğiniz şeyi girmelisiniz.

print MAIL "Bu mail web üzerinden otomatik olarak gönderilmiştir vs. vs. vs...\n\n";

Bu bölüme mail içeriğini yazmalısınız.

close (MAIL);

Son olarak da mail programını aynen dosya işlemleri gibi kapatıyoruz.


Dikkat etmemiz gereken en önemli nokta sendmail yolu. Eğer bu yol yanlış ya da eksik yazılırsa mail gitmez. Mail gönderirken değişkenleri kullanabilirsiniz ama eğer bir tekil değişkene e-mail atamanız gerekiyorsa "@" işaretinin önüne ters slash (\) koymanız gerekir. Aksi taktirde mail programı değişkeni yanlış algılar ve mail istenildiği şekilde gönderilemez.

Buraya kadar anlamamış olabilirsiniz, bir örnek yaparsak ne kadar kolay olduğunu anlayacaksınız. Örneğimizde web sitemiz üzerinden bize mail gönderilmesini olanak sağlayan bir form-mail programı yapalım. Ziyaretci kendi mail adresini ve mesaj konusunu girsin, mesajını girsin ve formu göndersin, gönderilen bilgiler de bizim mail adresimize ulaştırılsın. Tabii bizim mail adresini de program içerisinde bir tekil değişken olarak tanımlamamız gerekiyor :

#!/usr/bin/perl

# mail.cgi

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

$adresim = "isminiz\@mailiniz.com";
$sendmail = "/usr/sbin/sendmail";

use CGI qw(:standard);

$query = new CGI;

$gonderen = $query -> param('gonderen');
$konu = $query -> param('konu');
$mesaj = $query -> param('mesaj');
$istem = $query -> param('istem');

if ($istem eq "gonder&quot {

if ($gonderen eq "" or $konu eq "" or $mesaj eq "&quot {

print "Mail adresiniz, mail konusu ya da mesaj bölümü boş bırakılmış.
Bu bölümleri doldurmanız zorunludur. Lütfen geri dönüp tekrar deneyin...";

exit;

}


open (MAIL, "|$sendmail"
print MAIL "From\: $gonderen\n";
print MAIL "To\:$adresim\n";
print MAIL "Subject\: $konu\n\n";
print MAIL "Siteniz iletişim sayfasından gönderildi:\n\n";
print MAIL "$mesaj\n\n";
print MAIL "\n";
close (MAIL);

print "Mesajınız başarıyla gönderildi, en kısa zamanda cevap verilecek.
Teşekkür ederim...";

exit;

}

print "<form action=mail.cgi method=post>";
print "<input type=hidden name=istem value=gonder>";
print "Bize ulaşmak için aşağıdaki formu doldurun :<br><br>";
print "<table width=500 cellpadding=0 cellspacing=0 border=0>";
print "<tr>";
print "<td width=50\%>";
print "Mail adresiniz : ";
print "</td>";
print "<td width=50\%>";
print "<input type=text name=gonderen>";
print "</td>";
print "</tr>";
print "<tr>";
print "<td>";
print "Konu :";
print "</td>";
print "<td>";
print "<input type=text name=konu>";
print "</td>";
print "</tr>";
print "<tr>";
print "<td>";
print "Mesajınız :";
print "</td>";
print "<td>";
print "<textarea name=mesaj></textarea>";
print "</td>";
print "</tr>";
print "<tr>";
print "<td>\ \;</td>";
print "<td>";
print "<input type=submit value=Gönder!>";
print "</td>";
print "</tr>";
print "</table>";
print "</form>";






Programın içinde geçen "istem" değişkeni program akışını ayarlamak için atanmıştır. Eğer bu değişkenin içi boşsa en sondaki mail formu ekrana yazdırılır, yok eğer içeriği "gonder" ise yani form doldurulup gönderilmişse $gonderen, $konu ve $mesaj değişkenleri sorgulanır, içerikleri boşsa hata verilip program sonlandırılır (exit değilse mail gönderilir ve ekrana karşılama mesajı bastırılır. Bu programı kişisel server'ınızda denerseniz sadece karşılama sayfalarını ve programın içinde hata olup olmadığını görebilirsiniz ancak mail gönderemezsiniz.




ile Dizin İşlemleri :

CGI sunucu tarafında çalışan bir programlama dilidir ve CGI programları sayesinde Perl dilinin kolaylıkları ve avantajlarını kullanarak kendi bilgisayarımızdaymışcasına rahat ve pratik olarak dosya ve dizin işlemleri yapabiliriz. Dosya işlemlerine örnek olarak dizindeki tüm dosyaları okuyup döngü ile ekrana yazdırma, klasör oluşturma, dosya silme (dosya içeriği değil!), klasör silme verilebilir.

Klasör oluşturma :

Klasör oluşturmak için mkdir() fonksiyonu kullanılır. mkdir() fonksiyonu ile içi boş bir dizin oluşturulur. Kullanımı şu şekildedir :

mkdir ("bosdizin"

Bu kod bize "bosdizin" isminde boş bir dizin oluşturacaktır.

Örnek :

#!/usr/bin/perl

# dizin1.cgi

use CGI qw(:standard);

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

$query = new CGI;

$dizinismi = $query -> param('dizinismi');
$istem = $query -> param('istem');

if ($istem eq "olustur&quot {

if ($dizinismi eq "&quot {

print "Lütfen geri dönüp dizin ismi bölümünü doldurun";
exit;
}

mkdir("$dizinismi"

print "$dizinismi isimli dizin başarıyla oluşturuldu.";
exit;

}

print "<form action=dizin1.cgi method=get>";
print "<input type=hidden name=istem value=olustur>";
print "Oluşturmak istediğiniz dizin ismi : ";
print "<input type=text name=dizinismi>";
print "<input type=submit value=Oluştur!>";





Dizin silme :

Varolan boş bir dizini silmek için rmdir() fonksiyonu kullanılır. Kullanımı şu şekildedir :

rmdir ("bosdizin"

Bu kod bize mevcut "bosdizin" ismindeki boş dizini silme olanağı verir.

Dosya silme :

Dizin içerisinde herhangi uzantıda bir dosyayı unlink() fonksiyonunu kullanarak silebilirsiniz. Bu fonksiyonla silinen dosyalar kalıcı olarak silinirler yani geri dönüşüm klasörüne gönderilmezler. Tabii windows işletim sistemi için konuşuyorum. Kullanımı şu şekildedir :

unlink ("dosya.txt"

Bu kod "dosya.txt" dosyasının silinmesini sağlar. Daha önce belirttiğim gibi dosya uzantısı önemli değildir, dosya.txt yerine dosya.jpg de olabilirdi başka uzantılı bir dosya da...

Dizin okuma :

Perl ile bir dizinde mevcut tüm dosyaları değişkene atayıp ekrana yazdırabiliriz. Bunun için opendir() fonksiyonu kullanılır. opendir() fonksiyonunun 2 tane argümanı vardır; Dosya tutamacı, dosya yolu. Kullanımı şu şekildedir :

opendir (DIR, "dizin"

Bu kod ile "dizin" isimli klasörü açmış oluruz. Dizin açarken göreceli yol da kullanabiliriz. Mesela az önceki örnekte "dizin" yazan yere sadece bir nokta (.) yazarsak program içinde bulunduğu klasörü, iki nokta (..) yazarsak içinde bulunduğu klasörün bir üst klasörünü gösterir. Sözgelimi program cgi-bin/dizin içerisinde çalışıyorsa opendir (DIR, "." şeklinde bir kullanım ile cgi-bin/dizin klasörü, opendir (DIR, ".." şeklinde bir kullanımda cgi-bin dizini okunur.

Dizin opendir () fonksiyonu ile açıldıktan sonra readdir(TUTAMAC) şeklinde içeriği isteğinize bağlı olarak kullanılabilir. Buradaki tutamaç opendir () fonksiyonu kullanılırken ilk argüman olarak kullanılan isimdir. Az önceki örnekte DIR yazısıdır. readdir () fonksiyonunu sort() fonksiyonu ile birlikte kullanırsak değişken içeriği alfabetik olarak sıralanır. Şu şekilde :

opendir (DIR, "."
@dizi = sort(readdir(DIR));

Bu kod önce içinde bulunduğu klasörü (.) açar, daha sonra alfabetik olarak sıralayıp @dizi isimli dizi değişkenin içeriğine atar. Dizin içeriği açılıp değişkene atandıktan sonra (ya da başka herhangi bir işlem yapıldıktan sonra) closedir(TUTAMAC) şeklinde dizin kapatılır.

opendir (DIR, "."
@dizi = sort(readdir(DIR));
closedir (DIR);

Bu şekilde dizin içindeki her dosyayı dizi değişkenin birer elemanı halinde dizi değişkene atadıktan sonra bu dizi değişkeni kullanarak istediğimizi yapabiliriz. Örnek programda program içinde bulunduğu dizini açacak, dizi değişkene atayacak, kapatacak ve dizi değişkeni döngü ile ekrana yazdıracak :

#!/usr/bin/perl

# dizin2.cgi

use CGI qw(:standard);

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

opendir (DIR, "."
@dizin = sort(readdir(DIR));
closedir (DIR);

print " Dizin içindeki Dosyalar :";

print "<ul>";

foreach $cevir (@dizin) {

print "<li><a href=$cevir>$cevir</a><br>";

}

print "</ul>";





Perl'de modüller ve modül kullanımı :

Modüller daha önceden başkası tarafından ya da bizim tarafımızdan yazılmış, programların kullanımını ve bir takım fonksiyonları daha kolay kullanılabilir hale getiren ya da yeni fonksiyonların kullanımını sağlayan perl paketleridir. Modüller genelde *.pm uzantılı olurlar. Genel olarak iki çeşit modül vardır :

Perl'in içinde hazır olan modüller :

Perl programı kurulduğunda içinde bir çok modül paketi hazır olarak gelir. Bu modülleri ve kullanımını windows altında Başlat/programlar/ActiveState Active Perl/Documantation yoluyla öğrenebilirsiniz.

Programcı tarafından yazılan ek modüller :

Bu tip modüller programcı tarafından hazırlanır ve program ile aynı dizine modul_ismi.pm şeklinde kaydedilir. Daha sonra modülün kullanılacağı programın üst satırına (shebang'dan sonra) şu şekilde modülün kullanılacağı belirtilir :

use modul_ismi;

Daha sonra mesela modül içinde sub isim {..} şeklinde bir alt program tanımladıysanız isim(..); şeklinde modüle atıf yapibilirsiniz.

Birden fazla dosya kullanma (require komutu) :

Bazen program yazarken kodlar o kadar fazla ve karışık olurlar ki kodları bölüp ayrı ayrı dosyalardan çağırmaya ihtiyaç duyabilirsiniz. Perl ile bunu yapabilirsiniz. Bunun için yapmanız gereken tek şey diğer dosyayı çağırmadan yani diğer dosyaya atıf yapmadan önce şöyle bir kod yazmanız :

require "dosya.cgi";

Çağıracağınız dosyanın uzantısı önemli değil. Ayrıca require ile çağırılan dosyanın en altında 1; satırı olmalıdır. Bu çağıran dosyaya "true" değeri yani çağırılan dosyanın okunabildiğini belirtir.

Örnek :

"require" ile çağırılan dosya (require2.cgi) :

#!/usr/bin/perl

# require2.cgi

sub cagir {

print "Bu satırlar require2.cgi içersinde bulunmaktadır.<br>";
print "Perl ile başka bir dosyada bulunan alt programları çağırabilirsiniz<br>";
print "Bu işlem dosya boyutunu ve içeriğini düşürerek işleri kolaylaştırır.";

}

1;




require ile çağıran dosya :

#!/usr/bin/perl

# require1.cgi

require "require2.cgi";

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

print "İki çizgi arasındaki yazılar diğer dosyadan (require2.cgi) çağırılacak :<br>";
print "<hr color=black>";

&cagir;

print "<hr color=black>";






Require fonksiyonu ile başka dosyada bulunan bir alt programı &altprogram; şeklinde çağırabileceğiniz gibi, altprogram (); şeklinde de çağırabilirsiniz.



Perl ile cookie'ler :

Cookie'ler, web sayfalarında kullanılan programlar tarafından (CGI/Perl, PHP, ASP, JavaScript..) bazı işlemleri kolaylaştırmak, formları tekrar tekrar doldurma külfetinden kurtulmak ya da bir dahaki ziyarette hatırlamak üzere ziyaretcinin bilgisayarına gönderilen dosyalardır. Hemen hemen her server'da bulunan CGI.pm modülü ile cookie gönderme işlemi çok kolaylaştırılmıştır. Öncelikle CGI.pm modülünün kullanıldığını belirten kodu programın en başına yazmak gerekir

use CGI qw(:standard);

CGI.pm modülü kullanarak cookie göndermek için bir ilişkili dizi (hash) değişken oluşturulur;



$cookie = cookie(-name => "cookie_ismi",
-value => "cookie_degeri",
-path => "cookie_yolu",
-expires => "cookie_zamani"


Örnekte "name" anahtarlı bölüm cookie ismidir. Daha sonra gönderilen cookie'yi okuturken bu isim ile çağırılır. "value" değeri cookie'nin içine yazdırılacak bilgidir. Bu bilgi form vasıtası ile gelen bir değişken olabileceği gibi, programın gönderebileceği bir değer de olabilir. Buradaki "path" değeri de programın tam yoludur. Bu bölüm isteğe bağlıdır yani -path ile başlayan satır olmasa da cookie gönderilir ve okunur. "expires" değeri de cookie'nin ne kadar süre geçerli olacağıdır. Bu bölüme gelebilecek değerler şu şekildedir:

Oturumluk :

-expires => "",

"expires" değeri boş bırakılırsa bilgisayara bir oturumluk cookie gönderilir ve browser kapandığında bu cookie silinir.

Günlük :

-expires => "+1d",

"expires" değeri yukarıdaki şekilde düzenlenirse bilgisayara "d" harfinden önce yazılan rakam kadar günlük cookie gönderilir. +5d yazıldığında 5 günlük, +15d yazıldığında 15 günlük cookie gönderilir.

Aylık :

-expires => "+1M",

"expires" değeri yukarıdaki şekilde düzenlenirse bilgisayara "M" harfinden önce yazılan rakam değeri kadar aylık cookie gönderilir. +1M bir aylık, +5M beş aylık cookie gönderir.

Yıllık :

-expires => "+1y",

"expires" değeri yukarıdaki şekilde düzenlenirse bilgisayara "y" harfinden önce yazılan rakam değeri kadar yıllık cookie gönderilir. Mesela +1y yazdığımızda bir yıllık, +10y yazdığımızda 10 yıllık cookie gönderilir.

Cookie Silme :

Eğer daha önceden gönderdiğimiz bir cookie'yi geçersiz hale getirmek istiyorsak aynı cookie ismi ile "expires" değerini "now" olarak girip bu cookie'yi aynen önceki cookie'yi yazdırıyormuş gibi yazdırırız.

-expires => "now",


DEVAMI ALTTA
__________________
Biz Bu Hallere Düşecek Adammıydık ???
Alıntı ile Cevapla