ASP sendiri tidak mendukung penyertaan file secara dinamis. Penyertaan dinamis saat ini menggunakan FSO untuk menggabungkan file yang disertakan ke dalam file utama dan kemudian menjalankannya. Berikut ini, metode penyertaan file biasa dalam bentuk <!--#include file="filename.asp" --> juga disebut "referensi tradisional", dan file penyertaan dinamis yang diimplementasikan oleh fungsi disebut "referensi dinamis ". Program yang umum adalah sebagai berikut:
Fungsi include (nama file)
Redupkan ulang,konten,fso,f,aspStart,aspEnd
set fso=CreateObject("Scripting.FileSystemObject")
set f=fso.OpenTextFile(server.mappath(nama file))
konten=f.BacaSemua
f.tutup
atur f=tidak ada
setel fso=tidak ada
setel ulang=RegExp baru
re.pattern="^s*="
aspEnd=1
aspStart=inStr(aspEnd,konten,"<%")+2
lakukan saat aspStart>aspEnd+1
Respon.tulis Pertengahan(konten,aspEnd,aspStart-aspEnd-2)
aspEnd=inStr(aspStart,konten,"%>")+2
Jalankan(re.replace(Mid(content,aspStart,aspEnd-aspStart-2),"Respon.Write "))
aspStart=inStr(aspEnd,konten,"<%")+2
lingkaran
Respon.tulis Pertengahan(konten,aspEnd)
atur kembali=tidak ada
Fungsi Akhir
: include("youinc.asp")
Namun, fungsi ini tidak berfungsi bila ada file yang disertakan dalam file yang disertakan. Berdasarkan fungsi di atas, saya meningkatkan fungsi berikut. Pada file yang disertakan, ada juga file include normal <!--#include file="filename.asp" --> yang juga dapat berjalan normal.
Fungsi includeconvert(oRegExp, strFilename, strBlock)
Redupkan incStart, incEnd, match, oMatches, str, code
'Ekstrak nama file dari bagian penyertaan dengan cara yang sama seperti kode ASP, dan keluaran sisanya apa adanya
kode = ""
incEnd = 1
incStart = InStr(incEnd,strBlock,"<!--#include ") + 13 'Untuk menemukan string target <!--#include tepat 13 karakter, jadi +13
Do While incStart>incEnd+12 'Jarak minimum antara dua referensi adalah kontinu--><--#, incStart adalah 13 karakter dihitung dari <!--#include, jadi minimal harus 13- lebih dari incEnd sebelumnya 1 Kondisi yang diperoleh >incEnd+12
str = Pertengahan(strBlock,incEnd,incStart-incEnd-13)
str = Ganti(str, """", """""") 'Ganti satu tanda kutip ganda dengan dua tanda kutip ganda
str = Ganti(str, VbCr, "")
str = Ganti(str, VbLf, "")
str = Ganti(str, VbCrLf, "")
kode = kode & VbCrLf & "Respon.Tulis """ & str & """"
incEnd=InStr(incStart,strBlock,"-->")+3
oRegExp.pattern="(w+)=""([^""]+)""" 'Cocokkan file="namafile.ext" atau virtual="namavirtual.ext", tangkap dua substring tipe dan nama file
Setel oMatches = oRegExp.Execute(Mid(strBlock,incStart,incEnd-incStart-3))
Set match = oMatches(0) 'Ketika ditentukan bahwa hanya ada satu set tangkapan, untuk mendapatkan substring yang cocok dari set ini, Anda dapat melakukan ini tanpa menggunakan Untuk Setiap kecocokan Di oMatches... Berikutnya
code = code & include(Mid(strFilename, 1, InStrRev(strFilename, "/")) & match.SubMatches(1)) 'Mid(filename, 1, InStrRev(filename, "/")) sedang direferensikan Ketika nama sub-file memiliki jalur, ekstrak jalur dan tambahkan di depan nama file yang secara tradisional direferensikan dalam sub-file untuk menemukan jalur yang benar untuk membuka file, karena jalur file dalam referensi dinamis relatif terhadap file utama . Untuk mencocokkan substring kedua, gunakan SubMatches(1)
incStart = InStr(incEnd,strBlock,"<!--#include ")+13
Lingkaran
str = Pertengahan(strBlock,incEnd)
str = Ganti(str, """", """""") 'Ganti satu tanda kutip ganda dengan dua tanda kutip ganda
str = Ganti(str, VbCr, "")
str = Ganti(str, VbLf, "")
str = Ganti(str, VbCrLf, "")
kode = kode & VbCrLf & "Respon.Tulis """ & str & """"
includeconvert = kode
Fungsi Akhir
Fungsi termasuk (nama file)
Redupkan, konten, fso, f, aspStart, aspEnd, kode
Setel fso=CreateObject("scripting.FileSystemObject")
Setel f=fso.OpenTextFile(Server.MapPath(nama file))
konten=f.BacaSemua
f.tutup
Tetapkan f=tidak ada
Tetapkan fso=tidak ada
kode = ""
aspEnd=1
aspStart=InStr(aspEnd,konten,"<%")+2
Setel ulang=RegExp baru
Lakukan Sementara aspStart>aspEnd+1
'Referensi tradisional <!--#inclde harus berada di luar segmen kode ASP, jadi transfer terlebih dahulu.
kode = kode & sertakan konversi (re, nama file, Pertengahan(konten,aspEnd,aspStart-aspEnd-2))
aspEnd=InStr(aspStart,konten,"%>")+2
re.pattern="^s*=" 'Pengganti reguler ini awalnya menggantikan <% = str %> dengan <%Response.Write str %> standar
code = code & VbCrLf & re.replace(Mid(content,aspStart,aspEnd-aspStart-2),"Response.Write ") 'Tambahkan carriage return dan line feed sebelum blok ASP untuk menghindari beberapa Response.Write di antara kesalahan blok penghubung pada baris yang sama
aspStart=InStr(aspEnd,konten,"<%")+2
Lingkaran
kode = kode & sertakan konversi (re, nama file, Pertengahan(konten,aspEnd))
Setel kembali=tidak ada
sertakan = kode
Fungsi Akhir
Untuk kenyamanan, fungsi di atas pada akhirnya mengembalikan seluruh kode ASP yang mengintegrasikan file yang disertakan. Saat menggunakannya, Anda perlu menggunakan Execute untuk menjalankannya, yaitu saat menggunakannya, Anda memerlukan: Execute(include("file. asp")).
Fungsi di atas lolos pengujian ketika jalur file yang disertakan dan file utama sama. Tidak ada toleransi kesalahan lebih lanjut jika jalur file yang disertakan dan file utama berbeda dipersilakan untuk memberikan komentar dan perbaikan.