你注意到?jīng)]有,利用MX/UD開發(fā)程序時(shí),所有需要鏈接數(shù)據(jù)庫的頁面中,都會(huì)在頁面的開始部分使用包含文件調(diào)用數(shù)據(jù)庫鏈接文件,如:
<!--#include file="Connections/con123456.asp" -->
那么這段代碼有什么好研究的嗎?當(dāng)然有研究了,如果你沒有正確使用它,那么也許你在本地調(diào)試很正常的程序,一旦傳到服務(wù)器上就出錯(cuò),一個(gè)可能的原因就是包含文件在作怪!讓我們了解一下什么是包含文件:
●包含文件
全稱:Server_Side Include ,從名稱上一看就知道應(yīng)該是服務(wù)器端的包含文件,簡稱 SSI.
SSI 為用戶提供在 Web 服務(wù)器處理之前將一個(gè)文件的內(nèi)容插入到另一個(gè)文件的方法。ASP 只使用這一機(jī)制的#include 指令。要在 .asp 文件中插入一個(gè)文件,使用下面的語法:
<!--#include virtual | file ="filename"-->
virtual 和 file 關(guān)鍵字指示用來包含該文件的路徑的類型,filename 是您想包含的文件的路徑和名稱。
被包含文件不要求專門的文件擴(kuò)展名;但是,為被包含文件賦予 .inc 擴(kuò)展名以便和其他類型文件相區(qū)分是一個(gè)良好的編程習(xí)慣。由于大部分虛擬主機(jī)服務(wù)商并沒有設(shè)置 inc 的解釋,如果填入 .inc 的文件地址,就會(huì)直接顯示在瀏覽器源代碼里。所以強(qiáng)烈建議在使用 include 的數(shù)據(jù)庫聯(lián)接文件還有包括有 asp 源代碼的文件時(shí),一定要把后綴改為 .asp
Virtual 關(guān)鍵字
使用 Virtual 關(guān)鍵字指出路徑開始于虛擬目錄。例如,如果一個(gè)被命名為 Footer.inc 的文件屬于一個(gè)名為 /Myapp 的虛擬目錄,則下面的一行將把 Footer.inc 的內(nèi)容插入到包含該行的文件中:
<!--#include virtual ="/myapp/footer.inc"-->
File 關(guān)鍵字
使用 file 關(guān)鍵字指示使用相對路徑。相對路徑開始于含有該包含文件的目錄。例如,如果您的文件位于目錄 Myapp 中,而文件 Header1.inc 在 Myapp\Headers 中,下面的一行將把 Header1.inc 插入到您的文件中:
<!--#include file ="headers/header1.inc"-->
注意,到被包含文件 Headers/header1.inc 的路徑是相對于包含文件的;如果包含 #include 語句的腳本不在 /Myapp 目錄中,那么該語句將不起作用。
特別注意:如果在 Internet 服務(wù)管理器中的“啟用上層目錄”選項(xiàng)被選中,則也可以使用 file 關(guān)鍵字和 ../ 語法包含父目錄即上一層目錄中的文件。
但一般情況下,為了安全考慮,WEB空間服務(wù)商在設(shè)置服務(wù)器時(shí),“啟用上層目錄”選項(xiàng)是被禁止使用的,而你利用MX/UD開發(fā)并在本地機(jī)器上調(diào)試程序時(shí),所有需要鏈接數(shù)據(jù)庫的頁面中,都會(huì)在頁面的開始部分使用包含文件調(diào)用數(shù)據(jù)庫鏈接文件,例如:
<!--#include file="Connections/con123456.asp" -->
如果沒有考慮到“包含父目錄”這個(gè)問題,頁面中可能會(huì)出現(xiàn):
<!--#include file="../Connections/con123456.asp" -->
類似的形式,在本地?cái)?shù)據(jù)庫鏈接很正常(本地設(shè)置虛擬目錄時(shí),“啟用上層目錄”選項(xiàng)默認(rèn)是選中狀態(tài)),上傳到服務(wù)器當(dāng)中就會(huì)出現(xiàn)錯(cuò)誤,這是初學(xué)UD/MX來開發(fā)動(dòng)態(tài)網(wǎng)站,特別是沒有ASP基礎(chǔ)就直接利用UD/MX學(xué)習(xí)動(dòng)態(tài)開發(fā)技術(shù)的朋友們?nèi)菀缀鲆暤牡胤。最好的方法是在本地調(diào)試程序時(shí),將“啟用上層目錄”選項(xiàng)關(guān)閉(禁止使用),以獲得和遠(yuǎn)程服務(wù)器上相同的開發(fā)環(huán)境。
設(shè)置方法如下:
啟動(dòng)IIS管理器;查看你設(shè)置的虛擬目錄/站點(diǎn)屬性,在彈出的屬性面板中點(diǎn)擊主目錄或虛擬目錄標(biāo)簽,如下:
點(diǎn)擊應(yīng)用程序設(shè)置區(qū)當(dāng)中的[配置…]按鈕,彈出應(yīng)用程序配置設(shè)置面板,如下圖:
點(diǎn)擊“應(yīng)用程序選項(xiàng)”標(biāo)簽,將其中的“啟用父目錄”的鉤選符號(hào)去掉。點(diǎn)擊確定按鈕返回。
●被包含文件的位置
被包含文件可以在您的 Web 站點(diǎn)內(nèi)的某個(gè)目錄中,也可以在您的 Web 站點(diǎn)之外。通常,您應(yīng)該使被包含文件位于 Web 站點(diǎn)的目錄中。如果一個(gè)被包含文件位于您的 Web 站點(diǎn)內(nèi),則當(dāng)瀏覽器下次請求包含文件時(shí),將顯示對被包含文件的改變。但是,如果被包含文件位于您的 Web 站點(diǎn)之外,直到 ASP 應(yīng)用程序重新啟動(dòng)或 Web 服務(wù)器重新啟動(dòng)時(shí),這種改變才能體現(xiàn)出來。ASP 檢測在應(yīng)用程序命名空間中(在應(yīng)用程序的起始目錄下)的任何包含文件的改變。
●包含文件:提示和警告
一個(gè)被包含文件也可以包含其他的文件。如果 #include 指令沒有導(dǎo)致循環(huán),一個(gè) .asp 文件可以多次包括同一個(gè)文件。例如,如果文件 First.asp 包含文件 Second.inc,則 Second.inc 一定不能再包含 First.asp。一個(gè)文件也不能包含自身。ASP 檢測此類循環(huán)或嵌套錯(cuò)誤,并在檢測到時(shí)產(chǎn)生一個(gè)錯(cuò)誤消息,同時(shí)停止處理被請求的 .asp 文件。
ASP 在執(zhí)行腳本命令之前包含文件。因此,不能用腳本命令去創(chuàng)建被包含文件的名稱。例如,下面的腳本將不能打開 Header1.inc,因?yàn)?ASP 會(huì)在它分配一個(gè)文件名給變量 name 之前先執(zhí)行 #include 指令。
<!-- This script will fail --> <% name=(header1 & ".inc") %> <!--#include file="<%= name %>"-->
腳本命令和過程必須完全包含在腳本定界符 <% 和 %> 、HTML 標(biāo)記 <SCRIPT> 和 </SCRIPT> 或 HTML 標(biāo)記 <OBJECT> 和 </OBJECT> 中。也就是說,不能在一個(gè) .asp 包含文件中打開一個(gè)腳本定界符,然后在一個(gè)被包含的文件中才關(guān)閉該定界符;腳本或腳本命令必須是一個(gè)完整的單元。例如,下面的腳本將無法運(yùn)行:
<!-- This script will fail --> <% For i = 1 To n statements in main file <!--#include file="header1.inc" --> Next %>
下面的腳本將正常運(yùn)行:
<% For i = 1 to n statements in main file %> <!--#include file="header1.inc" --> <% Next %>
出處:MXSky
責(zé)任編輯:風(fēng)狗
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|