Friday, 12 November 2010

ASP'de Dosya işlemleri- fso

ASP'de Dosya işlemleri

Dosya Sistemi Nesnesi (FileSystemObject) - FSO

Web Sunucusunun sabit diskinde, sürücüleri, klasörleri ve dosyaları yönetmekte kullanacağımız temel nesnedir.

Bu nesnemiz 24 metod ve 1 özellikten oluşmaktadır. Genel olarak bu nesnelere öncelikle göz atalım.

FileSystemObject Metodları

1. BuildPath (Mevcut yola isim ekler)
2. CopyFile (Dosya kopyalar)
3. CopyFolder (Klasör kopyalar)
4. CreateFolder (Klasör oluşturur)
5. CreateTextFile (Text dosyası oluşturur)
6. DeleteFile (Dosya Siler)
7. DeleteFolder (Klasör Siler)
8. DriveExists (Sürücüyü kontrol eder)
9. FileExists (Dosyayı kontrol eder)
10. FolderExists (Klasörü kontrol eder)
11. GetAbsolutePathName (Kesin yol ifadesini verir)
12. GetBaseName (Dosya veya klasörün ana ismini verir)
13. GetDrive (Yol üzerindeki sürücüyü getirir.)
14. GetDriveName (Sürücü ismini verir)
15. GetExtensionName (Dosya uzantısını verir)
16. GetFile (Yol üzerindeki dosya nesnesini verir)
17. GetFileName (Dosya ismini verir)
18. GetFolder (Yol üzerindeki klasör ismini verir)
19. GetParentFolderName (Parent klasör ismini verir)
20. GetSpecialFolder (Belirtilen klasörür geri döndürür)
21 GetTempName (Rasgele geçici (cache) bir dosya veya klasör ismi üretir)
22. MoveFile (Dosya taşır)
23. MoveFolder (Klasör taşır)
24. OpenTextFile (Text dosyası açar)

Bu metodları inceleyelim

CopyFile (dosya kopyala)

CopyFile (dosya kopyala)

Bu nesne ile Server üzerinde dosya yaratırız;

<%
Dim Kopyala
Set Kopyala=CreateObject ("Scripting.FileSystemObject")
Kopyala.CopyFile "c: netpubwwwroot spdosya.txt", "c: netpubwwwrootnedir", true
%>

Kodları inceleyelim;

Dim Kopyala

Set Kopyala=CreateObject ("Scripting.FileSystemObject")

"Kopyala" isimli bir değişken yaratmıştık. Ve bu değişkeni FileSystemObject nesnesinde kullanacağımızı belirlemiştik.

Kopyala.CopyFile "c: netpubwwwroot spdosya.txt", "c: netpubwwwrootnedir", true

"Asp" dizini olarak yerini belirlediğimiz dosyayı kopyalıyoruz ve "nedir" dizinine yapıştırıyoruz.

Nasıl yapacağımızı öğrendik fakat dikkat etmemiz gereken bir nokta var örnekteki "nedir" dizini server da yoksa hata mesajı ile karşılaşırsınız.

CopyFolder

CopyFolder

Belirtilen bir hedef klasörü tüm alt klasörleri ve dosyaları ile birlikte belirtilen bir hedef klasöre kopyalar.

FSO.CopyFolder KaynakKlasor,Hedef,Overwrite

KaynakKlasor kopyalanacak olan klasör, Hedef kaynak klasörün kopyalanacağı hedef klasördür. Overwrite ise True veya False değerlerini alarak eğer klasör var ise klasörün üzerine yazılıp yazılmayacağını belirler. True olursa üzerine yazılır. False olursa yazılmaz. Eğer belirtilmez ise varsayılan olarak True kabul edilir.

<%
FSO.CopyFolder "C:Windows","D:Deneme",True
%>

Bu kod C sürücüsündeki Windows klasörünü tüm içeriğiyle beraber D sürücüsündeki Deneme isimli klasörün içine kopyalar.Hedef belirtilirken sonunda slash kullanıldığına dikkat edin. Eğer slash kullanmazsanız Windows klasörünün içeriği(kendisi değil) Deneme klasörüne kopyalanır.

<%
FSO.CopyFolder "C:Deneme*","D:Deneme"
'veya
FSO.CopyFolder "C:Deneme*","D:Deneme"
%>

Bu şekilde C sürücüsündeki Deneme klasörünün sadece alt klasörleri D sürücüsündeki Deneme klasörüne kopyalanır.

Eğer hedef olarak verdiğiniz klasör yok ise oluşturulur ve kaynak klasörün içeriği buraya kaydedilir. Yani farklı kaydetme olayı. Mesela D sürücüsünde WinXP isimli bir klasör yok diyelim.

<%
FSO.CopyFolder "C:Windows","D:WinXP"
%>

Bu durumda C sürücüsündeki Windows klasörü D sürücüsüne WinXP ismiyle kaydedilir. Hedef klasör belirtilirken yine slash kullanılmadığına dikkat edin.

Eğer XYZ klasörü yoksa

<%
FSO.CopyFolder "C:Windows","D:XYZWinXP"
%>

derseniz hata alırsınız. FSO sizin için bir XYZ klasörü oluşturup bunun içine WinXP'yi oluşturmaz. Ama eğer XYZ klasörü varsa WinXP klasörü yoksa bu oluşturulur ve kaynak klasör içeriği bunun içine kopyalanır. Eğer WinXP klasörü de varsa bu durumda, yukarda belirtildiği gibi, sonda slash kullanılıp kullanılmadığına bağlı olarak kaynak klasör aynı isimle klasör yapısı korunarak veya sadece içeriğiyle bu klasör içine kopyalanır.

NOT : FSO ile bu şekilde klasör kopyalayacağınız gibi "FSO ile klasör işlemleri" konusunda göreceğiniz gibi GetFolder ile klasörü bir nesneye atayıp "KlasorNesnesi.Copy Hedef" şeklinde de kopyalayabilirsiniz. Ancak bu şekilde tek bir klasör kopyalayabilirsiniz.

<%
FSO.CopyFolder "C:Windows" , "D:Deneme", True(False)
%>

ile

<%
Set Klasor = FSO.GetFolder("C:Windows")
Klasor.Copy "D:Deneme", True(False)
%>

aynı işi görür.

CreateFolder

CreateFolder

Adından anlayacağınız gibi verdiğiniz klasör içinde verdiğiniz isimde boş bir klasör oluşturur.

FSO.CreateFolder YeniKlasor

True/False şeklinde bir argümanı yoktur. Eğer oluşturulmak istenen klasör varsa hata verir.

<%
FSO.CreateFolder "C:Deneme"
%>

C sürücüsünde Deneme isimli bir klasör oluşturur

<%
FSO.CreateFolder "C:MetinAksu"
%>

Eğer C sürücünde Metin isimli bir klasör varsa içine Aksu isminde bir klasör oluşturur. Eğer yoksa yol bulunamadı hatası verir.

<%
FSO.CreateFolder "C:WindowsSystem32MetinAksu"
%>

System32 klasörü içinde MetinAksu isminde bir klasör oluşturur.

DeleteFolder

DeleteFolder

Belirlediğimiz dizindeki herhangi bir klasörü silmemizi sağlar.

<%
Dim Sil
Set Sil=CreateObject ("Scripting.FileSystemObject")
Sil.DeleteFolder ("c: netpubwwwroot spnedirdeneme")
%>

Buradaki kodlar "aspnedir" dizindeki "deneme" isimli klasörü siler.

DriveExists

Belirttiğiniz sürücünün var olup olmadığını test eder. Eğer var ise True yoksa False değeri döndürür.

CreateTextFile

Metin Dosyası Oluşturma

(CreateTextFile)

İstediğiniz dizinde adını belirleyebileceğiniz, içine yazı da yazabileceğimiz bir text dosyası yaratmamızı sağlar. (Bu Şekilde ASP sayfaları sayesinde sunucu üzerinde bir text dosyası oluşturulur yada bu text dosyasına ek yapabiliriz) Vereceğimiz örnekte yaratılacak text dosyasının uzantısını .txt olarak belirledik siz bunu .asp,.inc,.aspx vs.. olarak ta yapabilirsiniz hatta yarattığınız dosyanın içine asp kodları da yazdırabilirsiniz.

Bu sayfa açıldığı anda sunucu üzerinde bir text dosyası oluşturulacak ve içerisine yazı yazılacaktır.

<%
Dim fso, MyFile

Set fso = CreateObject("Scripting.FileSystemObject")

Set MyFile = fso.CreateTextFile("c:testfile.txt", True)

MyFile.WriteLine("Test Yazımız.")

MyFile.Close

%>

CreateTextFile (metin dosyası oluştur) bu metoda argüman olarak yeni metin dosyasının yolunu ve adını veriyorduk

WriteLine (satır yaz: bir String’i sonuna yeni satır karakteri koyarak dosyaya yazar)

Close (kapat: açılan metin dosyasını kapatır).

TextStream’in burada kullandığımız ikisinin dışında iki metodu daha vardır:

Write (yaz): Bir String’i dosyaya yazdırır; satır sonuna yeni satır karakteri (Return kodu) koymaz.

WriteBlankLines (boş satır yaz): Bir metin dosyasına argüman olarak vereceğiniz sayıda boş satır yazdırır.

Kodları denerken dikkat etmeniz gereken klasörün yolunu doğru vermektir.

DeleteFile

DeleteFile

Daha önceden belirlediğimiz dosyayı silmemizi sağlar.

<%
Dim Sil
Set Sil=CreateObject ("Scripting.FileSystemObject")
Sil.DeleteFile ("c: netpubwwwroot spnedirdeneme.txt")
%>

Buradaki kodlar ile "aspnedir" dizindeki deneme.txt ismindeki dosyayı siliyoruz.

FSO.DriveExists

FSO.DriveExists("Sürücü Harfi")

Verilecek değer Windows'un sürücüleri isimlendirme kurallarına uymalıdır. Yani bir sürücüyü ifade etmek için harf kullanmalısınız. Aksi takdirde çıktı olarak her zaman False değeri döndürür.

<%
Response.Write FSO.DriveExists("C")
%>

Ekrana True yazdıracaktır.

<%
Response.Write FSO.DriveExists("Z")
%>

Eğer hard diskinizi paramparça etmediyseniz False değeri döndürecektir. :)))))

Sürücü harfini tek başına yada önüne : veya : veya :/ konmuş şekilde kullanabilirsiniz.

<%
FSO.DriveExists("C")
FSO.DriveExists("C:")
FSO.DriveExists("C:")
FSO.DriveExists("C:/")
%>

Yukarıdaki kullanımların hepsi geçerlidir.

FileExist

FileExist

Bu nesnemiz server da belirlediğiniz isimli bir dosya olup olmadığını kontrol eder.

<%
Dim Kontrol
Set Kontrol=Server.CreateObject("Scripting.FileSystemObject")
If Kontrol.FileExists ("c: netpubwwwroot spnedirdeneme.txt") = true then
Response.Write ("deneme.txt dosyası bulundu!")

Else
Response.Write ("deneme.txt dosyası bulunamadı!")
End If
Set Kontrol=Nothing
%>

FolderExist

FolderExist

Bu nesnemiz server da belirlediğiniz isimli bir klasör olup olmadığını kontrol eder.

<%
Dim Kontrol
Set Kontrol=Server.CreateObject("Scripting.FileSystemObject")
If Kontrol.FolderExists ("c: netpubwwwroot spnedirdeneme") = true then
Response.Write ("deneme klasörü bilgisayarda bulundu.")

Else
Response.Write ("deneme klasörü bilgisayarda bulunamadı!")
End If

Set Kontrol=Nothing
%>

GetAbsolutePathName

GetAbsolutePathName

Verdiğiniz bir yol için sürücünün root dizininden Windows isimlendirme kuralına göre tam yolu getirir. Verdiğiniz yolun geçerli olup olmaması yada Windows standartlarına uyması önemli değildir. Çünkü bu metot string üzerinde işlem yapar.

FSO.GetAbsolutePathName("yol")

<%
Response.Write FSO.GetAbsolutePathName("C:Inetpubwwwroot")
Response.Write FSO.GetAbsolutePathName("C:Inetpubwwwroot")
Response.Write FSO.GetAbsolutePathName("C:Inetpubwwwroot/")
Response.Write FSO.GetAbsolutePathName("C:/Inetpub/wwwroot/")
%>

Hepsinin de çıktısı "C:Inetpubwwwroot" şeklinde olur.

<%
Response.Write FSO.GetAbsolutePathName("C:Metin/Aksu/deneme.abcdefg")
%>

Çıktısı "C:MetinAksudeneme.abcdefg" şeklinde olur.

<%
Response.Write FSO.GetAbsolutePathName(Server.Mappath("/Deneme"))
%>

Çıktısı "C:InetpubwwwrootDeneme" olur.

GetBaseName

GetBaseName

Verdiğiniz bir yoldaki dosya yada klasörün taban adını getirir. Verdiğiniz yolun geçerli olması yada Windows standartlarına uyması önemli değildir. Çünkü bu metotta string üzerinde işlem yapar.

FSO.GetBaseName("yol")

<%
Response.Write FSO.GetBaseName("C:MetinAksudeneme ndex")
Response.Write FSO.GetBaseName("C:MetinAksudeneme ndex")
Response.Write FSO.GetBaseName("C:MetinAksudeneme ndex.asp")
Response.Write FSO.GetBaseName("C:MetinAksudeneme ndex.asp")
Response.Write FSO.GetBaseName("deneme ndex")
Response.Write FSO.GetBaseName("deneme ndex.asp")
Response.Write FSO.GetBaseName("index.asp")

Response.Write FSO.GetBaseName(Server.Mappath("index"))
Response.Write FSO.GetBaseName(Server.Mappath("index.asp"))
%>

Hepsinin çıktısı "index" olur.

Move File

Move File

Bu nesne ile Server'da bulunan bir dosyayı başka bir dizine taşıyabiliriz

<%
Dim Tasi
Set Tasi=Server.CreateObject ("Scripting.FileSystemObject")
Tasi.MoveFile "C: netpubwwwroot spDeneme.txt","C: netpubwwwrootnedir"
Set Tasi=Nothing
%>

Bu kodu yazıp çalıştırırsanız, önceden belirlediğimiz dosya kontrol edilir eğer orada bulunursa dosyayı alarak yine önceden belirlediğiniz dizine taşır.

MoveFolder

MoveFolder

Herhangi bir klasörü belirlediğiniz bir klasöre taşımımızı sağlar.

<%
Dim Tasi
Set Tasi=CreateObject ("Scripting.FileSystemObject")
Tasi.MoveFolder "c:Inetpubwwwroot sp", "c:Inetpubwwwrootnedir", true
%>

Bu işlem için taşınacak kaynak klasörü belirtirken sonuna slash() koymuyoruz. Koyarsak yol bulunamadı hatası verir. c:Inetpubwwwroot sp olduğu gibi.
Taşınacak klasör için bu sınırlama yok. "c:Inetpubwwwrootnedir” yada “c:Inetpubwwwrootnedir"şeklinde yazabilirsiniz.

“asp” klasörü içindeki alt klasörleri “nadir” klasörüne taşınır. asp klasörünün kendisi ve içindeki dosyaları ise taşınmaz.

GetTempName

GetTempName

Geçici bir dosya için .tmp uzantılı rastgele bir dosya adı üretir. Dosya ismi başında "rad" sözcüğü bulunur. Bu rastgele uzantılı dosya oluşturulmaz. Sadece dosya adı üretir. Siz bu ismi CreateTextFile ile dosya oluştururken kullanabilirsiniz.

FSO.GetTempName

<%
Response.Write FSO.GetTempName
%>

Çıktısı "A9932" kısmı her seferinde değişmek kaydıyla "radA9932.tmp" gibi olur.

GetSpecialFolder

GetSpecialFolder

Vereceğiniz 0,1 veya 2 sayısı için Windows özel dizinlerini döndürür. Bu üç sayı dışında argüman kabul etmez.

FSO.GetSpecialFolder(sayı)

0 = "C:WINDOWS"
1 = "C:WINDOWS ystem32"
2 = "C:WINDOWSTemp"

<%
Response.Write FSO.GetSpecialFolder(1)
%>

Çıktısı "C:WINDOWS ystem32" olur.

GetParentFolderName

GetParentFolderName

Verdiğiniz bir yol ifadesi için o yolun en son dosyasının veya klasörünün içinde bulunduğu klasör ismini döndürür. Yol ifadesinin geçerli olması gerekmez.

FSO.GetParentFolderName("Yol")

<%
Response.Write FSO.GetParentFolderName("C:MetinAksu ndex.asp")
Response.Write FSO.GetParentFolderName("C:MetinAksu/index.xghdmhgghf")
%>

Her ikisinin de çıktısı "C:MetinAksu" olur.

<%
Response.Write FSO.GetParentFolderName("C:MetinAksu")
Response.Write FSO.GetParentFolderName("C:MetinAksu")
Response.Write FSO.GetParentFolderName("C:MetinAksu/")
%>

Üçünün de çıktısı "C:Metin" olur.

<%
Response.Write FSO.GetParentFolderName("GiresunMetinAksu")
Response.Write FSO.GetParentFolderName("GiresunMetinAksu")
%>

Çıktıları "GiresunMetin" olur.

GetFileName

GetFileName

Verdiğiniz bir string ifadesi içinde ki en son bileşenin uzantısıyla beraber ismini verir. Eğer uzantı yoksa sadece ismini verir. GetBaseName dosya ismini veriyor, uzantısını vermiyordu. GetFileName uzantısıyla beraber dosya ismini verir. Verdiğiniz stringin geçerli bir yol ifadesi olması gerekmez. Bu yöntemde string üzerinde işlem yapar.

FSO.GetFileName("İfade")

<%
Response.Write FSO.GetFileName("C:Deneme ndex.asp")
Response.Write FSO.GetFileName("C:Deneme ndex.asp")
Response.Write FSO.GetFileName("sf4574356754 ndex.asp")
%>

Çıktıları "index.asp" olur.

<%
Response.Write FSO.GetFileName("C:Deneme ndex")
Response.Write FSO.GetFileName("C:Deneme ndex")
Response.Write FSO.GetFileName("sf4574356754 ndex")
%>

Çıktıları "index" olur.

GetFileVersion

Exe, dll gibi dosya versiyonu bilgisini taşıyan dosyalarda dosyanın sürüm numarasını verir. Verilen dosya yolu ifadesi geçerli olmalıdır. Eğer yol geçerli değilse yada dosya sürüm bilgisi taşımıyorsa boş değer döner.

FSO.GetFileVersion("Dosya Yolu")

<%
Response.Write FSO.GetFileVersion("C:Program FilesAheadNeroAudioPluginMgr.dll")
%>

Benim sistemimde çıktısı "2.0.0.2" şeklinde.

<%
Response.Write FSO.GetFileVersion("C:Program FilesAheadNeronero.exe")
%>

Çıktı "5.5.9.9" şeklinde.

GetFolder

GetFolder

Belirttiğiniz bir klasör için üzerinde işlemler yapılabilen bir klasör nesnesi oluşturur. Klasör geçerli olmalıdır.

Set Klasor = FSO.GetFolder("Klasör Yolu")

GetFile

GetFile

Belirttiğiniz bir dosya için üzerinde işlemler yapılabilen bir dosya nesnesi oluşturur. Dosya geçerli olmalıdır.

Set Dosya = FSO.GetFile("Dosya Yolu")

GetExtensionName

GetExtensionName

Verdiğiniz string içinde en son bileşenin uzantısını verir. Verdiğiniz stringin geçerli bir yol ifadesi olması yada dosya uzantısının geçerli bir uzantı olması gerekmez. Kısacası verdiğiniz string içindeki son noktadan sonraki kısmı verir.

FSO.GetExtensionName("string")

<%
Response.Write FSO.GetExtensionName("C:Deneme ndex.asp")
%>

Çıktısı "asp"

<%
Response.Write FSO.GetExtensionName("C:Deneme ndex.metin")
%>

Çıktısı "metin"

<%
Response.Write FSO.GetExtensionName("ahmetmehmet üleyman.hilmi")
%>

Çıktısı "hilmi"

<%
Response.Write FSO.GetExtensionName("ahmetmehmet üleyman.hilmi.fikri.zikri")
%>

Çıktısı "zikri"

GetDriveName

GetDriveName

Verdiğiniz bir yol stringi için sürücü harfini içeren bir string döndürür. Verdiğiniz yolun geçerli olması önemli değildir. Ancak sürücü harfinden sonra (:) olmalıdır.

FSO.GetDriveName("Yol")

<%
Response.Write FSO.GetDriveName("z:")
Response.Write FSO.GetDriveName("z:")
Response.Write FSO.GetDriveName("z:/")
Response.Write FSO.GetDriveName("z: fgjcvmnc")
Response.Write FSO.GetDriveName("z:sfgjcvmnc")
Response.Write FSO.GetDriveName("z:/sfghdf")
%>

Hepsinin çıktısı "z:" olur.

<%
Response.Write FSO.GetDriveName(Server.Mappath("/"))
%>

Çıktısı "C:" olur.

GetDrive

GetDrive

Verdiğiniz bir sürücü harfi için o harfe sahip sürücü üzerinde işlemler yapılabilen bir sürücü nesnesi döndürür. Sürücü geçerli olmalıdır.

Set Surucu = FSO.GetDrive("Sürücü Harfi")

OpenTextFile

OpenTextFile ; TextStream Nesnesi bölümde ayrıntıları bulabilirsiniz.

Drives :

Sürücü Koleksiyonu

Bir bilgisayar üzerindeki tüm sürücüleri içeren bir dizi değişken döndürür

<%
Dim DosyaSistemi, Surucu, Suruculer
Set DosyaSistemi = CreateObject("Scripting.FileSystemObject")
Set Suruculer = DosyaSistemi.Drives
For Each Surucu In Suruculer
%>
<b>Sürücü:</b> <%=Surucu.DriveLetter%><br>
<% If Surucu.IsReady = True Then%>
<b>Disk Adı:</b> <%=Surucu.VolumeName%><br>
<b>Boş alan:</b> <%=Surucu.FreeSpace%><br>
<% Else %>
<i>Sürücü hazır değil!</i><br>
<% End If
Next %>

Yukardaki Örnek sunucunun disk-disket-CD-ROM durumunu size listeleyecektir

Components (ASP Bileşenleri)

Asp Components (ASP Bileşenleri)

Herkese Merhabalar...

Kuşkusuz ASP deki Sunucu objeleri ASP programcıları için bulunmaz bir nimet. Çünkü bunlar ASP yi zenginleştiren ve daha interactive yapan öğelerdir. Nelerdir bunlar ?

ASP nin normalde standart onbir tane sunucu bileşeni vardır.

Bunlar;

-Ad Rotator Bileşeni
-Browser Capabilities Bileşeni
-Content Linking bileşeni
-Content Rotator Bleşeni
-Page Counter Bilşeni
-Permission Checker Bileşeni
-Counters Bileşeni
-MyInfo Bileşeni
-Tools Bileşeni
-Status Bileşeni

Bunlar tabii Microsoft ile beraber gelen standart IIS bileşenleridir. Hepsi bunlarla sınırlı değil tabii. ıleri seviye olarak kendi Bileşenlerinizi bile yazabilirsiniz. Bunu VB 6.0 da ActiveX bileşenleri olarak yaratabilir ve derleyebilirsiniz. Birde hazır ticari amaçla yapılmış sunucu bileşenleri vardır, bunlarda Sunucu sahipleri tarafından Sunuculara kurulup hizmete sunulan bileşenlerdir. Bunlarada 3.parti sunucu bileşenleri olaral adlandırabiliriz. File Uploader, Mail sender, Asp Tear gibi değişik bileşenler buna örnek olabilir. Biz burda kısaca Standart sunucu bileşenlere göz atacağız.

* Ad Rotator Bileşeni:

Bu bileşen, bizlere ASP sayfalarımızda değişik imajlar yahut Grafikler göstermemize olanak sağlayan bir bileşendir.Daha ziyade ticari amaçlar için kullanılabilir diyebiliriz. Her defasında eriştiğimizde değişen Banner lar buna güzel bir örnek teşkil ediyor. Sadece Banner grafiklerini değiştirmeklede kalmayıp, bunlara kaçar defa tıklandığını sayabilen ve birtakımistatistiklerde tutabilen bir bileşendir. Bileşen nesnesinin kullanım şekli;

<% Set NesneAdRotator = Server.CreateObject("MSWC")%> dir.

Genelde bu bileşenin kullanım amacı yukarıda belirttiğim gibi Ticari kullanımdır. Bu tür bir obje yaratmak için birden fazla <br>
adım gerektirir. Öncelikle bileşen nesnesini oluştururuz ve daha sonrası Ad Rotator Schedule dosyasını yaratırız. Bu bileşen Adrot.dll içinde oluşturulur.

* Browser Capabilities Bileşeni:

Bu bileşen, bize sayfalarımıza gelen ziyaretcilerin kullnadıkları Tarayıcılar (Browser) hakkında bir fikir verir. Her ne kadar IE ve Netscape en çok kullanılan Tarayıcılar olsalar bile diğer başka Tarayıcılarda mevcuttur. ışte bu tüm Tarayıcların desteklediği Html tagları, javascripler, ActiveX ler vs. vardır. Bu konu hakkında (destekleme konusu) Browscap.ini dosyasını incelemenizi ve araştırmanzı önerebilirim. Win 98 de Windows/system directory sinde NT de ise Winnt/system32 klasörünün nün içinde bulunur. Ayarları ile oynamamnızı öneririm :)

İşte bu bileşen ile bir tarayıcının hangi özellikleri desteklediğini öğrenebiliriz. Bunu HTTP başlığını kullanarak user agent dediğimiz ve içerdiği Server Variables ile sağlayabiliriz.

<% = Request.Server.Variables("HTTP_USER_AGENT")

* Content Linking bileşeni:

Bu aslında basit ama faydalı bir Bileşendir. Bunu, esasen bir kitapdaki index sayfası gibi görebilirsiniz. Bulunduğumuz bir sayfanın içinden Sitede bulunan diğer linkleri gösteren ve içerisinde bize ileri veya geri hareket etmemizi sağlar. Kullanım şekli aşağıdaki gibidir;

<% Set NesneSonrakiSay = Server.CreateObject("MSWC.nextLink")Kısa bir örnek ile bunu açıklayalım:
<% Set SonrakiSay = Server.CreateObject("MSWC.nextLink")
zCounter = SonrakiSay.GetListCount("index.txt")
For z = 1 To zCounter
%>

* Content Rotator Bileşeni:

Ad Rotator Bileşeninin daha basit bir şeklidir. Grafikleri değil, text içerikli dosyalara aynı desteği sağlar.(bkz.Ad Rotator Bileşeni)

* Page Counter Bilşeni:

Bu Bileşen hakkında Aspnedir.com da tarafımdan yazılmış başlıbaşına bir makale mevcut.

* Permission Checker Bileşeni :

Bu bileşen bir kullanıcının herhangi bir dosyayı okuması için yetkisi olup olmadığını kontrol eder, ve IIS in şifre doğrulama özelliğini kullanarak çalışır. Kısacası, bir sitede farklı kullanıcılar için sayfaları yetkiye göre izlenip izlenememesini ayarlayabilirsiniz. Anonim, Basic ve NTML şeklinde üç değişik şifre kontrolü sağlamak mümkündür.

* My Info Bileşeni :

Bu bileşen, Server yöneticisi tarafından sağlanan kşişsel bilgilerin saklanması için kullanılır. Yani içerik, e-mail, adres vs. tipi bilgiler tutlduğu, parametre olarak oluşturulan bir formdur. Hani bilirsiniz, makinanıza PWS yada IIS kurarken, ilk bir default page oluşturulur. ışte bu MyInfo bunu ta kendisidir. Burda kişisel bilgiler bulunur. Bu bilgiler MyInfo.xml adlı bir dosyada tutulur. Peki web de bunun bize faydası nedir? Faydası, mesela sayfalarda e-mail adresi oluşturdunuz. Myinfo daki mail adresini değiştirdiğiniz zaman tüm asp sayfalarındaki mail adresiniz değişmiş olur. Tabii bunu Html deki css ile karıştırmıyoruz.

rneğin:

<%
var ref = '<a href = "mailto:" response.write(ref+MyInfo.Email'">+'Mail'+'</a>')%>bu şekilde <a> .... </a> arasında kalan kısmı oluşturmuş olursunuz. xml özelliğini kullanarak kendi etiketlerinizide kullanabilirsiniz.

* Tools Bileşeni :

<% Set Tool = server.CreateObject("MSWC") %>

Bu bileşen bizlere, aps ye bazı fonksiyonlar yani ek işlevsellikler eklememize olanak tanır. Mesela, Tools.FileExist metodu ile dosyaların var olup olmadığını kontrol edebiliriz.Sunucu pluf inlerini kontrol edebilir veyada Bir Html formunu oluşturabilirsiniz.

* Status Bileşeni :

Bu bileşen, server durum bilgsinini içeren bir nesne oluşturur. Yani server durumunu bildirir.

ODBC ve OLE-DB

Asp ODBC ve OLE-DB

ODBC, ADO'nun kullandığı tek sistem değildir; ve Microsoft firması, ODBC'nin yerine hızla OLE-DB adını verdiği yeni bir teknolojinin alması için yoğun çaba içinde. OLE-DB, ODBC'nin Web'de sağladığı başarının üzerine bina edilen yeni bir teknoloji. ODBC, ilişkilendirilmiş (relational) veritabanlarına erişmek üzere tasarlandığı halde OLE-DB her türlü veritabanına erişebilir. OLE-DB, ASP programlarımıza yeni nesneler kazandırabilir; kullanılmaya hazır elektronik ticaret bileşenlerini kullanmaya imkan verir. Bu konuda geniş bilgiyi, Microsoft'tan edirebilirsiniz. ASP sayfalarımızda kullanacağımız ADO nesneleri ilerde de ODBC sürücülerine erişme imkanını koruyacağı için, şimdilik sadece ODBC tekniği ile çalışmakta ve bu tekniği öğrenmekte sakınca yok. OLE-DB, ODBC'nin yerini almayacak; fakat içinde ODBC'yi de bulunduracak. Bu da şu anda oluşturacağımız ASP uygulamalarının ilerde OLE-DB tekniği ile çalışan sunucularda işleyeceği anlamına geliyor.

Application nesnesi

Application nesnesi

Yığın halinde tek başlarına çalışabilen asp uygulamarımızı birbirleriyle ilişkilendirmek Application nesnesi ile mümkündür. Application nesnesi aynen session nesnesi gibi calışmaktadır. Tek farkı Application nesnesi global bir nesnedir. Bütün kullanıcılar aynı Application nesnesini kullanabilirler.

Application Nesnesi global düzeyde oldugu icin her zaman global.asa dosyası altında tutulur.

Şimdi örnek kodumuzu inceliyelim:

Burada gösterilen kod günümüzde asp çatısı altında bulunan hemen hemen her sitede kullanılmaktadır. Sitemizde şuanda kaç kişi var?

**********************************************************

Global.asa Dosyasının görünümü:

<SCRIPT LANGUAGE="VBScript" RUNAT="Server">

Sub Application_OnStart

'Eğer aktif bir application yoksa bu demektir ki application nesnesi ilk defa başlıyor.

'Buna bağlı olarak aktif kullanıcı sayımızı sıfırlıyoruz.

Application("AktifKullanici") = 0
end Sub
Sub session_OnStart

'Her yeni kullanıcı için açılan session nesnesine tekil dosyalardan olduğu gibi
'buradanda değer verebiliriz.

session.Timeout = 20

'kullanıcının session nesnesinin değer dışı kalma süresi

session("baslangic") = Now

' ornek olarak her kullanıcının session nesnesinde baslangıç degişkenine zamanı değer olarak yazdırıyoruz.

Application.Lock

'Application.Lock application nesnesini kitler. Bu işlemi yapmamızın sebebi ise application nesnesine değer atarken başka bir kullanıcının application nesnesini degistirmemesini saglamak.

Application("AktifKullanici") = Application("AktifKullanici ") + 1
Application.UnLock

've tekrar UnLock ile application nesnemizi serbest birakiyoruz.

end Sub
Sub session_Onend
Application.Lock

'Kullanıcının session I bittiği takdirde application nesnesini kitliyoruz ve yeni degerimizi veriyoruz.

Application("AktifKullanici") = Application("AktifKullanici") - 1
Application.UnLock
end Sub
</SCRIPT>

**************************************************************

Peki bunu sayfada nasıl göstereceğiz? –

Bunuda aynen session nesnesini kullandıgımız gibi kullanıyoruz. Ornek:

<%=Application(“AktifKullanici”)%> kisi su anda sayfamizda.

Asp Appication Nedir?

ASP'nin varlık sebebi, standart CGI'ın yetersiz kaldığı noktalardan biri olan Web Server'ın her bir Web ziyaretçiyi oturumunun başından sonuna izleyebilmesi içindir, dersek durumu abartmış olmayız. ASP açısından, bir site "uygulama programı" (Application) sayılır. Her ziyaretçi de bir "oturum" (session) sayılır. Bir takım ASP ve HTML sayfalarından oluşan bildiğimiz Site'ye application, her hangi bir ziyarete de session denmesinin sebebi nedir? Bunu her iki nesnenin işlevleri ile açıklayabiliriz.

Application nesnesi, sitenin tümüyle ilgili bilgileri (değişkenleri, nesneleri ve metodları) tutar; session nesnesi ziyaretçinin sitemize girmesinden itibaren izini sürer. Diyelim ki bir borsa sitesi yaptınız; ziyaretçileriniz gelerek, satışa sunulan hisse senetlerinin değerlendirmelerini okuyacak ve size "Şu, şu hisse senetleri al!" diye talimat bırakacak. Bütün ziyaretçilerinizin erişeceği sadece bir veritabanınız var; buna karşılık her bir ziyaretçinin yapacağı farklı tercihler, vereceği farklı kararlar olacaktır. Application nesnesi, sitenizle (artık site yerine Web Uygulama Programı desek de ağzımız alışmaya başlasa!) veritabanına erişmekten tutun, alışverişlerie kadar sitede yapılacak bütün işlerin bütün kurallarını bilecek ve uygulayacak; session nesnesi ise sözgelimi benim alışverişlerimi, tercihlerimi bilecektir.

HTML ve Javascript ile biraz oynadıysanız, bilirsiniz ki bir sayfadan ötekine değişken değeri aktarmak, imkansıza yakın derecede zordur. Değişkenlerin ömrü, fonksiyonla sınırlıdır. Bir ASP sayfasında herhangi bir değişkeni fonksiyon dışında tanımlamakla ve değer atamakla onu bütün fonksiyonlar için geçerli hale getirebiliriz. Fakat kimi zaman isteriz ki, bir fonksiyonun değeri bütün sayfalarda aynı olsun; ziyaretçinin sayfa değiştirmesi ile değişkenin değeri değişmesin. Bunu ASP'de yapmak çok kolaydır. ASP'de bu zorluğu yenebilmek için değişkenlerimizi session nesnesi için oluşturabiliriz; ve bu değer ziyaretçinin oturumu boyunca devam eder; bütün ASP sayfalarındaki bütün Fonksiyonlar tarafından bilinebilir. Örneğin:

session ("Tupras") = 44500
bütün session için geçerli bir Tupras değişkeni oluşturur ve ona "44500" değerini atar. Kimi zaman, değişkenin çok daha geniş kapsamlı olmasını, yani ömrünün session ile değil bütün Application boyunca belirli olmasını isteyebiliriz. O zaman bu değişkeni Application düzeyinde tanımlayabiliriz:

Application ("Tupras") = 44500
Bu durumda Tupras değişkeni bütün ziyaretçiler için aynı değere sahip olacakatır.

session nesnesinin oluşabilmesi için, ziyaretçiye mutlaka bir Cookie göndererek, sitemizde (hani "Uygulama Programı" diyecektik?) bir işaret vermemiz gerekir. Daha önce, HTTP ile kurduğumuz bağlantı, belirsiz durum bağlantısıdır demiştik. Bu, Server'ın bir ziyaretçiye arzu ettiği sayfayı gönderdikten sonra, onu alıp almadığını, o sayfada ne tercihler yaptığını bilmemesi demektir. Oysa, ziyaretçiye sitemize bağlandığı anda bir session kimliği verirsek ve her yeni sayfa talebinde bu kimliği kontrol edersek, kimin hangi oturumunu sürdürdüğünü biliriz. ASP-uyumlu bir Web Server, ziyaretçi yeni bir tercih yapmadığı taktirde her session nesnesini 20 dakika açık tutar; sonra siler. Bu süreyi session nesnesinin Timeout özelliği yoluyla değiştirebilirsiniz. session belirleyen Cookie ASP-uyumlu Web Server tarafından otomatik olarak gönderilir ve takip edilir; tasarımcı olarak bizim bu konuda bir şey yapmamız gerekmez.

Bir Web programınıza aynı anda kaç kişi ulaşırsa (yani sayfalarınızı kaç kişi talep ederse), o kadar session nesnesi oluşur; fakat siteniz bir adet olduğuna göre bir adet Application nesnesi vardır. Bu nesnenin bütün session'lar için sitemizin ihtiyaçlarına uygun ve aynı uygulama kurallarına sahip olmasını sağlayan bir dosya vardır: Global.asa. Bu dosya PWS veya IIS kurulurken oluşturulur. ASP ile Web programlarınızı, örneğin MS Visual Studio ile oluşturuyorsanız, program sizin için seçtiğiniz dizinde bir Global.asa dosyası oluşturacaktır. Bu dosyada, çoğu zaman, sitemize ilk ziyaretçinin gelmesiyle oluşan Application_OnStart ve son ziyaretçinin çıkmasıyla oluşan Application_Onend ile herhangi bir ziyaretçinin bir sayfaya erişmesiyle oluşan session_OnStart ve ziyaretçinin sitemizden çıkması ile oluşan session_Onend olayları halinde ne yapılacağı yazılıdır. Bu dosyanın içeriği standart bir ASP dosyasına benzemekle birlikte adındaki uzatmanın .asp değil de .asa olmasının sebebi, dosyanın Active Server Application dosyası olmasıdır. ASP-uyumlu bir Web Server programı sitemize ulaşan ilk ziyaretçiyi gördüğü anda Global.asa dosyasını çalıştırır.

Application ve session nesnelerin kendi başlarına en çok kullanıldığı yer, sitemize gelen ziyaretçilerin sayısını (sitemizin aldığı Hit sayısını) tutmasını sağlamaktır. Bu genellikle Global.asa pogramına bir sayaç yerleştirilerek yapılır.